33 var _CPEventPeriodicEventPeriod = 0,
34 _CPEventPeriodicEventTimer = nil,
35 _CPEventUpperCaseRegex =
new RegExp(
"[A-Z]"),
36 _CPEventStartupMilliseconds =
new Date().getTime();
46 unsigned _modifierFlags;
47 CPTimeInterval _timestamp;
55 CPString _charactersIgnoringModifiers
66 float _scrollingDeltaX;
67 float _scrollingDeltaY;
68 BOOL _hasPreciseScrollingDeltas;
71 BOOL _suppressCappuccinoCut;
72 BOOL _suppressCappuccinoPaste;
79 + (CPTimeInterval)currentTimestamp
81 return (
new Date().getTime() - _CPEventStartupMilliseconds) / 1000;
101 + (
CPEvent)keyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned int)modifierFlags
102 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
103 characters:(
CPString)characters charactersIgnoringModifiers:(
CPString)unmodCharacters isARepeat:(BOOL)repeatKey keyCode:(
unsigned short)code
105 return [[
self alloc] _initKeyEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
106 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext
107 characters:characters charactersIgnoringModifiers:unmodCharacters isARepeat:repeatKey keyCode:code];
125 + (id)mouseEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned)modifierFlags
126 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
127 eventNumber:(
int)anEventNumber clickCount:(
int)aClickCount pressure:(
float)aPressure
129 return [[
self alloc] _initMouseEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
130 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber clickCount:aClickCount pressure:aPressure];
148 + (
CPEvent)otherEventWithType:(CPEventType)anEventType location:(CGPoint)aLocation modifierFlags:(
unsigned)modifierFlags
149 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
150 subtype:(
short)aSubtype data1:(
int)aData1 data2:(
int)aData2
152 return [[
self alloc] _initOtherEventWithType:anEventType location:aLocation modifierFlags:modifierFlags
153 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext subtype:aSubtype data1:aData1 data2:aData2];
156 - (id)_initWithType:(CPEventType)anEventType
158 if (
self = [super
init])
164 _scrollingDeltaX = 0;
166 _scrollingDeltaY = 0;
174 - (id)_initMouseEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned)modifierFlags
175 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
176 eventNumber:(
int)anEventNumber clickCount:(
int)aClickCount pressure:(
float)aPressure
178 if (
self = [
self _initWithType:anEventType])
180 _location = CGPointCreateCopy(aPoint);
181 _modifierFlags = modifierFlags;
182 _timestamp = aTimestamp;
183 _context = aGraphicsContext;
184 _eventNumber = anEventNumber;
185 _clickCount = aClickCount;
186 _pressure = aPressure;
187 _window = [CPApp windowWithWindowNumber:aWindowNumber];
194 - (id)_initKeyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned int)modifierFlags
195 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
196 characters:(
CPString)characters charactersIgnoringModifiers:(
CPString)unmodCharacters isARepeat:(BOOL)isARepeat keyCode:(
unsigned short)code
198 if (
self = [
self _initWithType:anEventType])
200 _location = CGPointCreateCopy(aPoint);
201 _modifierFlags = modifierFlags;
202 _timestamp = aTimestamp;
203 _context = aGraphicsContext;
204 _characters = characters;
205 _charactersIgnoringModifiers = unmodCharacters;
206 _isARepeat = isARepeat;
208 _windowNumber = aWindowNumber;
215 - (id)_initOtherEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned)modifierFlags
216 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
217 subtype:(
short)aSubtype data1:(
int)aData1 data2:(
int)aData2
219 if (
self = [
self _initWithType:anEventType])
221 _location = CGPointCreateCopy(aPoint);
222 _modifierFlags = modifierFlags;
223 _timestamp = aTimestamp;
224 _context = aGraphicsContext;
241 - (CGPoint)locationInWindow
243 return CGPointMakeCopy(_location);
246 - (CGPoint)globalLocation
248 var theWindow = [
self window],
252 return [theWindow convertBaseToGlobal:location];
260 - (unsigned)modifierFlags
262 return _modifierFlags;
268 - (CPTimeInterval)timestamp
287 _window = [CPApp windowWithWindowNumber:_windowNumber];
297 return _windowNumber;
337 return _charactersIgnoringModifiers;
355 - (
unsigned short)keyCode
360 + (CGPoint)mouseLocation
363 var
event = [CPApp currentEvent],
364 eventWindow = [event window];
367 return [eventWindow convertBaseToGlobal:[event locationInWindow]];
369 return [event locationInWindow];
380 - (DOMEvent)_DOMEvent
420 - (BOOL)hasPreciseScrollingDeltas
422 return !!_hasPreciseScrollingDeltas;
430 - (float)scrollingDeltaX
432 return _scrollingDeltaX;
440 - (float)scrollingDeltaY
442 return _scrollingDeltaY;
445 - (BOOL)_triggersKeyEquivalent:(
CPString)aKeyEquivalent withModifierMask:aKeyEquivalentModifierMask
450 if (_CPEventUpperCaseRegex.test(aKeyEquivalent))
467 return [_characters caseInsensitiveCompare:aKeyEquivalent] ===
CPOrderedSame;
470 - (BOOL)_couldBeKeyEquivalent
475 var characterCount = _characters.
length;
485 var firstResponderIsText = [[_window firstResponder] isKindOfClass:[
CPTextField class]];
489 for (var i = 0; i < characterCount; i++)
491 var c = _characters.charAt(i);
503 return !firstResponderIsText;
514 - (BOOL)_platformIsEffectingCutOrPaste
517 return _suppressCappuccinoCut || _suppressCappuccinoPaste;
530 + (void)startPeriodicEventsAfterDelay:(CPTimeInterval)aDelay withPeriod:(CPTimeInterval)aPeriod
532 _CPEventPeriodicEventPeriod = aPeriod;
535 _CPEventPeriodicEventTimer = window.setTimeout(
function() { _CPEventPeriodicEventTimer = window.setInterval(_CPEventFirePeriodEvent, aPeriod * 1000.0); }, aDelay * 1000.0);
541 + (void)stopPeriodicEvents
543 if (_CPEventPeriodicEventTimer === nil)
546 window.clearTimeout(_CPEventPeriodicEventTimer);
548 _CPEventPeriodicEventTimer = nil;
558 return [
CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ chars=\"%@\" unmodchars=\"%@\" repeat=%d keyCode=%d", _type, CGStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _characters, _charactersIgnoringModifiers, _isARepeat, _keyCode];
568 return [
CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ evNum=%d click=%d buttonNumber=%d pressure=%f", _type, CGStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _eventNumber, _clickCount, [
self buttonNumber], _pressure];
570 return [
CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ subtype=%d data1=%d data2=%d", _type, CGStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _subtype, _data1, _data2];
576 function _CPEventFirePeriodEvent()
583 function _CPEventFromNativeMouseEvent(aNativeEvent, anEventType, aPoint, modifierFlags, aTimestamp, aWindowNumber, aGraphicsContext, anEventNumber, aClickCount, aPressure)
587 aNativeEvent._type = anEventType;
588 aNativeEvent._location = aPoint;
589 aNativeEvent._modifierFlags = modifierFlags;
590 aNativeEvent._timestamp = aTimestamp;
591 aNativeEvent._windowNumber = aWindowNumber;
592 aNativeEvent._window = nil;
593 aNativeEvent._context = aGraphicsContext;
594 aNativeEvent._eventNumber = anEventNumber;
595 aNativeEvent._clickCount = aClickCount;
596 aNativeEvent._pressure = aPressure;