Skip to content

Commit

Permalink
Abstract the shift and mask for mouse button event processing into ma…
Browse files Browse the repository at this point in the history
…nifest

constants on MacOS in preparation for including more buttons from gaming mice.
  • Loading branch information
eliotmiranda committed Jan 26, 2021
1 parent 108075d commit 010c20e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
2 changes: 1 addition & 1 deletion platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
- (void) pushEventToQueue: (sqInputEvent *) evt;
- (void) fakeMouseWheelKeyboardEventsKeyCode: (int) keyCode ascii: (int) ascii windowIndex: (int) windowIndex;
- (int) mapMouseAndModifierStateToSqueakBits: (NSEvent *) event;
- (int) translateCocoaModifiersToSqueakModifiers: (NSUInteger) modifiers;
- (int) translateCocoaModifiersToSqueak: (NSUInteger) modifiers;
- (void) recordDragEvent: (int) dragType numberOfFiles: (int) numFiles where: (NSPoint) local_point windowIndex: (sqInt) windowIndex view:(NSView *)aView;
- (void) recordURLEvent: (int) dragType numberOfFiles: (int) numFiles;
- (void) recordWindowEvent: (int) type window: (NSWindow *) window;
Expand Down
31 changes: 18 additions & 13 deletions platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ Some of this code was funded via a grant from the European Smalltalk User Group
extern struct VirtualMachine* interpreterProxy;
extern SqueakOSXAppDelegate *gDelegateApp;

static int buttonState=0;
static int buttonState = 0;

static int firstScreenHeight = 0;

#define MouseButtonMask 0x7
#define MouseButtonShift 3

/*
* Answer (cache) the height of the main display, needed for transforming
* mac screen coordinates to Squeak screen coordinates.
Expand Down Expand Up @@ -204,7 +208,7 @@ - (void) recordCharEvent:(NSString *) unicodeString fromView: (NSView <sqSqueakO
unicode = [unicodeString characterAtIndex: i];

if (mainView.lastSeenKeyBoardStrokeDetails) {
evt.modifiers = [self translateCocoaModifiersToSqueakModifiers: mainView.lastSeenKeyBoardStrokeDetails.modifierFlags];
evt.modifiers = [self translateCocoaModifiersToSqueak: mainView.lastSeenKeyBoardStrokeDetails.modifierFlags];
evt.charCode = mainView.lastSeenKeyBoardStrokeDetails.keyCode;
} else {
evt.modifiers = 0;
Expand Down Expand Up @@ -255,7 +259,7 @@ - (void) recordKeyDownEvent:(NSEvent *)theEvent fromView: (NSView <sqSqueakOSXVi
evt.timeStamp = ioMSecs();
evt.charCode = [theEvent keyCode];
evt.pressCode = EventKeyDown;
evt.modifiers = [self translateCocoaModifiersToSqueakModifiers: [theEvent modifierFlags]];
evt.modifiers = [self translateCocoaModifiersToSqueak: [theEvent modifierFlags]];
evt.utf32Code = 0;
evt.reserved1 = 0;
evt.windowIndex = [[aView windowLogic] windowIndex];
Expand All @@ -271,7 +275,7 @@ - (void) recordKeyUpEvent:(NSEvent *)theEvent fromView: (NSView <sqSqueakOSXView
evt.timeStamp = ioMSecs();
evt.charCode = [theEvent keyCode];
evt.pressCode = EventKeyUp;
evt.modifiers = [self translateCocoaModifiersToSqueakModifiers: [theEvent modifierFlags]];
evt.modifiers = [self translateCocoaModifiersToSqueak: [theEvent modifierFlags]];
evt.utf32Code = 0;
evt.reserved1 = 0;
evt.windowIndex = aView.windowLogic.windowIndex;
Expand All @@ -292,8 +296,8 @@ - (void) recordMouseEvent:(NSEvent *)theEvent fromView: (NSView <sqSqueakOSXView
evt.y = lrintf((float)local_point.y);

int buttonAndModifiers = [self mapMouseAndModifierStateToSqueakBits: theEvent];
evt.buttons = buttonAndModifiers & 0x07;
evt.modifiers = buttonAndModifiers >> 3;
evt.buttons = buttonAndModifiers & MouseButtonMask;
evt.modifiers = buttonAndModifiers >> MouseButtonShift;
#if COGVM | STACKVM
evt.nrClicks = 0;
#else
Expand All @@ -318,8 +322,8 @@ - (void) recordMouseButtonEvent:(NSEvent *)theEvent fromView: (NSView <sqSqueakO
evt.y = lrintf((float)local_point.y);

int buttonAndModifiers = [self mapMouseAndModifierStateToSqueakBits: theEvent];
evt.buttons = buttonAndModifiers & 0x07;
evt.modifiers = buttonAndModifiers >> 3;
evt.buttons = buttonAndModifiers & MouseButtonMask;
evt.modifiers = buttonAndModifiers >> MouseButtonShift;
#if COGVM | STACKVM
evt.nrClicks = theEvent.clickCount;
#else
Expand Down Expand Up @@ -391,8 +395,8 @@ - (void) recordWheelEvent:(NSEvent *) theEvent fromView: (NSView <sqSqueakOSXVie
prevYDelta = 0;

int buttonAndModifiers = [self mapMouseAndModifierStateToSqueakBits: theEvent];
evt.buttons = buttonAndModifiers & 7;
evt.modifiers = buttonAndModifiers >> 3;
evt.buttons = buttonAndModifiers & MouseButtonMask;
evt.modifiers = buttonAndModifiers >> MouseButtonShift;
evt.windowIndex = aView.windowLogic.windowIndex;
[self pushEventToQueue:(sqInputEvent *) &evt];
}
Expand Down Expand Up @@ -470,7 +474,7 @@ - (void) fakeMouseWheelKeyboardEventsKeyCode: (int) keyCode ascii: (int) ascii w
*
* While we could just shift and mask, let's be clean an just check.
*/
- (int) translateCocoaModifiersToSqueakModifiers: (NSUInteger) modifiers {
- (int) translateCocoaModifiersToSqueak: (NSUInteger) modifiers {
return
(modifiers & NSEventModifierFlagShift ? ShiftKeyBit : 0) |
(modifiers & NSEventModifierFlagControl ? CtrlKeyBit : 0) |
Expand Down Expand Up @@ -538,7 +542,8 @@ - (int) mapMouseAndModifierStateToSqueakBits: (NSEvent *) event {
}

// button state: low three bits are mouse buttons; next 8 bits are modifier bits
buttonState = ([self translateCocoaModifiersToSqueakModifiers: flags] << 3) | (stButtons & 0x7);
buttonState = ([self translateCocoaModifiersToSqueak: flags] << MouseButtonShift)
| (stButtons & MouseButtonMask);
return buttonState;
}

Expand All @@ -553,7 +558,7 @@ - (void) recordDragEvent:(int)dragType numberOfFiles:(int)numFiles where:(NSPoin
evt.dragType= dragType;
evt.x = lrintf(local_point.x);
evt.y = lrintf(local_point.y);
evt.modifiers= (buttonState >> 3);
evt.modifiers= buttonState >> MouseButtonShift;
evt.numFiles= numFiles;
evt.windowIndex = windowIndex;
[self pushEventToQueue: (sqInputEvent *) &evt];
Expand Down

0 comments on commit 010c20e

Please sign in to comment.