From: Matthew Waters Date: Tue, 17 Feb 2015 05:39:56 +0000 (+1100) Subject: gl/cocoa: small refactor of layer/view creation into the window X-Git-Tag: 1.19.3~511^2~1989^2~1064 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=742e4a10a228def3b178a0b96cd7a60e310ac08a;p=platform%2Fupstream%2Fgstreamer.git gl/cocoa: small refactor of layer/view creation into the window --- diff --git a/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h b/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h index 2818610..df00a38 100644 --- a/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h +++ b/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h @@ -57,7 +57,7 @@ struct _GstGLContextCocoaPrivate - (id) initWithFrameLayer:(GstGLWindowCocoa *)window rect:(NSRect)contentRect layer:(CALayer *)layerContent; @end -gboolean gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa, NSRect rect); +gboolean gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa); G_END_DECLS diff --git a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m index 341f02b..8298b3d 100644 --- a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m @@ -304,8 +304,6 @@ gst_gl_context_cocoa_create_context (GstGLContext *context, GstGLAPI gl_api, dispatch_sync (dispatch_get_main_queue (), ^{ NSAutoreleasePool *pool; CGLPixelFormatObj fmt = NULL; - GstGLNSView *glView = NULL; - GstGLCAOpenGLLayer *layer; CGLContextObj glContext; CGLPixelFormatAttribute attribs[] = { kCGLPFADoubleBuffer, @@ -313,20 +311,10 @@ gst_gl_context_cocoa_create_context (GstGLContext *context, GstGLAPI gl_api, 0 }; CGLError ret; - NSRect rect; - NSWindow *window_handle; gint npix; pool = [[NSAutoreleasePool alloc] init]; - rect.origin.x = 0; - rect.origin.y = 0; - rect.size.width = 320; - rect.size.height = 240; - - gst_gl_window_cocoa_create_window (window_cocoa, rect); - window_handle = (NSWindow *) gst_gl_window_get_window_handle (window); - if (priv->external_gl_context) { fmt = CGLGetPixelFormat (priv->external_gl_context); } @@ -354,10 +342,7 @@ gst_gl_context_cocoa_create_context (GstGLContext *context, GstGLAPI gl_api, context_cocoa->priv->pixel_format = fmt; context_cocoa->priv->gl_context = glContext; - layer = [[GstGLCAOpenGLLayer alloc] initWithGstGLContext:context_cocoa]; - glView = [[GstGLNSView alloc] initWithFrameLayer:window_cocoa rect:rect layer:layer]; - - [window_handle setContentView:glView]; + gst_gl_window_cocoa_create_window (window_cocoa); [pool release]; }); diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m index a0f09ea..229948a 100644 --- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m @@ -139,9 +139,21 @@ gst_gl_window_cocoa_new (void) /* Must be called from the main thread */ gboolean -gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa, NSRect rect) +gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa) { GstGLWindowCocoaPrivate *priv = window_cocoa->priv; + GstGLWindow *window = GST_GL_WINDOW (window_cocoa); + NSRect mainRect = [[NSScreen mainScreen] visibleFrame]; + gint h = priv->preferred_height; + gint y = mainRect.size.height > h ? (mainRect.size.height - h) * 0.5 : 0; + NSRect rect = NSMakeRect (0, y, priv->preferred_width, priv->preferred_height); + NSRect windowRect = NSMakeRect (0, y, priv->preferred_width, priv->preferred_height); + GstGLContext *context = gst_gl_window_get_context (window); + GstGLContextCocoa *context_cocoa = GST_GL_CONTEXT_COCOA (context); + GstGLCAOpenGLLayer *layer = [[GstGLCAOpenGLLayer alloc] initWithGstGLContext:context_cocoa]; + GstGLNSView *glView = [[GstGLNSView alloc] initWithFrameLayer:window_cocoa rect:windowRect layer:layer]; + + gst_object_unref (context); priv->internal_win_id = [[GstGLNSWindow alloc] initWithContentRect:rect styleMask: (NSTitledWindowMask | NSClosableWindowMask | @@ -150,6 +162,8 @@ gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa, NSRect rect) GST_DEBUG ("NSWindow id: %"G_GUINTPTR_FORMAT, (guintptr) priv->internal_win_id); + [priv->internal_win_id setContentView:glView]; + return TRUE; } @@ -240,30 +254,8 @@ gst_gl_window_cocoa_show (GstGLWindow * window) dispatch_sync (dispatch_get_main_queue(), ^{ if (!priv->external_view && !priv->visible) { - NSRect mainRect = [[NSScreen mainScreen] visibleFrame]; - NSRect windowRect = [priv->internal_win_id frame]; - gint x = 0; - gint y = 0; - GST_DEBUG_OBJECT (window_cocoa, "main screen rect: %d %d %d %d\n", (int) mainRect.origin.x, - (int) mainRect.origin.y, (int) mainRect.size.width, - (int) mainRect.size.height); - - windowRect.origin.x += x; - windowRect.origin.y += mainRect.size.height > y ? (mainRect.size.height - y) * 0.5 : y; - windowRect.size.width = window_cocoa->priv->preferred_width; - windowRect.size.height = window_cocoa->priv->preferred_height; - - GST_DEBUG_OBJECT (window_cocoa, "window rect: %d %d %d %d\n", (int) windowRect.origin.x, - (int) windowRect.origin.y, (int) windowRect.size.width, - (int) windowRect.size.height); - - x += 20; - y += 20; - - [priv->internal_win_id setFrame:windowRect display:NO]; GST_DEBUG_OBJECT (window_cocoa, "make the window available\n"); - [priv->internal_win_id makeMainWindow]; [priv->internal_win_id orderFrontRegardless]; [priv->internal_win_id setViewsNeedDisplay:YES];