|
|
@@ -99,8 +99,10 @@ puglDisplay(PuglView* view) |
|
|
|
|
|
|
|
@protocol PuglGenericView |
|
|
|
@required |
|
|
|
- (PuglView *) puglView; |
|
|
|
- (PuglView *) puglview; |
|
|
|
- (void) setPuglview:(PuglView *)pv; |
|
|
|
- (NSTrackingArea *) puglTrackingArea; |
|
|
|
- (void) setPuglTrackingArea:(NSTrackingArea *)area; |
|
|
|
@end |
|
|
|
|
|
|
|
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 |
|
|
|
@interface PuglOpenGLView : NSOpenGLView<PuglGenericView> |
|
|
|
{ |
|
|
@@ -138,8 +298,10 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
bool doubleBuffered; |
|
|
|
} |
|
|
|
|
|
|
|
- (PuglView *) puglView; |
|
|
|
- (PuglView *) puglview; |
|
|
|
- (void) setPuglview:(PuglView *)pv; |
|
|
|
- (NSTrackingArea *) puglTrackingArea; |
|
|
|
- (void) setPuglTrackingArea:(NSTrackingArea *)area; |
|
|
|
|
|
|
|
- (BOOL) acceptsFirstMouse:(NSEvent*)e; |
|
|
|
- (BOOL) acceptsFirstResponder; |
|
|
@@ -170,7 +332,7 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
@end |
|
|
|
|
|
|
|
@implementation PuglOpenGLView |
|
|
|
- (PuglView *) puglView { |
|
|
|
- (PuglView *) puglview { |
|
|
|
return self->puglview; |
|
|
|
} |
|
|
|
|
|
|
@@ -178,6 +340,14 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
self->puglview = pv; |
|
|
|
} |
|
|
|
|
|
|
|
- (NSTrackingArea *) puglTrackingArea { |
|
|
|
return self->trackingArea; |
|
|
|
} |
|
|
|
|
|
|
|
- (void) setPuglTrackingArea:(NSTrackingArea *)area { |
|
|
|
self->trackingArea = area; |
|
|
|
} |
|
|
|
|
|
|
|
- (BOOL) acceptsFirstMouse:(NSEvent*)e |
|
|
|
{ |
|
|
|
return YES; |
|
|
@@ -256,22 +426,7 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
|
|
|
|
[[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 |
|
|
@@ -286,150 +441,89 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
|
|
|
|
- (void) cursorUpdate:(NSEvent*)e |
|
|
|
{ |
|
|
|
[[NSCursor arrowCursor] set]; |
|
|
|
|
|
|
|
// unused |
|
|
|
return; (void)e; |
|
|
|
cursorUpdate(self, e); |
|
|
|
} |
|
|
|
|
|
|
|
- (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]; |
|
|
|
} |
|
|
|
|
|
|
|
- (void) viewWillMoveToWindow:(NSWindow*)newWindow |
|
|
|
{ |
|
|
|
if (newWindow != nil) { |
|
|
|
[newWindow setAcceptsMouseMovedEvents:YES]; |
|
|
|
[newWindow makeFirstResponder:self]; |
|
|
|
} |
|
|
|
|
|
|
|
viewWillMoveToWindow(self, newWindow); |
|
|
|
[super viewWillMoveToWindow:newWindow]; |
|
|
|
} |
|
|
|
|
|
|
|
- (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 |
|
|
|
{ |
|
|
|
[self mouseMoved:event]; |
|
|
|
mouseMoved(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) rightMouseDragged:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseDragged:event]; |
|
|
|
mouseMoved(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) otherMouseDragged:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseDragged:event]; |
|
|
|
mouseMoved(self, 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 |
|
|
|
{ |
|
|
|
[self mouseDown:event]; |
|
|
|
mouseDown(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) otherMouseDown:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseDown:event]; |
|
|
|
mouseDown(self, 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 |
|
|
|
{ |
|
|
|
[self mouseUp:event]; |
|
|
|
mouseUp(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) otherMouseUp:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseUp:event]; |
|
|
|
mouseUp(self, 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 |
|
|
|
{ |
|
|
|
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 |
|
|
|
{ |
|
|
|
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 |
|
|
|
{ |
|
|
|
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 |
|
|
@@ -443,8 +537,10 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
NSTrackingArea* trackingArea; |
|
|
|
} |
|
|
|
|
|
|
|
- (PuglView *) puglView; |
|
|
|
- (PuglView *) puglview; |
|
|
|
- (void) setPuglview:(PuglView *)pv; |
|
|
|
- (NSTrackingArea *) puglTrackingArea; |
|
|
|
- (void) setPuglTrackingArea:(NSTrackingArea *)area; |
|
|
|
|
|
|
|
- (cairo_t *) cairoContext; |
|
|
|
|
|
|
@@ -456,7 +552,6 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
- (id) initWithFrame:(NSRect)frame; |
|
|
|
- (void) reshape; |
|
|
|
- (void) drawRect:(NSRect)r; |
|
|
|
/* TODO: duplication of code from PuglOpenGLView */ |
|
|
|
- (void) cursorUpdate:(NSEvent*)e; |
|
|
|
- (void) updateTrackingAreas; |
|
|
|
- (void) viewWillMoveToWindow:(NSWindow*)newWindow; |
|
|
@@ -477,7 +572,7 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
@end |
|
|
|
|
|
|
|
@implementation PuglCairoView |
|
|
|
- (PuglView *) puglView { |
|
|
|
- (PuglView *) puglview { |
|
|
|
return self->puglview; |
|
|
|
} |
|
|
|
|
|
|
@@ -485,6 +580,14 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
self->puglview = pv; |
|
|
|
} |
|
|
|
|
|
|
|
- (NSTrackingArea *) puglTrackingArea { |
|
|
|
return self->trackingArea; |
|
|
|
} |
|
|
|
|
|
|
|
- (void) setPuglTrackingArea:(NSTrackingArea *)area { |
|
|
|
self->trackingArea = area; |
|
|
|
} |
|
|
|
|
|
|
|
- (cairo_t *) cairoContext { |
|
|
|
return cr; |
|
|
|
} |
|
|
@@ -535,22 +638,7 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
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 { |
|
|
@@ -576,150 +664,89 @@ getFixedAppKitButton(NSInteger button) |
|
|
|
|
|
|
|
- (void) cursorUpdate:(NSEvent*)e |
|
|
|
{ |
|
|
|
[[NSCursor arrowCursor] set]; |
|
|
|
|
|
|
|
// unused |
|
|
|
return; (void)e; |
|
|
|
cursorUpdate(self, e); |
|
|
|
} |
|
|
|
|
|
|
|
- (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]; |
|
|
|
} |
|
|
|
|
|
|
|
- (void) viewWillMoveToWindow:(NSWindow*)newWindow |
|
|
|
{ |
|
|
|
if (newWindow != nil) { |
|
|
|
[newWindow setAcceptsMouseMovedEvents:YES]; |
|
|
|
[newWindow makeFirstResponder:self]; |
|
|
|
} |
|
|
|
|
|
|
|
viewWillMoveToWindow(self, newWindow); |
|
|
|
[super viewWillMoveToWindow:newWindow]; |
|
|
|
} |
|
|
|
|
|
|
|
- (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 |
|
|
|
{ |
|
|
|
[self mouseMoved:event]; |
|
|
|
mouseMoved(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) rightMouseDragged:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseDragged:event]; |
|
|
|
mouseMoved(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) otherMouseDragged:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseDragged:event]; |
|
|
|
mouseMoved(self, 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 |
|
|
|
{ |
|
|
|
[self mouseDown:event]; |
|
|
|
mouseDown(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) otherMouseDown:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseDown:event]; |
|
|
|
mouseDown(self, 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 |
|
|
|
{ |
|
|
|
[self mouseUp:event]; |
|
|
|
mouseUp(self, event); |
|
|
|
} |
|
|
|
|
|
|
|
- (void) otherMouseUp:(NSEvent*)event |
|
|
|
{ |
|
|
|
[self mouseUp:event]; |
|
|
|
mouseUp(self, 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 |
|
|
|
{ |
|
|
|
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 |
|
|
|
{ |
|
|
|
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 |
|
|
|
{ |
|
|
|
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 |
|
|
|
#endif |
|
|
|