| @@ -99,8 +99,10 @@ puglDisplay(PuglView* view) | |||||
| @protocol PuglGenericView | @protocol PuglGenericView | ||||
| @required | @required | ||||
| - (PuglView *) puglView; | |||||
| - (PuglView *) puglview; | |||||
| - (void) setPuglview:(PuglView *)pv; | - (void) setPuglview:(PuglView *)pv; | ||||
| - (NSTrackingArea *) puglTrackingArea; | |||||
| - (void) setPuglTrackingArea:(NSTrackingArea *)area; | |||||
| @end | @end | ||||
| static unsigned | static unsigned | ||||
| @@ -129,6 +131,164 @@ getFixedAppKitButton(NSInteger button) | |||||
| } | } | ||||
| } | } | ||||
| static void | |||||
| cursorUpdate(NSView<PuglGenericView> *self, NSEvent* event) | |||||
| { | |||||
| [[NSCursor arrowCursor] set]; | |||||
| (void)self; | |||||
| (void)event; | |||||
| } | |||||
| static void | |||||
| updateTrackingAreas(NSView<PuglGenericView> *self) | |||||
| { | |||||
| static const int opts = NSTrackingMouseEnteredAndExited | |||||
| | NSTrackingMouseMoved | |||||
| | NSTrackingEnabledDuringMouseDrag | |||||
| | NSTrackingInVisibleRect | |||||
| | NSTrackingActiveAlways | |||||
| | NSTrackingCursorUpdate; | |||||
| NSTrackingArea *trackingArea = [self puglTrackingArea]; | |||||
| if (trackingArea != nil) { | |||||
| [self removeTrackingArea:trackingArea]; | |||||
| [trackingArea release]; | |||||
| } | |||||
| trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] | |||||
| options:opts | |||||
| owner:self | |||||
| userInfo:nil]; | |||||
| [self setPuglTrackingArea:trackingArea]; | |||||
| [self addTrackingArea:trackingArea]; | |||||
| } | |||||
| static void | |||||
| viewWillMoveToWindow(NSView<PuglGenericView> *self, NSWindow* newWindow) | |||||
| { | |||||
| if (newWindow != nil) { | |||||
| [newWindow setAcceptsMouseMovedEvents:YES]; | |||||
| [newWindow makeFirstResponder:self]; | |||||
| } | |||||
| } | |||||
| static void | |||||
| reshape(NSView<PuglGenericView> *self) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| NSRect bounds = [self bounds]; | |||||
| int width = bounds.size.width; | |||||
| int height = bounds.size.height; | |||||
| puglEnterContext(puglview); | |||||
| if (puglview->reshapeFunc) { | |||||
| puglview->reshapeFunc(puglview, width, height); | |||||
| } else { | |||||
| puglDefaultReshape(width, height); | |||||
| } | |||||
| puglLeaveContext(puglview, false); | |||||
| puglview->width = width; | |||||
| puglview->height = height; | |||||
| } | |||||
| static void | |||||
| mouseMoved(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->motionFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->motionFunc(puglview, loc.x, loc.y); | |||||
| } | |||||
| } | |||||
| static void | |||||
| mouseDown(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->mouseFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), true, loc.x, loc.y); | |||||
| } | |||||
| } | |||||
| static void | |||||
| mouseUp(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->mouseFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), false, loc.x, loc.y); | |||||
| } | |||||
| } | |||||
| static void | |||||
| scrollWheel(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->scrollFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->scrollFunc(puglview, | |||||
| loc.x, loc.y, | |||||
| [event deltaX], [event deltaY]); | |||||
| } | |||||
| } | |||||
| static void | |||||
| keyDown(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->keyboardFunc && !(puglview->ignoreKeyRepeat && [event isARepeat])) { | |||||
| NSString* chars = [event characters]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->keyboardFunc(puglview, true, [chars characterAtIndex:0]); | |||||
| } | |||||
| } | |||||
| static void | |||||
| keyUp(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->keyboardFunc) { | |||||
| NSString* chars = [event characters]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->keyboardFunc(puglview, false, [chars characterAtIndex:0]); | |||||
| } | |||||
| } | |||||
| static void | |||||
| flagsChanged(NSView<PuglGenericView> *self, NSEvent *event) | |||||
| { | |||||
| PuglView* puglview = [self puglview]; | |||||
| if (puglview->specialFunc) { | |||||
| const unsigned mods = getModifiers(puglview, event); | |||||
| if ((mods & PUGL_MOD_SHIFT) != (puglview->mods & PUGL_MOD_SHIFT)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_SHIFT, PUGL_KEY_SHIFT); | |||||
| } else if ((mods & PUGL_MOD_CTRL) != (puglview->mods & PUGL_MOD_CTRL)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_CTRL, PUGL_KEY_CTRL); | |||||
| } else if ((mods & PUGL_MOD_ALT) != (puglview->mods & PUGL_MOD_ALT)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_ALT, PUGL_KEY_ALT); | |||||
| } else if ((mods & PUGL_MOD_SUPER) != (puglview->mods & PUGL_MOD_SUPER)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_SUPER, PUGL_KEY_SUPER); | |||||
| } | |||||
| puglview->mods = mods; | |||||
| } | |||||
| } | |||||
| #ifdef PUGL_HAVE_GL | #ifdef PUGL_HAVE_GL | ||||
| @interface PuglOpenGLView : NSOpenGLView<PuglGenericView> | @interface PuglOpenGLView : NSOpenGLView<PuglGenericView> | ||||
| { | { | ||||
| @@ -138,8 +298,10 @@ getFixedAppKitButton(NSInteger button) | |||||
| bool doubleBuffered; | bool doubleBuffered; | ||||
| } | } | ||||
| - (PuglView *) puglView; | |||||
| - (PuglView *) puglview; | |||||
| - (void) setPuglview:(PuglView *)pv; | - (void) setPuglview:(PuglView *)pv; | ||||
| - (NSTrackingArea *) puglTrackingArea; | |||||
| - (void) setPuglTrackingArea:(NSTrackingArea *)area; | |||||
| - (BOOL) acceptsFirstMouse:(NSEvent*)e; | - (BOOL) acceptsFirstMouse:(NSEvent*)e; | ||||
| - (BOOL) acceptsFirstResponder; | - (BOOL) acceptsFirstResponder; | ||||
| @@ -170,7 +332,7 @@ getFixedAppKitButton(NSInteger button) | |||||
| @end | @end | ||||
| @implementation PuglOpenGLView | @implementation PuglOpenGLView | ||||
| - (PuglView *) puglView { | |||||
| - (PuglView *) puglview { | |||||
| return self->puglview; | return self->puglview; | ||||
| } | } | ||||
| @@ -178,6 +340,14 @@ getFixedAppKitButton(NSInteger button) | |||||
| self->puglview = pv; | self->puglview = pv; | ||||
| } | } | ||||
| - (NSTrackingArea *) puglTrackingArea { | |||||
| return self->trackingArea; | |||||
| } | |||||
| - (void) setPuglTrackingArea:(NSTrackingArea *)area { | |||||
| self->trackingArea = area; | |||||
| } | |||||
| - (BOOL) acceptsFirstMouse:(NSEvent*)e | - (BOOL) acceptsFirstMouse:(NSEvent*)e | ||||
| { | { | ||||
| return YES; | return YES; | ||||
| @@ -256,22 +426,7 @@ getFixedAppKitButton(NSInteger button) | |||||
| [[self openGLContext] update]; | [[self openGLContext] update]; | ||||
| NSRect bounds = [self bounds]; | |||||
| int width = bounds.size.width; | |||||
| int height = bounds.size.height; | |||||
| puglEnterContext(puglview); | |||||
| if (puglview->reshapeFunc) { | |||||
| puglview->reshapeFunc(puglview, width, height); | |||||
| } else { | |||||
| puglDefaultReshape(width, height); | |||||
| } | |||||
| puglLeaveContext(puglview, false); | |||||
| puglview->width = width; | |||||
| puglview->height = height; | |||||
| reshape(self); | |||||
| } | } | ||||
| - (void) drawRect:(NSRect)r | - (void) drawRect:(NSRect)r | ||||
| @@ -286,150 +441,89 @@ getFixedAppKitButton(NSInteger button) | |||||
| - (void) cursorUpdate:(NSEvent*)e | - (void) cursorUpdate:(NSEvent*)e | ||||
| { | { | ||||
| [[NSCursor arrowCursor] set]; | |||||
| // unused | |||||
| return; (void)e; | |||||
| cursorUpdate(self, e); | |||||
| } | } | ||||
| - (void) updateTrackingAreas | - (void) updateTrackingAreas | ||||
| { | { | ||||
| static const int opts = NSTrackingMouseEnteredAndExited | |||||
| | NSTrackingMouseMoved | |||||
| | NSTrackingEnabledDuringMouseDrag | |||||
| | NSTrackingInVisibleRect | |||||
| | NSTrackingActiveAlways | |||||
| | NSTrackingCursorUpdate; | |||||
| if (trackingArea != nil) { | |||||
| [self removeTrackingArea:trackingArea]; | |||||
| [trackingArea release]; | |||||
| } | |||||
| trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] | |||||
| options:opts | |||||
| owner:self | |||||
| userInfo:nil]; | |||||
| [self addTrackingArea:trackingArea]; | |||||
| updateTrackingAreas(self); | |||||
| [super updateTrackingAreas]; | [super updateTrackingAreas]; | ||||
| } | } | ||||
| - (void) viewWillMoveToWindow:(NSWindow*)newWindow | - (void) viewWillMoveToWindow:(NSWindow*)newWindow | ||||
| { | { | ||||
| if (newWindow != nil) { | |||||
| [newWindow setAcceptsMouseMovedEvents:YES]; | |||||
| [newWindow makeFirstResponder:self]; | |||||
| } | |||||
| viewWillMoveToWindow(self, newWindow); | |||||
| [super viewWillMoveToWindow:newWindow]; | [super viewWillMoveToWindow:newWindow]; | ||||
| } | } | ||||
| - (void) mouseMoved:(NSEvent*)event | - (void) mouseMoved:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->motionFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->motionFunc(puglview, loc.x, loc.y); | |||||
| } | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) mouseDragged:(NSEvent*)event | - (void) mouseDragged:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseMoved:event]; | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) rightMouseDragged:(NSEvent*)event | - (void) rightMouseDragged:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDragged:event]; | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) otherMouseDragged:(NSEvent*)event | - (void) otherMouseDragged:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDragged:event]; | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) mouseDown:(NSEvent*)event | - (void) mouseDown:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->mouseFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), true, loc.x, loc.y); | |||||
| } | |||||
| mouseDown(self, event); | |||||
| } | } | ||||
| - (void) rightMouseDown:(NSEvent*)event | - (void) rightMouseDown:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDown:event]; | |||||
| mouseDown(self, event); | |||||
| } | } | ||||
| - (void) otherMouseDown:(NSEvent*)event | - (void) otherMouseDown:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDown:event]; | |||||
| mouseDown(self, event); | |||||
| } | } | ||||
| - (void) mouseUp:(NSEvent*)event | - (void) mouseUp:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->mouseFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), false, loc.x, loc.y); | |||||
| } | |||||
| mouseUp(self, event); | |||||
| } | } | ||||
| - (void) rightMouseUp:(NSEvent*)event | - (void) rightMouseUp:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseUp:event]; | |||||
| mouseUp(self, event); | |||||
| } | } | ||||
| - (void) otherMouseUp:(NSEvent*)event | - (void) otherMouseUp:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseUp:event]; | |||||
| mouseUp(self, event); | |||||
| } | } | ||||
| - (void) scrollWheel:(NSEvent*)event | - (void) scrollWheel:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->scrollFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->scrollFunc(puglview, | |||||
| loc.x, loc.y, | |||||
| [event deltaX], [event deltaY]); | |||||
| } | |||||
| scrollWheel(self, event); | |||||
| } | } | ||||
| - (void) keyDown:(NSEvent*)event | - (void) keyDown:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->keyboardFunc && !(puglview->ignoreKeyRepeat && [event isARepeat])) { | |||||
| NSString* chars = [event characters]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->keyboardFunc(puglview, true, [chars characterAtIndex:0]); | |||||
| } | |||||
| keyDown(self, event); | |||||
| } | } | ||||
| - (void) keyUp:(NSEvent*)event | - (void) keyUp:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->keyboardFunc) { | |||||
| NSString* chars = [event characters]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->keyboardFunc(puglview, false, [chars characterAtIndex:0]); | |||||
| } | |||||
| keyUp(self, event); | |||||
| } | } | ||||
| - (void) flagsChanged:(NSEvent*)event | - (void) flagsChanged:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->specialFunc) { | |||||
| const unsigned mods = getModifiers(puglview, event); | |||||
| if ((mods & PUGL_MOD_SHIFT) != (puglview->mods & PUGL_MOD_SHIFT)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_SHIFT, PUGL_KEY_SHIFT); | |||||
| } else if ((mods & PUGL_MOD_CTRL) != (puglview->mods & PUGL_MOD_CTRL)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_CTRL, PUGL_KEY_CTRL); | |||||
| } else if ((mods & PUGL_MOD_ALT) != (puglview->mods & PUGL_MOD_ALT)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_ALT, PUGL_KEY_ALT); | |||||
| } else if ((mods & PUGL_MOD_SUPER) != (puglview->mods & PUGL_MOD_SUPER)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_SUPER, PUGL_KEY_SUPER); | |||||
| } | |||||
| puglview->mods = mods; | |||||
| } | |||||
| flagsChanged(self, event); | |||||
| } | } | ||||
| @end | @end | ||||
| @@ -443,8 +537,10 @@ getFixedAppKitButton(NSInteger button) | |||||
| NSTrackingArea* trackingArea; | NSTrackingArea* trackingArea; | ||||
| } | } | ||||
| - (PuglView *) puglView; | |||||
| - (PuglView *) puglview; | |||||
| - (void) setPuglview:(PuglView *)pv; | - (void) setPuglview:(PuglView *)pv; | ||||
| - (NSTrackingArea *) puglTrackingArea; | |||||
| - (void) setPuglTrackingArea:(NSTrackingArea *)area; | |||||
| - (cairo_t *) cairoContext; | - (cairo_t *) cairoContext; | ||||
| @@ -456,7 +552,6 @@ getFixedAppKitButton(NSInteger button) | |||||
| - (id) initWithFrame:(NSRect)frame; | - (id) initWithFrame:(NSRect)frame; | ||||
| - (void) reshape; | - (void) reshape; | ||||
| - (void) drawRect:(NSRect)r; | - (void) drawRect:(NSRect)r; | ||||
| /* TODO: duplication of code from PuglOpenGLView */ | |||||
| - (void) cursorUpdate:(NSEvent*)e; | - (void) cursorUpdate:(NSEvent*)e; | ||||
| - (void) updateTrackingAreas; | - (void) updateTrackingAreas; | ||||
| - (void) viewWillMoveToWindow:(NSWindow*)newWindow; | - (void) viewWillMoveToWindow:(NSWindow*)newWindow; | ||||
| @@ -477,7 +572,7 @@ getFixedAppKitButton(NSInteger button) | |||||
| @end | @end | ||||
| @implementation PuglCairoView | @implementation PuglCairoView | ||||
| - (PuglView *) puglView { | |||||
| - (PuglView *) puglview { | |||||
| return self->puglview; | return self->puglview; | ||||
| } | } | ||||
| @@ -485,6 +580,14 @@ getFixedAppKitButton(NSInteger button) | |||||
| self->puglview = pv; | self->puglview = pv; | ||||
| } | } | ||||
| - (NSTrackingArea *) puglTrackingArea { | |||||
| return self->trackingArea; | |||||
| } | |||||
| - (void) setPuglTrackingArea:(NSTrackingArea *)area { | |||||
| self->trackingArea = area; | |||||
| } | |||||
| - (cairo_t *) cairoContext { | - (cairo_t *) cairoContext { | ||||
| return cr; | return cr; | ||||
| } | } | ||||
| @@ -535,22 +638,7 @@ getFixedAppKitButton(NSInteger button) | |||||
| return; | return; | ||||
| } | } | ||||
| NSRect bounds = [self bounds]; | |||||
| int width = bounds.size.width; | |||||
| int height = bounds.size.height; | |||||
| puglEnterContext(puglview); | |||||
| if (puglview->reshapeFunc) { | |||||
| puglview->reshapeFunc(puglview, width, height); | |||||
| } else { | |||||
| puglDefaultReshape(width, height); | |||||
| } | |||||
| puglLeaveContext(puglview, false); | |||||
| puglview->width = width; | |||||
| puglview->height = height; | |||||
| reshape(self); | |||||
| } | } | ||||
| - (void) drawRect:(NSRect)r { | - (void) drawRect:(NSRect)r { | ||||
| @@ -576,150 +664,89 @@ getFixedAppKitButton(NSInteger button) | |||||
| - (void) cursorUpdate:(NSEvent*)e | - (void) cursorUpdate:(NSEvent*)e | ||||
| { | { | ||||
| [[NSCursor arrowCursor] set]; | |||||
| // unused | |||||
| return; (void)e; | |||||
| cursorUpdate(self, e); | |||||
| } | } | ||||
| - (void) updateTrackingAreas | - (void) updateTrackingAreas | ||||
| { | { | ||||
| static const int opts = NSTrackingMouseEnteredAndExited | |||||
| | NSTrackingMouseMoved | |||||
| | NSTrackingEnabledDuringMouseDrag | |||||
| | NSTrackingInVisibleRect | |||||
| | NSTrackingActiveAlways | |||||
| | NSTrackingCursorUpdate; | |||||
| if (trackingArea != nil) { | |||||
| [self removeTrackingArea:trackingArea]; | |||||
| [trackingArea release]; | |||||
| } | |||||
| trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] | |||||
| options:opts | |||||
| owner:self | |||||
| userInfo:nil]; | |||||
| [self addTrackingArea:trackingArea]; | |||||
| updateTrackingAreas(self); | |||||
| [super updateTrackingAreas]; | [super updateTrackingAreas]; | ||||
| } | } | ||||
| - (void) viewWillMoveToWindow:(NSWindow*)newWindow | - (void) viewWillMoveToWindow:(NSWindow*)newWindow | ||||
| { | { | ||||
| if (newWindow != nil) { | |||||
| [newWindow setAcceptsMouseMovedEvents:YES]; | |||||
| [newWindow makeFirstResponder:self]; | |||||
| } | |||||
| viewWillMoveToWindow(self, newWindow); | |||||
| [super viewWillMoveToWindow:newWindow]; | [super viewWillMoveToWindow:newWindow]; | ||||
| } | } | ||||
| - (void) mouseMoved:(NSEvent*)event | - (void) mouseMoved:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->motionFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->motionFunc(puglview, loc.x, loc.y); | |||||
| } | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) mouseDragged:(NSEvent*)event | - (void) mouseDragged:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseMoved:event]; | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) rightMouseDragged:(NSEvent*)event | - (void) rightMouseDragged:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDragged:event]; | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) otherMouseDragged:(NSEvent*)event | - (void) otherMouseDragged:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDragged:event]; | |||||
| mouseMoved(self, event); | |||||
| } | } | ||||
| - (void) mouseDown:(NSEvent*)event | - (void) mouseDown:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->mouseFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), true, loc.x, loc.y); | |||||
| } | |||||
| mouseDown(self, event); | |||||
| } | } | ||||
| - (void) rightMouseDown:(NSEvent*)event | - (void) rightMouseDown:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDown:event]; | |||||
| mouseDown(self, event); | |||||
| } | } | ||||
| - (void) otherMouseDown:(NSEvent*)event | - (void) otherMouseDown:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseDown:event]; | |||||
| mouseDown(self, event); | |||||
| } | } | ||||
| - (void) mouseUp:(NSEvent*)event | - (void) mouseUp:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->mouseFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), false, loc.x, loc.y); | |||||
| } | |||||
| mouseUp(self, event); | |||||
| } | } | ||||
| - (void) rightMouseUp:(NSEvent*)event | - (void) rightMouseUp:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseUp:event]; | |||||
| mouseUp(self, event); | |||||
| } | } | ||||
| - (void) otherMouseUp:(NSEvent*)event | - (void) otherMouseUp:(NSEvent*)event | ||||
| { | { | ||||
| [self mouseUp:event]; | |||||
| mouseUp(self, event); | |||||
| } | } | ||||
| - (void) scrollWheel:(NSEvent*)event | - (void) scrollWheel:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->scrollFunc) { | |||||
| NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->scrollFunc(puglview, | |||||
| loc.x, loc.y, | |||||
| [event deltaX], [event deltaY]); | |||||
| } | |||||
| scrollWheel(self, event); | |||||
| } | } | ||||
| - (void) keyDown:(NSEvent*)event | - (void) keyDown:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->keyboardFunc && !(puglview->ignoreKeyRepeat && [event isARepeat])) { | |||||
| NSString* chars = [event characters]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->keyboardFunc(puglview, true, [chars characterAtIndex:0]); | |||||
| } | |||||
| keyDown(self, event); | |||||
| } | } | ||||
| - (void) keyUp:(NSEvent*)event | - (void) keyUp:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->keyboardFunc) { | |||||
| NSString* chars = [event characters]; | |||||
| puglview->mods = getModifiers(puglview, event); | |||||
| puglview->keyboardFunc(puglview, false, [chars characterAtIndex:0]); | |||||
| } | |||||
| keyUp(self, event); | |||||
| } | } | ||||
| - (void) flagsChanged:(NSEvent*)event | - (void) flagsChanged:(NSEvent*)event | ||||
| { | { | ||||
| if (puglview->specialFunc) { | |||||
| const unsigned mods = getModifiers(puglview, event); | |||||
| if ((mods & PUGL_MOD_SHIFT) != (puglview->mods & PUGL_MOD_SHIFT)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_SHIFT, PUGL_KEY_SHIFT); | |||||
| } else if ((mods & PUGL_MOD_CTRL) != (puglview->mods & PUGL_MOD_CTRL)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_CTRL, PUGL_KEY_CTRL); | |||||
| } else if ((mods & PUGL_MOD_ALT) != (puglview->mods & PUGL_MOD_ALT)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_ALT, PUGL_KEY_ALT); | |||||
| } else if ((mods & PUGL_MOD_SUPER) != (puglview->mods & PUGL_MOD_SUPER)) { | |||||
| puglview->specialFunc(puglview, mods & PUGL_MOD_SUPER, PUGL_KEY_SUPER); | |||||
| } | |||||
| puglview->mods = mods; | |||||
| } | |||||
| flagsChanged(self, event); | |||||
| } | } | ||||
| @end | @end | ||||
| #endif | #endif | ||||