00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import <Foundation/CPObject.j>
00024
00025 #include "CoreGraphics/CGGeometry.h"
00026
00027
00028
00029
00030
00031
00032 CPLeftMouseDown = 1;
00033
00034
00035
00036
00037 CPLeftMouseUp = 2;
00038
00039
00040
00041
00042 CPRightMouseDown = 3;
00043
00044
00045
00046
00047 CPRightMouseUp = 4;
00048
00049
00050
00051
00052 CPMouseMoved = 5;
00053
00054
00055
00056
00057 CPLeftMouseDragged = 6;
00058
00059
00060
00061
00062 CPRightMouseDragged = 7;
00063
00064
00065
00066
00067 CPMouseEntered = 8;
00068
00069
00070
00071
00072 CPMouseExited = 9;
00073
00074
00075
00076
00077 CPKeyDown = 10;
00078
00079
00080
00081
00082 CPKeyUp = 11;
00083
00084
00085
00086
00087 CPFlagsChanged = 12;
00088
00089
00090
00091
00092 CPAppKitDefined = 13;
00093
00094
00095
00096
00097 CPSystemDefined = 14;
00098
00099
00100
00101
00102 CPApplicationDefined = 15;
00103
00104
00105
00106
00107 CPPeriodic = 16;
00108
00109
00110
00111
00112 CPCursorUpdate = 17;
00113
00114
00115
00116
00117 CPScrollWheel = 22;
00118
00119
00120
00121
00122 CPOtherMouseDown = 25;
00123
00124
00125
00126
00127 CPOtherMouseUp = 26;
00128
00129
00130
00131
00132 CPOtherMouseDragged = 27;
00133
00134
00135 CPTouchStart = 28;
00136 CPTouchMove = 29;
00137 CPTouchEnd = 30;
00138 CPTouchCancel = 31;
00139
00140
00141 CPAlphaShiftKeyMask = 1 << 16;
00142 CPShiftKeyMask = 1 << 17;
00143 CPControlKeyMask = 1 << 18;
00144 CPAlternateKeyMask = 1 << 19;
00145 CPCommandKeyMask = 1 << 20;
00146 CPNumericPadKeyMask = 1 << 21;
00147 CPHelpKeyMask = 1 << 22;
00148 CPFunctionKeyMask = 1 << 23;
00149 CPDeviceIndependentModifierFlagsMask = 0xffff0000;
00150
00151 CPLeftMouseDownMask = 1 << CPLeftMouseDown;
00152 CPLeftMouseUpMask = 1 << CPLeftMouseUp;
00153 CPRightMouseDownMask = 1 << CPRightMouseDown;
00154 CPRightMouseUpMask = 1 << CPRightMouseUp;
00155 CPOtherMouseDownMask = 1 << CPOtherMouseDown;
00156 CPOtherMouseUpMask = 1 << CPOtherMouseUp;
00157 CPMouseMovedMask = 1 << CPMouseMoved;
00158 CPLeftMouseDraggedMask = 1 << CPLeftMouseDragged;
00159 CPRightMouseDraggedMask = 1 << CPRightMouseDragged;
00160 CPOtherMouseDragged = 1 << CPOtherMouseDragged;
00161 CPMouseEnteredMask = 1 << CPMouseEntered;
00162 CPMouseExitedMask = 1 << CPMouseExited;
00163 CPCursorUpdateMask = 1 << CPCursorUpdate;
00164 CPKeyDownMask = 1 << CPKeyDown;
00165 CPKeyUpMask = 1 << CPKeyUp;
00166 CPFlagsChangedMask = 1 << CPFlagsChanged;
00167 CPAppKitDefinedMask = 1 << CPAppKitDefined;
00168 CPSystemDefinedMask = 1 << CPSystemDefined;
00169 CPApplicationDefinedMask = 1 << CPApplicationDefined;
00170 CPPeriodicMask = 1 << CPPeriodic;
00171 CPScrollWheelMask = 1 << CPScrollWheel;
00172 CPAnyEventMask = 0xffffffff;
00173
00174 CPDOMEventDoubleClick = "dblclick",
00175 CPDOMEventMouseDown = "mousedown",
00176 CPDOMEventMouseUp = "mouseup",
00177 CPDOMEventMouseMoved = "mousemove",
00178 CPDOMEventMouseDragged = "mousedrag",
00179 CPDOMEventKeyUp = "keyup",
00180 CPDOMEventKeyDown = "keydown",
00181 CPDOMEventKeyPress = "keypress";
00182 CPDOMEventCopy = "copy";
00183 CPDOMEventPaste = "paste";
00184 CPDOMEventScrollWheel = "mousewheel";
00185 CPDOMEventTouchStart = "touchstart";
00186 CPDOMEventTouchMove = "touchmove";
00187 CPDOMEventTouchEnd = "touchend";
00188 CPDOMEventTouchCancel = "touchcancel";
00189
00190 var _CPEventPeriodicEventPeriod = 0,
00191 _CPEventPeriodicEventTimer = nil;
00192
00198 @implementation CPEvent : CPObject
00199 {
00200 CPEventType _type;
00201 CPPoint _location;
00202 unsigned _modifierFlags;
00203 CPTimeInterval _timestamp;
00204 CPGraphicsContext _context;
00205 int _eventNumber;
00206 unsigned _clickCount;
00207 float _pressure;
00208 CPWindow _window;
00209 CPString _characters;
00210 CPString _charactersIgnoringModifiers
00211 BOOL _isARepeat;
00212 unsigned _keyCode;
00213 DOMEvent _DOMEvent;
00214
00215 float _deltaX;
00216 float _deltaY;
00217 float _deltaZ;
00218 }
00219
00236 + (CPEvent)keyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned int)modifierFlags
00237 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00238 characters:(CPString)characters charactersIgnoringModifiers:(CPString)unmodCharacters isARepeat:(BOOL)repeatKey keyCode:(unsigned short)code
00239 {
00240 return [[self alloc] _initKeyEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
00241 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext
00242 characters:characters charactersIgnoringModifiers:unmodCharacters isARepeat:repeatKey keyCode:code];
00243 }
00244
00259 + (id)mouseEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags
00260 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00261 eventNumber:(int)anEventNumber clickCount:(int)aClickCount pressure:(float)aPressure
00262 {
00263 return [[self alloc] _initMouseEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
00264 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber clickCount:aClickCount pressure:aPressure];
00265 }
00266
00281 + (CPEvent)otherEventWithType:(CPEventType)anEventType location:(CGPoint)aLocation modifierFlags:(unsigned)modifierFlags
00282 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00283 subtype:(short)aSubtype data1:(int)aData1 data2:(int)aData2
00284 {
00285 return [[self alloc] _initOtherEventWithType:anEventType location:aLocation modifierFlags:modifierFlags
00286 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext subtype:aSubtype data1:aData1 data2:aData2];
00287 }
00288
00289
00290 - (id)_initMouseEventWithType:(CPEventType)anEventType location:(CPPoint)aPoint modifierFlags:(unsigned)modifierFlags
00291 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00292 eventNumber:(int)anEventNumber clickCount:(int)aClickCount pressure:(float)aPressure
00293 {
00294 self = [super init];
00295
00296 if (self)
00297 {
00298 _type = anEventType;
00299 _location = CPPointCreateCopy(aPoint);
00300 _modifierFlags = modifierFlags;
00301 _timestamp = aTimestamp;
00302 _context = aGraphicsContext;
00303 _eventNumber = anEventNumber;
00304 _clickCount = aClickCount;
00305 _pressure = aPressure;
00306 _window = [CPApp windowWithWindowNumber:aWindowNumber];
00307 }
00308
00309 return self;
00310 }
00311
00312
00313 - (id)_initKeyEventWithType:(CPEventType)anEventType location:(CPPoint)aPoint modifierFlags:(unsigned int)modifierFlags
00314 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00315 characters:(CPString)characters charactersIgnoringModifiers:(CPString)unmodCharacters isARepeat:(BOOL)isARepeat keyCode:(unsigned short)code
00316 {
00317 self = [super init];
00318
00319 if (self)
00320 {
00321 _type = anEventType;
00322 _location = CPPointCreateCopy(aPoint);
00323 _modifierFlags = modifierFlags;
00324 _timestamp = aTimestamp;
00325 _context = aGraphicsContext;
00326 _characters = characters;
00327 _charactersIgnoringModifiers = unmodCharacters;
00328 _isARepeat = isARepeat;
00329 _keyCode = code;
00330 _window = [CPApp windowWithWindowNumber:aWindowNumber];
00331 }
00332
00333 return self;
00334 }
00335
00336
00337 - (id)_initOtherEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags
00338 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00339 subtype:(short)aSubtype data1:(int)aData1 data2:(int)aData2
00340 {
00341 self = [super init];
00342
00343 if (self)
00344 {
00345 _type = anEventType;
00346 _location = CPPointCreateCopy(aPoint);
00347 _modifierFlags = modifierFlags;
00348 _timestamp = aTimestamp;
00349 _context = aGraphicsContext;
00350 _subtype = aSubtype;
00351 _data1 = aData1;
00352 _data2 = aData2;
00353 }
00354
00355 return self;
00356 }
00357
00366 - (CGPoint)locationInWindow
00367 {
00368 return _location;
00369 }
00370
00374 - (unsigned)modifierFlags
00375 {
00376 return _modifierFlags;
00377 }
00378
00382 - (CPTimeInterval)timestamp
00383 {
00384 return _timestamp;
00385 }
00386
00390 - (CPEventType)type
00391 {
00392 return _type;
00393 }
00394
00398 - (CPWindow)window
00399 {
00400 return _window;
00401 }
00402
00406 - (int)windowNumber
00407 {
00408 return _windowNumber;
00409 }
00410
00411
00415 - (int)buttonNumber
00416 {
00417 return _buttonNumber;
00418 }
00419
00423 - (int)clickCount
00424 {
00425 return _clickCount;
00426 }
00427
00432 - (CPString)characters
00433 {
00434 return _characters;
00435 }
00436
00441 - (CPString)charactersIgnoringModifiers
00442 {
00443 return _charactersIgnoringModifiers;
00444 }
00445
00450 - (BOOL)isARepeat
00451 {
00452 return _isARepeat;
00453 }
00454
00459 - (unsigned short)keyCode
00460 {
00461 return _keyCode;
00462 }
00463
00464 - (float)pressure
00465 {
00466 return _pressure;
00467 }
00468
00469
00470
00471
00472 - (DOMEvent)_DOMEvent
00473 {
00474 return _DOMEvent;
00475 }
00476
00477
00481 - (float)deltaX
00482 {
00483 return _deltaX;
00484 }
00485
00489 - (float)deltaY
00490 {
00491 return _deltaY;
00492 }
00493
00497 - (float)deltaZ
00498 {
00499 return _deltaZ;
00500 }
00501
00507 + (void)startPeriodicEventsAfterDelay:(CPTimeInterval)aDelay withPeriod:(CPTimeInterval)aPeriod
00508 {
00509 _CPEventPeriodicEventPeriod = aPeriod;
00510
00511
00512 _CPEventPeriodicEventTimer = window.setTimeout(function() { _CPEventPeriodicEventTimer = window.setInterval(_CPEventFirePeriodEvent, aPeriod * 1000.0); }, aDelay * 1000.0);
00513 }
00514
00518 + (void)stopPeriodicEvents
00519 {
00520 if (_CPEventPeriodicEventTimer === nil)
00521 return;
00522
00523 window.clearTimeout(_CPEventPeriodicEventTimer);
00524
00525 _CPEventPeriodicEventTimer = nil;
00526 }
00527
00528 @end
00529
00530 function _CPEventFirePeriodEvent()
00531 {
00532 [CPApp sendEvent:[CPEvent otherEventWithType:CPPeriodic location:_CGPointMakeZero() modifierFlags:0 timestamp:0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]];
00533 }
00534