mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-24 10:49:12 +00:00
539 lines
16 KiB
Objective-C
539 lines
16 KiB
Objective-C
/*
|
|
NSEvent.h
|
|
|
|
The event class
|
|
|
|
Copyright (C) 1996,1999 Free Software Foundation, Inc.
|
|
|
|
Author: Scott Christley <scottc@net-community.com>
|
|
Date: 1996
|
|
|
|
This file is part of the GNUstep GUI Library.
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; see the file COPYING.LIB.
|
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef _GNUstep_H_NSEvent
|
|
#define _GNUstep_H_NSEvent
|
|
#import <GNUstepBase/GSVersionMacros.h>
|
|
|
|
#import <Foundation/NSObject.h>
|
|
#import <Foundation/NSGeometry.h>
|
|
// For NSTimeInterval
|
|
#import <Foundation/NSDate.h>
|
|
|
|
@class NSString;
|
|
@class NSWindow;
|
|
@class NSGraphicsContext;
|
|
|
|
/**
|
|
* Enumeration of event types recognized within GNUstep GUI. Each type has a
|
|
* corresponding mask that can be used when filtering for multiple types. For
|
|
* example, the <code>NSLeftMouseDown</code> type has
|
|
* <code>NSLeftMouseDownMask</code> for its mask. The special mask
|
|
* <code>NSAnyEventMask</code> matches any event. The complete list of types
|
|
* is as follows:
|
|
* <example>
|
|
NSLeftMouseDown,
|
|
NSLeftMouseUp,
|
|
NSOtherMouseDown,
|
|
NSOtherMouseUp,
|
|
NSRightMouseDown,
|
|
NSRightMouseUp,
|
|
NSMouseMoved,
|
|
NSLeftMouseDragged,
|
|
NSOtherMouseDragged,
|
|
NSRightMouseDragged,
|
|
NSMouseEntered,
|
|
NSMouseExited,
|
|
NSKeyDown,
|
|
NSKeyUp,
|
|
NSFlagsChanged,
|
|
NSAppKitDefined, // reserved
|
|
NSSystemDefined, // reserved
|
|
NSApplicationDefined, // available for custom use by apps
|
|
NSPeriodic,
|
|
NSCursorUpdate,
|
|
NSScrollWheel
|
|
</example>
|
|
*/
|
|
enum _NSEventType {
|
|
// Note - order IS significant as ranges of values
|
|
// are used for testing for valid event types.
|
|
NSLeftMouseDown = 1,
|
|
NSLeftMouseUp,
|
|
NSRightMouseDown,
|
|
NSRightMouseUp,
|
|
NSMouseMoved,
|
|
NSLeftMouseDragged,
|
|
NSRightMouseDragged,
|
|
NSMouseEntered,
|
|
NSMouseExited,
|
|
NSKeyDown,
|
|
NSKeyUp,
|
|
NSFlagsChanged,
|
|
NSAppKitDefined,
|
|
NSSystemDefined,
|
|
NSApplicationDefined,
|
|
NSPeriodic,
|
|
NSCursorUpdate,
|
|
NSScrollWheel = 22,
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
|
|
NSTabletPoint,
|
|
NSTabletProximity,
|
|
#endif
|
|
NSOtherMouseDown = 25,
|
|
NSOtherMouseUp,
|
|
NSOtherMouseDragged
|
|
};
|
|
typedef NSUInteger NSEventType;
|
|
|
|
enum {
|
|
NSLeftMouseDownMask = (1 << NSLeftMouseDown),
|
|
NSLeftMouseUpMask = (1 << NSLeftMouseUp),
|
|
NSRightMouseDownMask = (1 << NSRightMouseDown),
|
|
NSRightMouseUpMask = (1 << NSRightMouseUp),
|
|
NSMouseMovedMask = (1 << NSMouseMoved),
|
|
NSLeftMouseDraggedMask = (1 << NSLeftMouseDragged),
|
|
NSRightMouseDraggedMask = (1 << NSRightMouseDragged),
|
|
NSMouseEnteredMask = (1 << NSMouseEntered),
|
|
NSMouseExitedMask = (1 << NSMouseExited),
|
|
NSKeyDownMask = (1 << NSKeyDown),
|
|
NSKeyUpMask = (1 << NSKeyUp),
|
|
NSFlagsChangedMask = (1 << NSFlagsChanged),
|
|
NSAppKitDefinedMask = (1 << NSAppKitDefined),
|
|
NSSystemDefinedMask = (1 << NSSystemDefined),
|
|
NSApplicationDefinedMask = (1 << NSApplicationDefined),
|
|
NSPeriodicMask = (1 << NSPeriodic),
|
|
NSCursorUpdateMask = (1 << NSCursorUpdate),
|
|
NSScrollWheelMask = (1 << NSScrollWheel),
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
|
|
NSTabletPointMask = (1 << NSTabletPoint),
|
|
NSTabletProximityMask = (1 << NSTabletProximity),
|
|
#endif
|
|
NSOtherMouseDownMask = (1 << NSOtherMouseDown),
|
|
NSOtherMouseUpMask = (1 << NSOtherMouseUp),
|
|
NSOtherMouseDraggedMask = (1 << NSOtherMouseDragged),
|
|
|
|
NSAnyEventMask = 0xffffffffU,
|
|
|
|
// key events
|
|
GSKeyEventMask = (NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask),
|
|
// mouse events
|
|
GSMouseEventMask = (NSLeftMouseDownMask | NSLeftMouseUpMask | NSLeftMouseDraggedMask
|
|
| NSRightMouseDownMask | NSRightMouseUpMask | NSRightMouseDraggedMask
|
|
| NSOtherMouseDownMask | NSOtherMouseUpMask | NSOtherMouseDraggedMask
|
|
| NSMouseMovedMask | NSScrollWheelMask
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
|
|
| NSTabletPointMask | NSTabletProximityMask
|
|
#endif
|
|
),
|
|
// mouse move events
|
|
GSMouseMovedEventMask = (NSMouseMovedMask | NSScrollWheelMask
|
|
| NSLeftMouseDraggedMask | NSRightMouseDraggedMask
|
|
| NSOtherMouseDraggedMask),
|
|
// enter/exit event
|
|
GSEnterExitEventMask = (NSMouseEnteredMask | NSMouseExitedMask | NSCursorUpdateMask),
|
|
// other events
|
|
GSOtherEventMask = (NSAppKitDefinedMask | NSSystemDefinedMask
|
|
| NSApplicationDefinedMask | NSPeriodicMask),
|
|
|
|
// tracking loops may need to add NSPeriodicMask
|
|
GSTrackingLoopMask = (NSLeftMouseDownMask | NSLeftMouseUpMask
|
|
| NSLeftMouseDraggedMask | NSMouseMovedMask
|
|
| NSRightMouseUpMask | NSOtherMouseUpMask)
|
|
};
|
|
typedef unsigned long long NSEventMask;
|
|
|
|
/*
|
|
* Convert an NSEvent Type to it's respective Event Mask
|
|
*/
|
|
// FIXME: Should we use the inline trick from NSGeometry.h here?
|
|
static inline NSEventMask
|
|
NSEventMaskFromType(NSEventType type);
|
|
|
|
static inline NSEventMask
|
|
NSEventMaskFromType(NSEventType type)
|
|
{
|
|
return (1 << type);
|
|
}
|
|
|
|
enum {
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
|
|
NSDeviceIndependentModifierFlagsMask = 0xffff0000U,
|
|
#endif
|
|
NSAlphaShiftKeyMask = 1 << 16,
|
|
NSShiftKeyMask = 2 << 16,
|
|
NSControlKeyMask = 4 << 16,
|
|
NSAlternateKeyMask = 8 << 16,
|
|
NSCommandKeyMask = 16 << 16,
|
|
NSNumericPadKeyMask = 32 << 16,
|
|
NSHelpKeyMask = 64 << 16,
|
|
NSFunctionKeyMask = 128 << 16
|
|
};
|
|
typedef NSUInteger NSEventModifierFlags;
|
|
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
|
|
enum
|
|
{
|
|
NSUnknownPointingDevice,
|
|
NSPenPointingDevice,
|
|
NSCursorPointingDevice,
|
|
NSEraserPointingDevice
|
|
};
|
|
typedef NSUInteger NSPointingDeviceType;
|
|
|
|
enum
|
|
{
|
|
NSPenTipMask = 1,
|
|
NSPenLowerSideMask = 2,
|
|
NSPenUpperSideMask = 4
|
|
};
|
|
typedef NSUInteger NSEventButtonMask;
|
|
|
|
enum
|
|
{
|
|
NSMouseEventSubtype,
|
|
NSTabletPointEventSubtype,
|
|
NSTabletProximityEventSubtype
|
|
};
|
|
|
|
enum {
|
|
NSWindowExposedEventType = 0,
|
|
NSApplicationActivatedEventType = 1,
|
|
NSApplicationDeactivatedEventType = 2,
|
|
NSWindowMovedEventType = 4,
|
|
NSScreenChangedEventType = 8,
|
|
NSAWTEventType = 16
|
|
};
|
|
|
|
enum
|
|
{
|
|
NSPowerOffEventType = 1
|
|
};
|
|
|
|
#endif
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST)
|
|
enum {
|
|
NSEventPhaseNone = 0,
|
|
NSEventPhaseBegan = 1,
|
|
NSEventPhaseStationary = 2,
|
|
NSEventPhaseChanged = 4,
|
|
NSEventPhaseEnded = 8,
|
|
NSEventPhaseCancelled = 16,
|
|
NSEventPhaseMayBegin = 32
|
|
};
|
|
typedef NSUInteger NSEventPhase;
|
|
|
|
enum {
|
|
NSEventGestureAxisNone = 0,
|
|
NSEventGestureAxisHorizontal,
|
|
NSEventGestureAxisVertical
|
|
};
|
|
typedef NSInteger NSEventGestureAxis;
|
|
|
|
enum {
|
|
NSEventSwipeTrackingLockDirection = 1,
|
|
NSEventSwipeTrackingClampGestureAmount = 2
|
|
};
|
|
typedef NSUInteger NSEventSwipeTrackingOptions;
|
|
|
|
#endif
|
|
|
|
@interface NSEvent : NSObject <NSCoding, NSCopying>
|
|
{
|
|
NSEventType event_type;
|
|
NSPoint location_point;
|
|
NSUInteger modifier_flags;
|
|
NSTimeInterval event_time;
|
|
NSInteger window_num;
|
|
NSGraphicsContext *event_context;
|
|
union _MB_event_data
|
|
{
|
|
struct
|
|
{
|
|
NSInteger event_num;
|
|
NSInteger click;
|
|
NSInteger button;
|
|
float pressure;
|
|
CGFloat deltaX;
|
|
CGFloat deltaY;
|
|
CGFloat deltaZ;
|
|
} mouse;
|
|
struct
|
|
{
|
|
BOOL repeat;
|
|
__unsafe_unretained NSString *char_keys;
|
|
__unsafe_unretained NSString *unmodified_keys;
|
|
unsigned short key_code;
|
|
} key;
|
|
struct
|
|
{
|
|
NSInteger event_num;
|
|
NSInteger tracking_num;
|
|
void *user_data;
|
|
} tracking;
|
|
struct
|
|
{
|
|
short sub_type;
|
|
NSInteger data1;
|
|
NSInteger data2;
|
|
} misc;
|
|
} event_data;
|
|
}
|
|
|
|
+ (NSEvent*) enterExitEventWithType: (NSEventType)type
|
|
location: (NSPoint)location
|
|
modifierFlags: (NSUInteger)flags
|
|
timestamp: (NSTimeInterval)time
|
|
windowNumber: (NSInteger)windowNum
|
|
context: (NSGraphicsContext*)context
|
|
eventNumber: (NSInteger)eventNum
|
|
trackingNumber: (NSInteger)trackingNum
|
|
userData: (void *)userData;
|
|
|
|
+ (NSEvent*) keyEventWithType: (NSEventType)type
|
|
location: (NSPoint)location
|
|
modifierFlags: (NSUInteger)flags
|
|
timestamp: (NSTimeInterval)time
|
|
windowNumber: (NSInteger)windowNum
|
|
context: (NSGraphicsContext*)context
|
|
characters: (NSString *)keys
|
|
charactersIgnoringModifiers: (NSString *)ukeys
|
|
isARepeat: (BOOL)repeatKey
|
|
keyCode: (unsigned short)code;
|
|
|
|
+ (NSEvent*) mouseEventWithType: (NSEventType)type
|
|
location: (NSPoint)location
|
|
modifierFlags: (NSUInteger)flags
|
|
timestamp: (NSTimeInterval)time
|
|
windowNumber: (NSInteger)windowNum
|
|
context: (NSGraphicsContext*)context
|
|
eventNumber: (NSInteger)eventNum
|
|
clickCount: (NSInteger)clickNum
|
|
pressure: (float)pressureValue;
|
|
|
|
#if OS_API_VERSION(GS_API_NONE, GS_API_NONE)
|
|
+ (NSEvent*) mouseEventWithType: (NSEventType)type
|
|
location: (NSPoint)location
|
|
modifierFlags: (NSUInteger)flags
|
|
timestamp: (NSTimeInterval)time
|
|
windowNumber: (NSInteger)windowNum
|
|
context: (NSGraphicsContext*)context
|
|
eventNumber: (NSInteger)eventNum
|
|
clickCount: (NSInteger)clickNum
|
|
pressure: (float)pressureValue
|
|
buttonNumber: (NSInteger)buttonNum
|
|
deltaX: (CGFloat)deltaX
|
|
deltaY: (CGFloat)deltaY
|
|
deltaZ: (CGFloat)deltaZ;
|
|
#endif
|
|
|
|
+ (NSPoint)mouseLocation;
|
|
|
|
+ (NSEvent*) otherEventWithType: (NSEventType)type
|
|
location: (NSPoint)location
|
|
modifierFlags: (NSUInteger)flags
|
|
timestamp: (NSTimeInterval)time
|
|
windowNumber: (NSInteger)windowNum
|
|
context: (NSGraphicsContext*)context
|
|
subtype: (short)subType
|
|
data1: (NSInteger)data1
|
|
data2: (NSInteger)data2;
|
|
|
|
+ (void) startPeriodicEventsAfterDelay: (NSTimeInterval)delaySeconds
|
|
withPeriod: (NSTimeInterval)periodSeconds;
|
|
+ (void) stopPeriodicEvents;
|
|
|
|
|
|
#if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST)
|
|
- (NSInteger) buttonNumber;
|
|
#endif
|
|
- (NSString *) characters;
|
|
- (NSString *) charactersIgnoringModifiers;
|
|
- (NSInteger) clickCount;
|
|
- (NSGraphicsContext*) context;
|
|
- (NSInteger) data1;
|
|
- (NSInteger) data2;
|
|
#if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST)
|
|
- (CGFloat)deltaX;
|
|
- (CGFloat)deltaY;
|
|
- (CGFloat)deltaZ;
|
|
#endif
|
|
- (NSInteger) eventNumber;
|
|
- (BOOL) isARepeat;
|
|
- (unsigned short) keyCode;
|
|
- (NSPoint) locationInWindow;
|
|
- (NSEventModifierFlags) modifierFlags;
|
|
- (float) pressure;
|
|
- (short) subtype;
|
|
- (NSTimeInterval) timestamp;
|
|
- (NSInteger) trackingNumber;
|
|
- (NSEventType) type;
|
|
- (void *) userData;
|
|
- (NSWindow *) window;
|
|
- (NSInteger) windowNumber;
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_3, GS_API_LATEST)
|
|
- (NSEventMask) associatedEventsMask;
|
|
#endif
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
|
|
- (NSInteger) absoluteX;
|
|
- (NSInteger) absoluteY;
|
|
- (NSInteger) absoluteZ;
|
|
- (NSEventButtonMask) buttonMask;
|
|
- (NSUInteger) capabilityMask;
|
|
- (NSUInteger) deviceID;
|
|
- (BOOL) isEnteringProximity;
|
|
- (NSUInteger) pointingDeviceID;
|
|
- (NSUInteger) pointingDeviceSerialNumber;
|
|
- (NSPointingDeviceType) pointingDeviceType;
|
|
- (float) rotation;
|
|
- (NSUInteger) systemTabletID;
|
|
- (NSUInteger) tabletID;
|
|
- (float) tangentialPressure;
|
|
- (NSPoint) tilt;
|
|
- (unsigned long long) uniqueID;
|
|
- (id) vendorDefined;
|
|
- (NSUInteger) vendorID;
|
|
- (NSUInteger) vendorPointingDeviceType;
|
|
#endif
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
|
|
+ (NSEvent*) eventWithEventRef: (const void *)eventRef;
|
|
//+ (NSEvent*) eventWithCGEvent: (CGEventRef)cgEvent;
|
|
- (const void *) eventRef;
|
|
//- (CGEventRef) CGEvent;
|
|
+ (void) setMouseCoalescingEnabled: (BOOL)flag;
|
|
+ (BOOL) isMouseCoalescingEnabled;
|
|
#endif
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
|
|
+ (NSEventModifierFlags) modifierFlags;
|
|
+ (NSTimeInterval) keyRepeatDelay;
|
|
+ (NSTimeInterval) keyRepeatInterval;
|
|
+ (NSUInteger) pressedMouseButtons;
|
|
+ (NSTimeInterval) doubleClickInterval;
|
|
#endif
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST)
|
|
- (NSEventPhase) phase;
|
|
- (NSEventPhase) momentumPhase;
|
|
#endif
|
|
@end
|
|
|
|
enum {
|
|
NSUpArrowFunctionKey = 0xF700,
|
|
NSDownArrowFunctionKey = 0xF701,
|
|
NSLeftArrowFunctionKey = 0xF702,
|
|
NSRightArrowFunctionKey = 0xF703,
|
|
NSF1FunctionKey = 0xF704,
|
|
NSF2FunctionKey = 0xF705,
|
|
NSF3FunctionKey = 0xF706,
|
|
NSF4FunctionKey = 0xF707,
|
|
NSF5FunctionKey = 0xF708,
|
|
NSF6FunctionKey = 0xF709,
|
|
NSF7FunctionKey = 0xF70A,
|
|
NSF8FunctionKey = 0xF70B,
|
|
NSF9FunctionKey = 0xF70C,
|
|
NSF10FunctionKey = 0xF70D,
|
|
NSF11FunctionKey = 0xF70E,
|
|
NSF12FunctionKey = 0xF70F,
|
|
NSF13FunctionKey = 0xF710,
|
|
NSF14FunctionKey = 0xF711,
|
|
NSF15FunctionKey = 0xF712,
|
|
NSF16FunctionKey = 0xF713,
|
|
NSF17FunctionKey = 0xF714,
|
|
NSF18FunctionKey = 0xF715,
|
|
NSF19FunctionKey = 0xF716,
|
|
NSF20FunctionKey = 0xF717,
|
|
NSF21FunctionKey = 0xF718,
|
|
NSF22FunctionKey = 0xF719,
|
|
NSF23FunctionKey = 0xF71A,
|
|
NSF24FunctionKey = 0xF71B,
|
|
NSF25FunctionKey = 0xF71C,
|
|
NSF26FunctionKey = 0xF71D,
|
|
NSF27FunctionKey = 0xF71E,
|
|
NSF28FunctionKey = 0xF71F,
|
|
NSF29FunctionKey = 0xF720,
|
|
NSF30FunctionKey = 0xF721,
|
|
NSF31FunctionKey = 0xF722,
|
|
NSF32FunctionKey = 0xF723,
|
|
NSF33FunctionKey = 0xF724,
|
|
NSF34FunctionKey = 0xF725,
|
|
NSF35FunctionKey = 0xF726,
|
|
NSInsertFunctionKey = 0xF727,
|
|
NSDeleteFunctionKey = 0xF728,
|
|
NSHomeFunctionKey = 0xF729,
|
|
NSBeginFunctionKey = 0xF72A,
|
|
NSEndFunctionKey = 0xF72B,
|
|
NSPageUpFunctionKey = 0xF72C,
|
|
NSPageDownFunctionKey = 0xF72D,
|
|
NSPrintScreenFunctionKey = 0xF72E,
|
|
NSScrollLockFunctionKey = 0xF72F,
|
|
NSPauseFunctionKey = 0xF730,
|
|
NSSysReqFunctionKey = 0xF731,
|
|
NSBreakFunctionKey = 0xF732,
|
|
NSResetFunctionKey = 0xF733,
|
|
NSStopFunctionKey = 0xF734,
|
|
NSMenuFunctionKey = 0xF735,
|
|
NSUserFunctionKey = 0xF736,
|
|
NSSystemFunctionKey = 0xF737,
|
|
NSPrintFunctionKey = 0xF738,
|
|
NSClearLineFunctionKey = 0xF739,
|
|
NSClearDisplayFunctionKey = 0xF73A,
|
|
NSInsertLineFunctionKey = 0xF73B,
|
|
NSDeleteLineFunctionKey = 0xF73C,
|
|
NSInsertCharFunctionKey = 0xF73D,
|
|
NSDeleteCharFunctionKey = 0xF73E,
|
|
NSPrevFunctionKey = 0xF73F,
|
|
NSNextFunctionKey = 0xF740,
|
|
NSSelectFunctionKey = 0xF741,
|
|
NSExecuteFunctionKey = 0xF742,
|
|
NSUndoFunctionKey = 0xF743,
|
|
NSRedoFunctionKey = 0xF744,
|
|
NSFindFunctionKey = 0xF745,
|
|
NSHelpFunctionKey = 0xF746,
|
|
NSModeSwitchFunctionKey = 0xF747
|
|
};
|
|
|
|
#if OS_API_VERSION(GS_API_NONE, GS_API_NONE)
|
|
typedef enum {
|
|
GSAppKitWindowMoved = 1,
|
|
GSAppKitWindowResized,
|
|
GSAppKitWindowClose,
|
|
GSAppKitWindowMiniaturize,
|
|
GSAppKitWindowFocusIn,
|
|
GSAppKitWindowFocusOut,
|
|
GSAppKitWindowLeave,
|
|
GSAppKitWindowEnter,
|
|
GSAppKitDraggingEnter,
|
|
GSAppKitDraggingUpdate,
|
|
GSAppKitDraggingStatus,
|
|
GSAppKitDraggingExit,
|
|
GSAppKitDraggingDrop,
|
|
GSAppKitDraggingFinished,
|
|
GSAppKitRegionExposed,
|
|
GSAppKitWindowDeminiaturize,
|
|
GSAppKitAppHide
|
|
} GSAppKitSubtype;
|
|
#endif
|
|
|
|
#endif /* _GNUstep_H_NSEvent */
|