commit c36e40930ffa64c6ab413c3104a0b947e1bc179b
parent 1d00b38275356435cd384fd89fa9e65e4d6939c8
Author: falkTX <falktx@gmail.com>
Date: Wed, 14 May 2014 17:55:53 +0100
Experimental osx changes
Diffstat:
2 files changed, 44 insertions(+), 18 deletions(-)
diff --git a/dgl/src/Geometry.cpp b/dgl/src/Geometry.cpp
@@ -16,6 +16,8 @@
#include "../Geometry.hpp"
+#include <cmath>
+
START_NAMESPACE_DGL
// -----------------------------------------------------------------------
diff --git a/dgl/src/pugl/pugl_osx.m b/dgl/src/pugl/pugl_osx.m
@@ -365,24 +365,31 @@ puglCreateWindow(PuglView* view, const char* title)
[NSAutoreleasePool new];
[NSApplication sharedApplication];
- id window = [[PuglWindow new]retain];
+ impl->glview = [PuglOpenGLView new];
+ impl->glview->puglview = view;
- [window setPuglview:view];
+ if (view->resizable) {
+ [impl->glview setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
+ }
+
+ if (view->parent) {
+ NSView* pview = (NSView*)view->parent;
+ [pview addSubview:impl->glview];
+ return 0;
+ }
+
+ id window = [[PuglWindow new]retain];
if (title) {
NSString* titleString = [[NSString alloc]
- initWithBytes:title
- length:strlen(title)
- encoding:NSUTF8StringEncoding];
+ initWithBytes:title
+ length:strlen(title)
+ encoding:NSUTF8StringEncoding];
[window setTitle:titleString];
}
- impl->glview = [PuglOpenGLView new];
- impl->window = window;
- impl->glview->puglview = view;
-
- [NSApp activateIgnoringOtherApps:YES];
+ [window setPuglview:view];
[window setContentView:impl->glview];
[window makeFirstResponder:impl->glview];
[window makeKeyAndOrderFront:window];
@@ -390,7 +397,10 @@ puglCreateWindow(PuglView* view, const char* title)
// wait for first puglShowWindow
[window setIsVisible:NO];
- // TODO - handle view->parent and view->resizable
+ [NSApp activateIgnoringOtherApps:YES];
+ [window center];
+
+ impl->window = window;
return 0;
}
@@ -398,26 +408,40 @@ puglCreateWindow(PuglView* view, const char* title)
void
puglShowWindow(PuglView* view)
{
- id window = view->impl->window;
+ PuglInternals* impl = view->impl;
- [window setIsVisible:YES];
+ if (impl->window) {
+ [impl->window setIsVisible:YES];
+ } else {
+ [view->impl->glview setHidden:NO];
+ }
}
void
puglHideWindow(PuglView* view)
{
- id window = view->impl->window;
+ PuglInternals* impl = view->impl;
- [window setIsVisible:NO];
+ if (impl->window) {
+ [impl->window setIsVisible:NO];
+ } else {
+ [impl->glview setHidden:YES];
+ }
}
void
puglDestroy(PuglView* view)
{
view->impl->glview->puglview = NULL;
- [view->impl->window close];
- [view->impl->glview release];
- [view->impl->window release];
+
+ if (view->impl->window) {
+ [view->impl->window close];
+ [view->impl->glview release];
+ [view->impl->window release];
+ } else {
+ [view->impl->glview release];
+ }
+
free(view->impl);
free(view);
}