|
|
@@ -101,13 +101,16 @@ puglDisplay(PuglView* view) |
|
|
|
depthBits:(int)numDepthBits; |
|
|
|
- (void) reshape; |
|
|
|
- (void) drawRect:(NSRect)rect; |
|
|
|
- (void) mouseEntered:(NSEvent*)event; |
|
|
|
- (void) mouseExited:(NSEvent*)event; |
|
|
|
- (void) mouseMoved:(NSEvent*)event; |
|
|
|
- (void) mouseDragged:(NSEvent*)event; |
|
|
|
- (void) rightMouseDragged:(NSEvent*)event; |
|
|
|
- (void) mouseDown:(NSEvent*)event; |
|
|
|
- (void) mouseUp:(NSEvent*)event; |
|
|
|
- (void) rightMouseDragged:(NSEvent*)event; |
|
|
|
- (void) rightMouseDown:(NSEvent*)event; |
|
|
|
- (void) rightMouseUp:(NSEvent*)event; |
|
|
|
- (void) scrollWheel:(NSEvent*)event; |
|
|
|
- (void) keyDown:(NSEvent*)event; |
|
|
|
- (void) keyUp:(NSEvent*)event; |
|
|
|
- (void) flagsChanged:(NSEvent*)event; |
|
|
@@ -342,6 +345,7 @@ getModifiers(PuglView* view, NSEvent* ev) |
|
|
|
struct PuglInternalsImpl { |
|
|
|
PuglOpenGLView* glview; |
|
|
|
id window; |
|
|
|
bool isEmbed; |
|
|
|
}; |
|
|
|
|
|
|
|
PuglView* |
|
|
@@ -375,8 +379,9 @@ puglCreate(PuglNativeWindow parent, |
|
|
|
[window setPuglview:view]; |
|
|
|
[window setTitle:titleString]; |
|
|
|
|
|
|
|
impl->glview = [PuglOpenGLView new]; |
|
|
|
impl->window = window; |
|
|
|
impl->glview = [PuglOpenGLView new]; |
|
|
|
impl->window = window; |
|
|
|
impl->isEmbed = (parent != 0); |
|
|
|
impl->glview->puglview = view; |
|
|
|
|
|
|
|
[window setContentView:impl->glview]; |
|
|
@@ -406,25 +411,34 @@ puglDestroy(PuglView* view) |
|
|
|
PuglStatus |
|
|
|
puglProcessEvents(PuglView* view) |
|
|
|
{ |
|
|
|
[view->impl->glview setNeedsDisplay: YES]; |
|
|
|
|
|
|
|
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; |
|
|
|
NSEvent* event; |
|
|
|
|
|
|
|
for (;;) { |
|
|
|
event = [view->impl->window |
|
|
|
nextEventMatchingMask:NSAnyEventMask |
|
|
|
untilDate:[NSDate distantPast] |
|
|
|
inMode:NSDefaultRunLoopMode |
|
|
|
dequeue:YES]; |
|
|
|
|
|
|
|
if (event == nil) |
|
|
|
break; |
|
|
|
if (! view->impl->isEmbed) |
|
|
|
{ |
|
|
|
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; |
|
|
|
NSEvent* event; |
|
|
|
|
|
|
|
static const NSUInteger eventMask = (NSMouseEnteredMask | NSMouseExitedMask | NSMouseMovedMask | |
|
|
|
NSLeftMouseDraggedMask | NSRightMouseDraggedMask | |
|
|
|
NSLeftMouseDownMask | NSLeftMouseUpMask | |
|
|
|
NSRightMouseDownMask | NSRightMouseUpMask | |
|
|
|
NSScrollWheelMask | NSKeyDownMask | NSKeyUpMask); |
|
|
|
|
|
|
|
for (;;) { |
|
|
|
event = [view->impl->window |
|
|
|
nextEventMatchingMask:eventMask |
|
|
|
untilDate:[NSDate distantPast] |
|
|
|
inMode:NSEventTrackingRunLoopMode |
|
|
|
dequeue:YES]; |
|
|
|
|
|
|
|
if (event == nil) |
|
|
|
break; |
|
|
|
|
|
|
|
[view->impl->window sendEvent: event]; |
|
|
|
} |
|
|
|
|
|
|
|
[view->impl->window sendEvent: event]; |
|
|
|
[pool release]; |
|
|
|
} |
|
|
|
|
|
|
|
[pool release]; |
|
|
|
|
|
|
|
[view->impl->glview setNeedsDisplay: YES]; |
|
|
|
|
|
|
|
return PUGL_SUCCESS; |
|
|
|
} |
|
|
|