dispatch_sync (dispatch_get_main_queue (), ^{
NSAutoreleasePool *pool;
CGLPixelFormatObj fmt = NULL;
- GstGLNSView *glView = NULL;
- GstGLCAOpenGLLayer *layer;
CGLContextObj glContext;
CGLPixelFormatAttribute attribs[] = {
kCGLPFADoubleBuffer,
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);
}
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];
});
/* 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 |
GST_DEBUG ("NSWindow id: %"G_GUINTPTR_FORMAT, (guintptr) priv->internal_win_id);
+ [priv->internal_win_id setContentView:glView];
+
return TRUE;
}
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];