Обработка событий планшета
Следующие разделы обсуждают вопросы, связанные с обработкой событий планшета.
Упаковка событий планшета
Низкоуровневые события пакета драйверов планшетного устройства или как собственные события планшета или как события от нажатия мыши, обычно в зависимости от того, являются ли они событиями близости или событиями указателя. События близости всегда являются собственными событиями планшета. Приложение Кит объявляет (в NSEvent.h
) следующие константы типа события для собственных событий планшета:
typedef enum _NSEventType { |
// ... |
NSTabletPoint = 23, |
NSTabletProximity = 24, |
// ... |
} NSEventType; |
Драйверы почти всегда события указателя планшета пакета как подтипы событий от нажатия мыши. Приложение Кит объявляет следующие константы для подтипов планшета всех типов событий, связанных с событием от нажатия мыши (NSLeftMouseDown
, NSRightMouseUp
, NSMouseMoved
, и т.д.):
enum { |
NSMouseEventSubtype = NX_SUBTYPE_DEFAULT, |
NSTabletPointEventSubtype = NX_SUBTYPE_TABLET_POINT, |
NSTabletProximityEventSubtype = NX_SUBTYPE_TABLET_PROXIMITY |
}; |
При нескольких исключительных условиях драйверы могут упаковать низкоуровневое событие указателя планшета как a NSTabletPoint
тип события вместо подтипа события от нажатия мыши. Они включают следующее:
Во время интервала между мышью вниз (т.е. стилус вниз) и последующими событиями перетаскивания, когда, например, только изменяется давление.
Когда существует два одновременно активных манипулятора, один не, перемещение курсора генерирует
NSTabletPoint
события.Если по некоторым причинам драйверу планшета говорят не переместить курсор, события планшета пакетов драйвера в собственной форме.
Поэтому рекомендуется, чтобы Ваш код проверил на события указателя планшета, поставленные и как собственные типы событий и как подтипы мыши.
События планшета и цепочка респондента
Как любой объект NSEvent, события планшета направляются цепочка респондента, пока они не обрабатываются. Респондент возражает в приложении (т.е. объекты, наследовавшиеся от NSResponder) может переопределить надлежащие методы NSResponder и обработать объект NSEvent, передающийся им в том методе. Или они могут передать событие следующему респонденту в цепочке. (Если Вы не переопределяете один из них метод, событие автоматически переходит к следующему респонденту.
Приложение, намеревающееся обработать события планшета, должно переопределить по крайней мере пять методов NSResponder:
tabletProximity:
иtabletPoint:
Реализуйте эти методы для обработки собственной близости и событий планшета указателя.
mouseDown:
,mouseDragged:
, иmouseUp:
реализуйте эти методы для обработки событий от нажатия мыши с подтипом
NSTabletPointEventSubtype
илиNSTabletProximityEventSubtype
.
Рекомендуемый подход должен направить события планшета в этих методах к двум общим обработчикам, один для событий близости и другого для событий указателя. Если у Вас есть объекты в Вашем приложении, которые не находятся в цепочке респондента, и Вы хотите эти объекты знать о событиях планшета, когда они поступают, Вы могли реализовать свою подпрограмму обработчика событий так, чтобы это отправило уведомление всем заинтересованным наблюдателям.