Skip to content
  • Joshua Goins's avatar
    tablet: add API for relative dials · beca9981
    Joshua Goins authored and Marge Bot's avatar Marge Bot committed
    Some tablets such as those in the XP-PEN PRO series use "dials" which
    are actually scrollwheels and emit EV_REL events. These should not be
    emulated as rings (which are absolute) so we must expose them as a new
    tablet event.
    
    Adds LIBINPUT_EVENT_TABLET_PAD_DIAL that work largely identical as our
    high-resolution wheel events (i.e. the values are in multiples or
    fractions of of 120). Currently supports two dials.
    
    This is a lot of copy/paste from the ring axes because the interface is
    virtually identical. The main difference is that dials give us a v120
    value in the same manner as our scroll axes.
    
    Notes:
    - REL_DIAL is mutually exclusive with REL_WHEEL, we assume the kernel
      doesn't (at this point) give us devices with both. If this changes for
      devices with three dials (wheel + hwheel + dial) we need to add code
      for that.
    - REL_DIAL does not have a high-resolution axis and we assume that any
      device with REL_WHEEL_HI_RES will also have REL_HWHEEL_HI_RES (if the
      second wheel exists).
    - With dials being REL_DIAL or REL_WHEEL there is no possibility of
      detecting a finger release (the kernel does not route EV_RELs with a
      value of zero). Unless this is implemented via a side-channel - and it
      doesn't look like any hardware that supports dials does that - we
      cannot forward any information here. So unlike absolute rings we
      cannot provide a source information here.
    
    Closes #600
    
    
    
    Co-authored-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
    Part-of: <!967>
    beca9981