2 * psychlops_io_API_OSX.h
3 * Psychlops Standard Library (MacOSX)
5 * Last Modified 2006/01/04 by Kenchi HOSOKAWA
6 * (C) 2006 Kenchi HOSOKAWA, Kazushi MARUYA and Takao SATO
9 #ifndef HEADER_PSYCHLOPS_IO_API_OSX
10 #define HEADER_PSYCHLOPS_IO_API_OSX
12 #include <Carbon/Carbon.h>
13 #include <ApplicationServices/ApplicationServices.h>
14 #include <CoreServices/CoreServices.h>
16 #include "psychlops_io_clock_OSX.h"
17 #include "../../core/devices/psychlops_io_hid.h"
20 #define PSYCHLOPS_SNOW_LEOPARD_PATCH
25 class APIHIDProperties {
27 friend class Keyboard;
28 friend class HumanInterfaceDevice;
31 static MPTaskID inputListnerTask, inputListnerTask2;
32 static bool refresh_needed;
35 static void initialize();
36 static void finalize();
38 static void startListener();
39 static void stopListener();
40 static void bindKeyCode();
42 static void refresh();
44 static bool get(Keyboard::Key code, Keyboard::KeyState state);
45 static bool get(Mouse::Button button, Mouse::ButtonState state);
46 static void setPointerPosition(int x, int y);
49 #if (defined(PANTHER) && ( PANTHER==1 )) || defined(PSYCHLOPS_SNOW_LEOPARD_PATCH)
50 static void lisnerProcedure();
51 static void updateKeyboard();
52 static void updateMouse();
53 static UInt32 key[4][4];
54 static unsigned long keybinder[128][2];
55 enum KeyCodeBinder_OSX{
60 static void loopListener();
61 static CGEventRef listenToKeyboard(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon);
62 static CGEventRef listenToMouse (CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon);
63 static CFRunLoopSourceRef listenerKey, listenerMouse;
64 #if !defined(PSYCHLOPS_SNOW_LEOPARD_PATCH)
65 static int keybinder[128];
71 class APIMouseProperties {
72 friend class APIHIDProperties;
74 static ::Point position_;
77 static void initialize();
81 static bool get(Mouse::Button button, HumanInterfaceDevice::ButtonState state);
82 static void getPosition(int &x, int &y);
83 static void setPosition(int x, int y);
88 } /* <- namespace Psycholops */