178 var _CPEventPeriodicEventPeriod = 0,
179 _CPEventPeriodicEventTimer = nil,
180 _CPEventUpperCaseRegex =
new RegExp(
"[A-Z]"),
181 _CPEventStartupMilliseconds =
new Date().getTime();
192 unsigned _modifierFlags;
193 CPTimeInterval _timestamp;
196 unsigned _clickCount;
199 Number _windowNumber;
201 CPString _charactersIgnoringModifiers
216 + (CPTimeInterval)currentTimestamp
218 return (
new Date().getTime() - _CPEventStartupMilliseconds) / 1000;
238 + (
CPEvent)keyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned int)modifierFlags
239 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
240 characters:(
CPString)characters charactersIgnoringModifiers:(
CPString)unmodCharacters isARepeat:(BOOL)repeatKey keyCode:(
unsigned short)code
242 return [[
self alloc] _initKeyEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
243 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext
244 characters:characters charactersIgnoringModifiers:unmodCharacters isARepeat:repeatKey keyCode:code];
262 + (id)mouseEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned)modifierFlags
263 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
264 eventNumber:(
int)anEventNumber clickCount:(
int)aClickCount pressure:(
float)aPressure
266 return [[
self alloc] _initMouseEventWithType:anEventType location:aPoint modifierFlags:modifierFlags
267 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber clickCount:aClickCount pressure:aPressure];
285 + (
CPEvent)otherEventWithType:(CPEventType)anEventType location:(CGPoint)aLocation modifierFlags:(
unsigned)modifierFlags
286 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
287 subtype:(
short)aSubtype data1:(
int)aData1 data2:(
int)aData2
289 return [[
self alloc] _initOtherEventWithType:anEventType location:aLocation modifierFlags:modifierFlags
290 timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext subtype:aSubtype data1:aData1 data2:aData2];
293 - (id)_initWithType:(CPEventType)anEventType
295 if (
self = [super init])
309 - (id)_initMouseEventWithType:(CPEventType)anEventType location:(CPPoint)aPoint modifierFlags:(
unsigned)modifierFlags
310 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
311 eventNumber:(
int)anEventNumber clickCount:(
int)aClickCount pressure:(
float)aPressure
313 if (
self = [
self _initWithType:anEventType])
316 _modifierFlags = modifierFlags;
317 _timestamp = aTimestamp;
318 _context = aGraphicsContext;
319 _eventNumber = anEventNumber;
320 _clickCount = aClickCount;
321 _pressure = aPressure;
322 _window = [CPApp windowWithWindowNumber:aWindowNumber];
329 - (id)_initKeyEventWithType:(CPEventType)anEventType location:(CPPoint)aPoint modifierFlags:(
unsigned int)modifierFlags
330 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
331 characters:(
CPString)characters charactersIgnoringModifiers:(
CPString)unmodCharacters isARepeat:(BOOL)isARepeat keyCode:(
unsigned short)code
333 if (
self = [
self _initWithType:anEventType])
336 _modifierFlags = modifierFlags;
337 _timestamp = aTimestamp;
338 _context = aGraphicsContext;
339 _characters = characters;
340 _charactersIgnoringModifiers = unmodCharacters;
341 _isARepeat = isARepeat;
343 _windowNumber = aWindowNumber;
350 - (id)_initOtherEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(
unsigned)modifierFlags
351 timestamp:(CPTimeInterval)aTimestamp windowNumber:(
int)aWindowNumber context:(
CPGraphicsContext)aGraphicsContext
352 subtype:(
short)aSubtype data1:(
int)aData1 data2:(
int)aData2
354 if (
self = [
self _initWithType:anEventType])
357 _modifierFlags = modifierFlags;
358 _timestamp = aTimestamp;
359 _context = aGraphicsContext;
376 - (CGPoint)locationInWindow
378 return _CGPointMakeCopy(_location);
381 - (CGPoint)globalLocation
383 var theWindow = [
self window],
387 return [theWindow convertBaseToGlobal:location];
395 - (unsigned)modifierFlags
397 return _modifierFlags;
403 - (CPTimeInterval)timestamp
422 _window = [CPApp windowWithWindowNumber:_windowNumber];
432 return _windowNumber;
472 return _charactersIgnoringModifiers;
490 - (
unsigned short)keyCode
495 + (CGPoint)mouseLocation
498 var
event = [CPApp currentEvent],
499 eventWindow = [event window];
502 return [eventWindow convertBaseToGlobal:[event locationInWindow]];
504 return [event locationInWindow];
515 - (DOMEvent)_DOMEvent
555 - (BOOL)_triggersKeyEquivalent:(
CPString)aKeyEquivalent withModifierMask:aKeyEquivalentModifierMask
560 if (_CPEventUpperCaseRegex.test(aKeyEquivalent))
577 return [_characters caseInsensitiveCompare:aKeyEquivalent] ===
CPOrderedSame;
580 - (BOOL)_couldBeKeyEquivalent
585 var characterCount = _characters.
length;
595 var firstResponderIsText = [[_window firstResponder] isKindOfClass:[
CPTextField class]];
599 for (var i = 0; i < characterCount; i++)
601 var c = _characters.charAt(i);
613 return !firstResponderIsText;
622 + (void)startPeriodicEventsAfterDelay:(CPTimeInterval)aDelay withPeriod:(CPTimeInterval)aPeriod
624 _CPEventPeriodicEventPeriod = aPeriod;
627 _CPEventPeriodicEventTimer = window.setTimeout(
function() { _CPEventPeriodicEventTimer = window.setInterval(_CPEventFirePeriodEvent, aPeriod * 1000.0); }, aDelay * 1000.0);
633 + (void)stopPeriodicEvents
635 if (_CPEventPeriodicEventTimer === nil)
638 window.clearTimeout(_CPEventPeriodicEventTimer);
640 _CPEventPeriodicEventTimer = nil;
650 return [
CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ chars=\"%@\" unmodchars=\"%@\" repeat=%d keyCode=%d", _type, CPStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _characters, _charactersIgnoringModifiers, _isARepeat, _keyCode];
660 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, CPStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _eventNumber, _clickCount, [
self buttonNumber], _pressure];
662 return [
CPString stringWithFormat:@"CPEvent: type=%d loc=%@ time=%.1f flags=0x%X win=%@ winNum=%d ctxt=%@ subtype=%d data1=%d data2=%d", _type, CPStringFromPoint(_location), _timestamp, _modifierFlags, _window, _windowNumber, _context, _subtype, _data1, _data2];
668 function _CPEventFirePeriodEvent()
675 function _CPEventFromNativeMouseEvent(aNativeEvent, anEventType, aPoint, modifierFlags, aTimestamp, aWindowNumber, aGraphicsContext, anEventNumber, aClickCount, aPressure)
679 aNativeEvent._type = anEventType;
680 aNativeEvent._location = aPoint;
681 aNativeEvent._modifierFlags = modifierFlags;
682 aNativeEvent._timestamp = aTimestamp;
683 aNativeEvent._windowNumber = aWindowNumber;
684 aNativeEvent._window = nil;
685 aNativeEvent._context = aGraphicsContext;
686 aNativeEvent._eventNumber = anEventNumber;
687 aNativeEvent._clickCount = aClickCount;
688 aNativeEvent._pressure = aPressure;