Tablet device drivers package low-level events as either native tablet events or as mouse events, usually depending on whether they are proximity events or pointer events. Proximity events are always native tablet events. The Application Kit declares (in NSEvent.h) the following event-type constants for native tablet events:
typedef enum _NSEventType { |
// ... |
NSTabletPoint = 23, |
NSTabletProximity = 24, |
// ... |
} NSEventType; |
Drivers almost always package tablet-pointer events as subtypes of mouse events. The Application Kit declares the following constants for tablet subtypes of all event types related to mouse event (NSLeftMouseDown, NSRightMouseUp, NSMouseMoved, and so on):
enum { |
NSMouseEventSubtype = NX_SUBTYPE_DEFAULT, |
NSTabletPointEventSubtype = NX_SUBTYPE_TABLET_POINT, |
NSTabletProximityEventSubtype = NX_SUBTYPE_TABLET_PROXIMITY |
}; |
Under a few exceptional conditions drivers may package a low-level tablet-pointer event as a NSTabletPoint event type instead of a mouse-event subtype. These include the following:
During the interval between a mouse-down (that is, stylus-down) and subsequent dragging events when, for example, only pressure is changing.
When there are two concurrently active pointing devices, the one not moving the cursor generates NSTabletPointevents.
If, for some reason, the tablet driver is told not to move the cursor, the driver packages tablet events in native form.
For this reason, it is recommended that your code check for tablet-pointer events delivered both as native event types and as mouse subtypes.
Last updated: 2007-03-16