123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- /*
- GSEvent.h ... Graphics Service Events.
-
- Copyright (c) 2009, KennyTM~
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * Neither the name of the KennyTM~ nor the names of its contributors may be
- used to endorse or promote products derived from this software without
- specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
- #ifndef GSEVENT_H
- #define GSEVENT_H
- #include "GSWindow.h"
- #include <mach/message.h>
- #include <CoreFoundation/CoreFoundation.h>
- #include <CoreGraphics/CoreGraphics.h>
- #include <Availability.h>
- #if __cplusplus
- extern "C" {
- #endif
- typedef struct __GSEvent* GSEventRef;
-
- typedef struct GSPathInfo {
- unsigned char pathIndex; // 0x0 = 0x5C
- unsigned char pathIdentity; // 0x1 = 0x5D
- unsigned char pathProximity; // 0x2 = 0x5E
- CGFloat pathPressure; // 0x4 = 0x60
- CGFloat pathMajorRadius; // 0x8 = 0x64
- CGPoint pathLocation; // 0xC = 0x68
- GSWindowRef pathWindow; // 0x14 = 0x70
- } GSPathInfo; // sizeof = 0x18.
-
- typedef enum __GSHandInfoType {
- kGSHandInfoTypeTouchDown = 0,
- kGSHandInfoTypeTouchDragged = 1,
- kGSHandInfoTypeTouchMoved = 4,
- kGSHandInfoTypeTouchUp = 5,
- kGSHandInfoTypeCancel = 8
- } GSHandInfoType;
-
- // A.k.a. XXStruct_$jUSvD
- typedef struct GSHandInfo {
- GSHandInfoType type; // 0x0 == 0x3C
- short deltaX, deltaY; // 2, 4 = 0x40, 0x42
- float _0x44;
- float _0x48;
- float width; // 0x10 == 0x4C
- float _0x50;
- float height; // 0x18 == 0x54
- float _0x58;
- unsigned char _0x5C;
- unsigned char pathInfosCount; // 0x22 == 0x5D
- GSPathInfo pathInfos[0]; // 0x60
- } GSHandInfo; // sizeof = 0x24.
-
- typedef struct __GSScrollWheelInfo {
- int deltaY;
- int deltaX;
- } GSScrollWheelInfo;
-
- typedef struct __GSAccelerometerInfo {
- CGFloat axisX, axisY, axisZ;
- } GSAccelerometerInfo;
-
- typedef struct __GSDeviceOrientationInfo {
- int orientation;
- } GSDeviceOrientationInfo;
-
- typedef struct __GSKeyInfo {
- UniChar keyCode, characterIgnoringModifier, charCode; // 0x3C, 0x3E, 0x40
- unsigned short characterSet; // 0x42
- Boolean isKeyRepeating; // 0x44
- } GSKeyInfo;
-
- typedef struct __GSHardwareKeyInfo {
- UniChar keyCode; // 3c
- UniChar characterIgnoringModifier; // 3e
- UniChar charCode; // 40
- unsigned short characterSet; // 42
- uint16_t characters_length; // 44
- UniChar characters[32]; // 46 .. 84
- uint16_t unmodified_characters_length; // 86
- UniChar unmodified_characters[32]; // 88 .. C6
- int unknown0 : 1;
- int isKeyVariant : 1;
- int unknown2 : 14;
- int unknown10 : 16;
- } GSHardwareKeyInfo;
-
- typedef struct __GSAccessoryKeyStateInfo {
- unsigned short a;
- int b;
- } GSAccessoryKeyStateInfo;
-
- typedef struct __GSAppPreferencesChangedInfo {
- size_t length;
- char appName[0];
- } GSAppPreferencesChangedInfo;
-
- typedef struct __GSResetIdleDurationInfo {
- int a, b;
- } GSResetIdleDurationInfo;
-
- typedef struct __GSEventProcessScriptInfo {
- int type;
- size_t length;
- char data[0];
- } GSEventProcessScriptInfo;
-
- typedef enum __GSEventType {
- kGSEventLeftMouseDown = 1,
- kGSEventLeftMouseUp = 2,
- kGSEventMouseMoved = 5,
- kGSEventLeftMouseDragged = 6,
-
- kGSEventKeyDown = 10,
- kGSEventKeyUp = 11,
- kGSEventModifiersChanged = 12,
- kGSEventSimulatorKeyDown = 13,
- kGSEventHardwareKeyDown = 14, // Maybe?
- kGSEventScrollWheel = 22,
- kGSEventAccelerate = 23,
- kGSEventProximityStateChanged = 24,
- kGSEventDeviceOrientationChanged = 50,
- kGSAppPreferencesChanged = 60,
- kGSEventUserDefaultsDidChange = 60, // backward compatibility.
-
- kGSEventResetIdleTimer = 100,
- kGSEventResetIdleDuration = 101,
- kGSEventProcessScript = 200,
- kGSEventDumpUIHierarchy = 500,
- kGSEventDumpScreenContents = 501,
-
- kGSEventMenuButtonDown = 1000,
- kGSEventMenuButtonUp = 1001,
- kGSEventVolumeChanged = 1006,
- kGSEventVolumeUpButtonDown = 1006,
- kGSEventVolumeUpButtonUp = 1007,
- kGSEventVolumeDownButtonDown = 1008,
- kGSEventVolumeDownButtonUp = 1009,
- kGSEventLockButtonDown = 1010,
- kGSEventLockButtonUp = 1011,
- kGSEventRingerOff = 1012,
- kGSEventRingerOn = 1013,
- kGSEventRingerChanged = 1013, // backward compatibility.
- kGSEventLockDevice = 1014,
- kGSEventStatusBarMouseDown = 1015,
- kGSEventStatusBarMouseDragged = 1016,
- kGSEventStatusBarMouseUp = 1017,
- kGSEventHeadsetButtonDown = 1018,
- kGSEventHeadsetButtonUp = 1019,
- kGSEventMotionBegin = 1020,
- kGSEventHeadsetAvailabilityChanged = 1021,
- kGSEventMediaKeyDown = 1022, // ≥3.2
- kGSEventMediaKeyUp = 1023, // ≥3.2
-
- kGSEventVibrate = 1100,
- kGSEventSetBacklightFactor = 1102,
- kGSEventSetBacklightLevel = 1103,
-
- kGSEventApplicationLaunch = 2000,
- kGSEventAnotherApplicationFinishedLaunching = 2001,
- kGSEventSetAppThreadPriority = 2002,
- kGSEventApplicationResume = 2003,
- kGSEventApplicationDidEndResumeAnimation = 2004,
- kGSEventApplicationBeginSuspendAnimation = 2005,
- kGSEventApplicationHandleTestURL = 2006,
- kGSEventApplicationSuspendEventsOnly = 2007,
- kGSEventApplicationSuspend = 2008,
- kGSEventApplicationExit = 2009,
- kGSEventQuitTopApplication = 2010,
- kGSEventApplicationUpdateSuspendedSettings = 2011,
-
- kGSEventHand = 3001,
-
- kGSEventAccessoryAvailabilityChanged = 4000,
- kGSEventAccessoryKeyStateChanged = 4001,
- kGSEventAccessory = 4002,
-
- kGSEventOutOfLineDataRequest = 5000,
- kGSEventOutOfLineDataResponse = 5001,
-
- kGSEventUrgentMemoryWarning = 6000,
-
- kGSEventShouldRouteToFrontMost = 1<<17
- } GSEventType;
-
- typedef enum __GSEventSubType {
- kGSEventSubTypeUnknown,
- } GSEventSubType;
-
- typedef enum GSEventFlags {
- kGSEventFlagMaskShift = 1 << 17,
- kGSEventFlagMaskControl = 1 << 18,
- kGSEventFlagMaskAlternate = 1 << 19,
- kGSEventFlagMaskCommand = 1 << 20
- } GSEventFlags;
-
- typedef struct GSEventRecord {
- GSEventType type; // 0x8
- GSEventSubType subtype; // 0xC
- CGPoint location; // 0x10
- CGPoint windowLocation; // 0x18
- int windowContextId; // 0x20
- uint64_t timestamp; // 0x24, from mach_absolute_time
- GSWindowRef window; // 0x2C
- GSEventFlags flags; // 0x30
- unsigned senderPID; // 0x34
- CFIndex infoSize; // 0x38
- } GSEventRecord;
-
- #pragma mark -
- #pragma mark General info
-
- CFTypeID GSEventGetTypeID();
-
- GSEventRef GSEventCopy(GSEventRef event);
- GSEventRef GSEventCreateWithEventRecord(const GSEventRecord* record);
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_0 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- GSEventRef GSEventCreateWithTypeAndLocation(GSEventType type, CGPoint location);
- #endif
- GSEventRef GSEventCreateWithPlist(CFDictionaryRef dictionary) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_2_2);
-
- const GSEventRecord* GSEventRecordGetRecordDataWithPlist(CFDictionaryRef plist) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_2_2);
- void GSEventRecordGetRecordWithPlist(GSEventRef event_to_fill, CFDictionaryRef plist) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_2_2);
- CFDictionaryRef GSEventCreatePlistRepresentation(GSEventRef event) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_2_2);
-
- Boolean GSEventShouldRouteToFrontMost(GSEventRef event);
- void GSEventRemoveShouldRouteToFrontMost(GSEventRef event);
- GSEventType GSEventGetType(GSEventRef event);
- GSEventSubType GSEventGetSubType(GSEventRef event);
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_0 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- int GSEventGetWindowContextId(GSEventRef event);
- #endif
- CGPoint GSEventGetLocationInWindow(GSEventRef event);
- CGPoint GSEventGetOuterMostPathPosition(GSEventRef event);
- CGPoint GSEventGetInnerMostPathPosition(GSEventRef event);
- CFAbsoluteTime GSEventGetTimestamp(GSEventRef event);
- GSWindowRef GSEventGetWindow(GSEventRef event);
- unsigned GSEventGetSenderPID(GSEventRef event) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- const GSEventRecord* _GSEventGetGSEventRecord(GSEventRef event);
-
- void GSEventSetLocationInWindow(GSEventRef event, CGPoint location);
- void GSEventSetType(GSEventRef event, GSEventType type);
-
- // GSHiccupsEnabled
- #pragma mark -
- #pragma mark Event queue processing
-
- Boolean GSEventQueueContainsMouseEvent();
- mach_port_t GSGetPurpleApplicationPort() __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
-
- Boolean GSGetTimeEventHandling();
- void GSSetTimeEventHandling(Boolean enable);
- void GSSaveEventHandlingTimes();
-
- CFAbsoluteTime _GSEventConvertFromMachTime(uint64_t machTime);
- uint64_t GSCurrentEventTimestamp();
-
- mach_port_name_t GSRegisterPurpleNamedPort(const char* service_name);
- mach_port_name_t GSCopyPurpleNamedPort(const char* service_name);
- mach_port_name_t GSGetPurpleSystemEventPort() __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
-
- void GSEventPopRunLoopMode(CFStringRef mode); ///< Stop the event run loop, and remove "mode" from the run loop mode stack if it is at the top.
- void GSEventPushRunLoopMode(CFStringRef mode); ///< Stop the event run loop and push "mode" to the top of run loop mode stack.
-
- void GSEventStopModal();
- void GSEventRunModal(Boolean disallow_restart);
- void GSEventRun();
-
- void GSEventInitialize(Boolean registerPurple);
-
- #pragma mark -
- #pragma mark Sending events
- void GSSendEvent(const GSEventRecord* record, mach_port_t port);
- void GSSendSimpleEvent(GSEventType type, mach_port_t port) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); ///< This calls GSSendEvent with an empty record.
- void GSSendSystemEvent(const GSEventRecord* record); ///< Send event to the PurpleSystemEventPort.
-
- #pragma mark -
- #pragma mark Callback functions
-
- /// Only 1 function can be registered.
-
- /// Register a callback function that will be called when PurpleEventCallback() is called.
- void GSEventRegisterEventCallBack(void(*callback)(GSEventRef event));
- #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- void GSEventRegisterFindWindowCallBack(int(*callback)(CGPoint position));
- void GSEventRegisterTransformToWindowCoordsCallBack(void*) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- #endif
-
- #pragma mark -
- #pragma mark Touch events
- GSHandInfo GSEventGetHandInfo(GSEventRef event);
- GSPathInfo GSEventGetPathInfoAtIndex(GSEventRef event, CFIndex index);
- void GSEventSetPathInfoAtIndex(GSEventRef event, GSPathInfo pathInfo, CFIndex index);
-
- #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_1
- void GSEventSetHandInfoScale(GSEventRef event, CGFloat denominator);
- #endif
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_0 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- void GSEventChangeHandInfoToCancel(GSEventRef event);
- #endif
-
- void GSEventDisableHandEventCoalescing(Boolean disableHandCoalescing);
-
- Boolean GSEventIsHandEvent(GSEventRef event);
- Boolean GSEventIsChordingHandEvent(GSEventRef event);
-
- // Always returns 1.
- int GSEventGetClickCount(GSEventRef event);
-
- #pragma mark -
- #pragma mark Scroll wheel and touch events
- CGFloat GSEventGetDeltaX(GSEventRef event);
- CGFloat GSEventGetDeltaY(GSEventRef event);
- #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- void GSEventSetDeltaX(GSEventRef event, CGFloat deltaX);
- void GSEventSetDeltaY(GSEventRef event, CGFloat deltaY);
- #endif
-
- #pragma mark -
- #pragma mark Keyboard events
- unsigned short GSEventGetCharacterSet(GSEventRef event);
- GSEventFlags GSEventGetModifierFlags(GSEventRef event);
- Boolean GSEventIsKeyRepeating(GSEventRef event);
- UniChar GSEventGetKeyCode(GSEventRef event);
-
- #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- GSEventRef _GSCreateSyntheticKeyEvent(UniChar keycode, Boolean isKeyUp, Boolean isKeyRepeating);
- #endif
- Boolean GSEventIsKeyCharacterEventType(GSEventRef event, UniChar expected_keycode);
- Boolean GSEventIsTabKeyEvent(GSEventRef event);
-
- CFStringRef GSEventCopyCharactersIgnoringModifiers(GSEventRef event);
- CFStringRef GSEventCopyCharacters(GSEventRef event);
-
- #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- void _GSPostSyntheticKeyEvent(CFStringRef keys, Boolean isKeyUp, Boolean isKeyRepeating);
- #endif
-
- #pragma mark -
- #pragma mark Accelerometer events
- CGFloat GSEventAccelerometerAxisX(GSEventRef event);
- CGFloat GSEventAccelerometerAxisY(GSEventRef event);
- CGFloat GSEventAccelerometerAxisZ(GSEventRef event);
-
- #pragma mark -
- #pragma mark Out-of-line data (deprecated)
- #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
- void GSEventRequestOutOfLineData(mach_port_t port, void* unknown);
- mach_msg_return_t GSEventSendOutOfLineData(mach_port_t port, ...);
- #endif
-
- #pragma mark -
- #pragma mark Hardware manipulation events
- int GSEventDeviceOrientation(GSEventRef event);
- void GSEventRotateSimulator(int x); // -1 = home button on the left, 0 = portrait, 1 = home button on the right.
-
- void GSEventRestoreSensitivity();
- void GSEventSetSensitivity(int sensitivity); // or float?
-
- void GSEventLockDevice(); // 1014.
- void GSEventResetIdleTimer();
- void GSEventResetIdleDuration(int a, int b);
-
- void GSEventSetBacklightLevel(float level);
- void GSEventSetBacklightFactor(int factor);
-
- #pragma mark -
- #pragma mark Application events
- Boolean GSEventIsForceQuitEvent(GSEventRef event);
- void GSEventQuitTopApplication(); // 2010.
-
- void GSSendAppPreferencesChanged(CFStringRef service_name, CFStringRef app_id);
-
- void GSSendApplicationSuspendedSettingsUpdatedEvent(int x, int y, CFStringRef suspendedDefaultPNG, CFStringRef roleID);
- void GSSendApplicationSuspendedEvent(int x, int y, CFStringRef suspendedDefaultPNG, CFStringRef roleID);
- void GSEventFinishedActivating(Boolean b) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
-
- void GSEventSendApplicationOpenURL(CFURLRef url, mach_port_t port);
-
- #pragma mark -
- #pragma mark Accessory key state events
- GSAccessoryKeyStateInfo GSEventGetAccessoryKeyStateInfo(GSEventRef event);
- GSEventRef GSEventCreateAccessoryKeyStateEvent(GSEventRef event, GSEventFlags flags);
- void GSEventAccessoryKeyStateChanged(unsigned short a, int b, GSEventFlags flags);
- void GSEventAccessoryAvailabilityChanged(unsigned short a, int b);
-
- #pragma mark -
- #pragma mark Audio events
- SInt32 _GSEventGetSoundActionID(CFStringRef path);
- void _GSEventPlayAlertOrSystemSoundAtPath(CFStringRef path, Boolean loop, Boolean alert);
-
- SInt32 GSEventPrimeSoundAtPath(CFStringRef path);
- void GSEventStopSoundAtPath(CFStringRef path, Boolean unknown);
- void GSEventPlayAlertSoundAtPath(CFStringRef path);// Equivalent to _GSEventPlayAlertOrSystemSoundAtPath(path, 0, 1)
- void GSEventLoopSoundAtPath(CFStringRef path);// Equivalent to _GSEventPlayAlertOrSystemSoundAtPath(path, 1, 0)
- void GSEventPlaySoundAtPath(CFStringRef path);// Equivalent to _GSEventPlayAlertOrSystemSoundAtPath(path, 0, 0)
-
- void GSEventVibrateForDuration(float secs);
- void GSEventStopVibrator(); ///< Equivalent to GSEventVibrateForDuration(0)
- #pragma mark -
- #pragma mark Hardware keyboard events
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
- extern const char* kGSEventHardwareKeyboardAvailabilityChangedNotification; // "GSEventHardwareKeyboardAttached"
- Boolean GSEventIsHardwareKeyboardAttached(void);
- void GSEventSetHardwareKeyboardAttached(Boolean attached);
-
- // "type" must be 10 or 14.
- GSEventRef GSEventCreateKeyEvent(GSEventType type,
- CGPoint windowLocation,
- CFStringRef characters,
- CFStringRef unmodifiedCharacters,
- GSEventFlags modifiers,
- uint16_t usagePage,
- unsigned options7, unsigned options8);
- void GSSendKeyEvent(GSEventType type,
- CGPoint windowLocation,
- CFStringRef characters,
- CFStringRef unmodifiedCharacters,
- GSEventFlags modifiers,
- uint16_t usagePage,
- unsigned short options7,
- unsigned short options8);
-
- uint16_t GSEventGetUsagePage(GSEventRef event);
- void GSEventSetCharCode(GSEventRef event, UniChar charCode);
- void GSEventSetCharacters(GSEventRef event, CFStringRef characters);
- void GSEventSetKeyCode(GSEventRef event, uint16_t keyCode);
- void GSEventSetUnmodifiedCharacters(GSEventRef event, CFStringRef characters);
-
- Boolean GSEventIsHardwareKeyboardEvent(GSEventRef event);
- Boolean GSEventIsKeyVariant(GSEventRef event);
-
- #endif
-
-
- #if __cplusplus
- }
- #endif
- #endif
|