Commit d8532131 authored by Felix Paul Kühne's avatar Felix Paul Kühne

minimal_macosx: re-implement in-separate-window video output based upon the 2.0 vout API

remnants to be removed in next commit
parent 5ff7862f
...@@ -35,9 +35,6 @@ ...@@ -35,9 +35,6 @@
- (id)initWithContentRect:(NSRect)contentRect; - (id)initWithContentRect:(NSRect)contentRect;
/* @protocol VLCOpenGLVoutEmbedding */
- (void)addVoutSubview:(NSView *)view;
- (void)removeVoutSubview:(NSView *)view;
- (void)enterFullscreen; - (void)enterFullscreen;
- (void)leaveFullscreen; - (void)leaveFullscreen;
- (BOOL)stretchesVideo; - (BOOL)stretchesVideo;
......
...@@ -45,24 +45,11 @@ ...@@ -45,24 +45,11 @@
[self setHasShadow:YES]; [self setHasShadow:YES];
[self setMovableByWindowBackground: YES]; [self setMovableByWindowBackground: YES];
[self center]; [self center];
NSLog( @"window created" );
} }
return self; return self;
} }
/* @protocol VLCOpenGLVoutEmbedding */
- (void)addVoutSubview:(NSView *)view
{
[view setAutoresizingMask:NSViewHeightSizable|NSViewWidthSizable];
[[self contentView] addSubview:view];
[view setFrame:[[self contentView] bounds]];
}
- (void)removeVoutSubview:(NSView *)view
{
[self close];
[self release];
}
- (void)enterFullscreen - (void)enterFullscreen
{ {
fullscreen = YES; fullscreen = YES;
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <OpenGL/OpenGL.h> #include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h> #include <OpenGL/gl.h>
#if 0
/***************************************************************************** /*****************************************************************************
* cocoaglvoutviewInit * cocoaglvoutviewInit
...@@ -187,3 +188,4 @@ void cocoaglvoutviewEnd( vout_window_t * p_wnd ) ...@@ -187,3 +188,4 @@ void cocoaglvoutviewEnd( vout_window_t * p_wnd )
} }
@end @end
#endif
...@@ -41,7 +41,10 @@ ...@@ -41,7 +41,10 @@
#include <vlc_input.h> #include <vlc_input.h>
#import <vlc_interface.h> #import <vlc_interface.h>
#include <vlc_vout_window.h>
#import <intf.h> #import <intf.h>
#import "VLCMinimalVoutWindow.h"
/***************************************************************************** /*****************************************************************************
* Local prototypes. * Local prototypes.
...@@ -148,3 +151,95 @@ static void Run( intf_thread_t *p_intf ) ...@@ -148,3 +151,95 @@ static void Run( intf_thread_t *p_intf )
[pool release]; [pool release];
} }
/*****************************************************************************
* Vout window management
*****************************************************************************/
static int WindowControl(vout_window_t *, int i_query, va_list);
int WindowOpen(vout_window_t *p_wnd, const vout_window_cfg_t *cfg)
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
NSRect proposedVideoViewPosition = NSMakeRect(cfg->x, cfg->y, cfg->width, cfg->height);
VLCMinimalVoutWindow *o_window = [[VLCMinimalVoutWindow alloc] initWithContentRect:proposedVideoViewPosition];
[o_window makeKeyAndOrderFront:nil];
if (!o_window) {
msg_Err(p_wnd, "window creation failed");
[o_pool release];
return VLC_EGENERIC;
}
msg_Dbg(p_wnd, "returning video window with proposed position x=%i, y=%i, width=%i, height=%i", cfg->x, cfg->y, cfg->width, cfg->height);
p_wnd->handle.nsobject = [o_window contentView];
// TODO: find a cleaner way for "start in fullscreen"
if (var_GetBool(pl_Get(p_wnd), "fullscreen"))
[o_window performSelectorOnMainThread:@selector(enterFullscreen) withObject:nil waitUntilDone:NO];
p_wnd->control = WindowControl;
[o_pool release];
return VLC_SUCCESS;
}
static int WindowControl(vout_window_t *p_wnd, int i_query, va_list args)
{
NSWindow * o_window = [(id)p_wnd->handle.nsobject window];
if (!o_window) {
msg_Err(p_wnd, "failed to recover cocoa window");
return VLC_EGENERIC;
}
switch(i_query) {
case VOUT_WINDOW_SET_STATE:
{
unsigned i_state = va_arg(args, unsigned);
// TODO
// [o_window performSelectorOnMainThread:@selector(setWindowLevel:) withObject:[NSNumber numberWithUnsignedInt:i_state] waitUntilDone:NO];
return VLC_SUCCESS;
}
case VOUT_WINDOW_SET_SIZE:
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
unsigned int i_width = va_arg(args, unsigned int);
unsigned int i_height = va_arg(args, unsigned int);
NSSize newSize = NSMakeSize(i_width, i_height);
// TODO
[o_pool release];
return VLC_SUCCESS;
}
case VOUT_WINDOW_SET_FULLSCREEN:
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
int i_full = va_arg(args, int);
if (i_full)
[o_window performSelectorOnMainThread:@selector(enterFullscreen) withObject:nil waitUntilDone:NO];
else
[o_window performSelectorOnMainThread:@selector(leaveFullscreen) withObject:nil waitUntilDone:NO];
[o_pool release];
return VLC_SUCCESS;
}
default:
msg_Warn(p_wnd, "unsupported control query");
return VLC_EGENERIC;
}
}
void WindowClose(vout_window_t *p_wnd)
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
NSWindow * o_window = [(id)p_wnd->handle.nsobject window];
if (o_window)
[o_window release];
[o_pool release];
}
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "intf.h" #include "intf.h"
#include "voutgl.h" #include "voutgl.h"
# if 0
static int WindowControl( vout_window_t *, int i_query, va_list ); static int WindowControl( vout_window_t *, int i_query, va_list );
...@@ -78,3 +79,5 @@ void WindowClose( vout_window_t *p_wnd ) ...@@ -78,3 +79,5 @@ void WindowClose( vout_window_t *p_wnd )
/* Clean up */ /* Clean up */
free( p_wnd->sys ); free( p_wnd->sys );
} }
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment