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 CPAlphaShiftKeyMask = 1 << 16;
00135 CPShiftKeyMask = 1 << 17;
00136 CPControlKeyMask = 1 << 18;
00137 CPAlternateKeyMask = 1 << 19;
00138 CPCommandKeyMask = 1 << 20;
00139 CPNumericPadKeyMask = 1 << 21;
00140 CPHelpKeyMask = 1 << 22;
00141 CPFunctionKeyMask = 1 << 23;
00142 CPDeviceIndependentModifierFlagsMask = 0xffff0000;
00143
00144 CPLeftMouseDownMask = 1 << CPLeftMouseDown;
00145 CPLeftMouseUpMask = 1 << CPLeftMouseUp;
00146 CPRightMouseDownMask = 1 << CPRightMouseDown;
00147 CPRightMouseUpMask = 1 << CPRightMouseUp;
00148 CPOtherMouseDownMask = 1 << CPOtherMouseDown;
00149 CPOtherMouseUpMask = 1 << CPOtherMouseUp;
00150 CPMouseMovedMask = 1 << CPMouseMoved;
00151 CPLeftMouseDraggedMask = 1 << CPLeftMouseDragged;
00152 CPRightMouseDraggedMask = 1 << CPRightMouseDragged;
00153 CPOtherMouseDragged = 1 << CPOtherMouseDragged;
00154 CPMouseEnteredMask = 1 << CPMouseEntered;
00155 CPMouseExitedMask = 1 << CPMouseExited;
00156 CPCursorUpdateMask = 1 << CPCursorUpdate;
00157 CPKeyDownMask = 1 << CPKeyDown;
00158 CPKeyUpMask = 1 << CPKeyUp;
00159 CPFlagsChangedMask = 1 << CPFlagsChanged;
00160 CPAppKitDefinedMask = 1 << CPAppKitDefined;
00161 CPSystemDefinedMask = 1 << CPSystemDefined;
00162 CPApplicationDefinedMask = 1 << CPApplicationDefined;
00163 CPPeriodicMask = 1 << CPPeriodic;
00164 CPScrollWheelMask = 1 << CPScrollWheel;
00165 CPAnyEventMask = 0xffffffff;
00166
00167 CPDOMEventDoubleClick = "dblclick",
00168 CPDOMEventMouseDown = "mousedown",
00169 CPDOMEventMouseUp = "mouseup",
00170 CPDOMEventMouseMoved = "mousemove",
00171 CPDOMEventMouseDragged = "mousedrag",
00172 CPDOMEventKeyUp = "keyup",
00173 CPDOMEventKeyDown = "keydown",
00174 CPDOMEventKeyPress = "keypress";
00175 CPDOMEventCopy = "copy";
00176 CPDOMEventPaste = "paste";
00177 CPDOMEventScrollWheel = "mousewheel";
00178
00179 var _CPEventPeriodicEventPeriod = 0,
00180 _CPEventPeriodicEventTimer = nil;
00181
00185 @implementation CPEvent : CPObject
00186 {
00187 CPEventType _type;
00188 CPPoint _location;
00189 unsigned _modifierFlags;
00190 CPTimeInterval _timestamp;
00191 CPGraphicsContext _context;
00192 int _eventNumber;
00193 unsigned _clickCount;
00194 float _pressure;
00195 CPWindow _window;
00196 CPString _characters;
00197 CPString _charactersIgnoringModifiers
00198 BOOL _isARepeat;
00199 unsigned _keyCode;
00200 DOMEvent _DOMEvent;
00201
00202 float _deltaX;
00203 float _deltaY;
00204 float _deltaZ;
00205 }
00206
00223 + (CPEvent)keyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned int)modifierFlags
00224 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00225 characters:(CPString)characters charactersIgnoringModifiers:(CPString)unmodCharacters isARepeat:(BOOL)repeatKey keyCode:(unsigned short)code
00226 {
00227 return [[self alloc] _initKeyEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
00228 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext
00229 characters:characters charactersIgnoringModifiers:unmodCharacters isARepeat:repeatKey keyCode:code];
00230 }
00231
00246 + (id)mouseEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags
00247 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00248 eventNumber:(int)anEventNumber clickCount:(int)aClickCount pressure:(float)aPressure
00249 {
00250 return [[self alloc] _initMouseEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
00251 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber clickCount:aClickCount pressure:aPressure];
00252 }
00253
00268 + (CPEvent)otherEventWithType:(CPEventType)anEventType location:(CGPoint)aLocation modifierFlags:(unsigned)modifierFlags
00269 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00270 subtype:(short)aSubtype data1:(int)aData1 data2:(int)aData2
00271 {
00272 return [[self alloc] _initOtherEventWithType:anEventType location:aLocation modifierFlags:modifierFlags
00273 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext subtype:aSubtype data1:aData1 data2:aData2];
00274 }
00275
00276
00277 - (id)_initMouseEventWithType:(CPEventType)anEventType location:(CPPoint)aPoint modifierFlags:(unsigned)modifierFlags
00278 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00279 eventNumber:(int)anEventNumber clickCount:(int)aClickCount pressure:(float)aPressure
00280 {
00281 self = [super init];
00282
00283 if (self)
00284 {
00285 _type = anEventType;
00286 _location = CPPointCreateCopy(aPoint);
00287 _modifierFlags = modifierFlags;
00288 _timestamp = aTimestamp;
00289 _context = aGraphicsContext;
00290 _eventNumber = anEventNumber;
00291 _clickCount = aClickCount;
00292 _pressure = aPressure;
00293 _window = [CPApp windowWithWindowNumber:aWindowNumber];
00294 }
00295
00296 return self;
00297 }
00298
00299
00300 - (id)_initKeyEventWithType:(CPEventType)anEventType location:(CPPoint)aPoint modifierFlags:(unsigned int)modifierFlags
00301 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00302 characters:(CPString)characters charactersIgnoringModifiers:(CPString)unmodCharacters isARepeat:(BOOL)isARepeat keyCode:(unsigned short)code
00303 {
00304 self = [super init];
00305
00306 if (self)
00307 {
00308 _type = anEventType;
00309 _location = CPPointCreateCopy(aPoint);
00310 _modifierFlags = modifierFlags;
00311 _timestamp = aTimestamp;
00312 _context = aGraphicsContext;
00313 _characters = characters;
00314 _charactersIgnoringModifiers = unmodCharacters;
00315 _isARepeat = isARepeat;
00316 _keyCode = code;
00317 _window = [CPApp windowWithWindowNumber:aWindowNumber];
00318 }
00319
00320 return self;
00321 }
00322
00323
00324 - (id)_initOtherEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags
00325 timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
00326 subtype:(short)aSubtype data1:(int)aData1 data2:(int)aData2
00327 {
00328 self = [super init];
00329
00330 if (self)
00331 {
00332 _type = anEventType;
00333 _location = CPPointCreateCopy(aPoint);
00334 _modifierFlags = modifierFlags;
00335 _timestamp = aTimestamp;
00336 _context = aGraphicsContext;
00337 _subtype = aSubtype;
00338 _data1 = aData1;
00339 _data2 = aData2;
00340 }
00341
00342 return self;
00343 }
00344
00353 - (CGPoint)locationInWindow
00354 {
00355 return _location;
00356 }
00357
00361 - (unsigned)modifierFlags
00362 {
00363 return _modifierFlags;
00364 }
00365
00369 - (CPTimeInterval)timestamp
00370 {
00371 return _timestamp;
00372 }
00373
00377 - (CPEventType)type
00378 {
00379 return _type;
00380 }
00381
00385 - (CPWindow)window
00386 {
00387 return _window;
00388 }
00389
00393 - (int)windowNumber
00394 {
00395 return _windowNumber;
00396 }
00397
00398
00402 - (int)buttonNumber
00403 {
00404 return _buttonNumber;
00405 }
00406
00410 - (int)clickCount
00411 {
00412 return _clickCount;
00413 }
00414
00419 - (CPString)characters
00420 {
00421 return _characters;
00422 }
00423
00428 - (CPString)charactersIgnoringModifiers
00429 {
00430 return _charactersIgnoringModifiers;
00431 }
00432
00437 - (BOOL)isARepeat
00438 {
00439 return _isARepeat;
00440 }
00441
00446 - (unsigned short)keyCode
00447 {
00448 return _keyCode;
00449 }
00450
00451 - (float)pressure
00452 {
00453 return _pressure;
00454 }
00455
00456
00457
00458
00459 - (DOMEvent)_DOMEvent
00460 {
00461 return _DOMEvent;
00462 }
00463
00464
00468 - (float)deltaX
00469 {
00470 return _deltaX;
00471 }
00472
00476 - (float)deltaY
00477 {
00478 return _deltaY;
00479 }
00480
00484 - (float)deltaZ
00485 {
00486 return _deltaZ;
00487 }
00488
00494 + (void)startPeriodicEventsAfterDelay:(CPTimeInterval)aDelay withPeriod:(CPTimeInterval)aPeriod
00495 {
00496 _CPEventPeriodicEventPeriod = aPeriod;
00497
00498
00499 _CPEventPeriodicEventTimer = window.setTimeout(function() { _CPEventPeriodicEventTimer = window.setInterval(_CPEventFirePeriodEvent, aPeriod * 1000.0); }, aDelay * 1000.0);
00500 }
00501
00505 + (void)stopPeriodicEvents
00506 {
00507 if (_CPEventPeriodicEventTimer === nil)
00508 return;
00509
00510 window.clearTimeout(_CPEventPeriodicEventTimer);
00511
00512 _CPEventPeriodicEventTimer = nil;
00513 }
00514
00515 @end
00516
00517 function _CPEventFirePeriodEvent()
00518 {
00519 [CPApp sendEvent:[CPEvent otherEventWithType:CPPeriodic location:_CGPointMakeZero() modifierFlags:0 timestamp:0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]];
00520 }
00521