1
mirror of https://code.videolan.org/videolan/vlc synced 2024-07-21 07:24:15 +02:00

* Apply changed made to the 0.8.5 branch to trunk.

* Embedded Vout should work now
* To create an embedded vout, just create a custom view of type VLCEmbeddedVoutView in interface builder
* Just make sure you define the view as resizeable
* Hotkeys and mose events should work
* Tests with the mozilla plugin are welcome
This commit is contained in:
Benjamin Pracht 2005-12-18 18:54:28 +00:00
parent 3371c10fac
commit f3ccaec1c5
8 changed files with 907 additions and 508 deletions

View File

@ -34,6 +34,7 @@
OUTLETS = {"o_btn_fullscreen" = id; "o_main" = id; "o_volumeslider" = id; };
SUPERCLASS = NSObject;
},
{CLASS = VLCEmbeddedVoutView; LANGUAGE = ObjC; SUPERCLASS = VLCVoutView; },
{
ACTIONS = {
bandSliderUpdated = id;
@ -287,7 +288,8 @@
};
SUPERCLASS = NSObject;
},
{CLASS = VLCPlaylistView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; }
{CLASS = VLCPlaylistView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; },
{CLASS = VLCVoutView; LANGUAGE = ObjC; SUPERCLASS = NSView; }
);
IBVersion = 1;
}
}

View File

@ -7,6 +7,7 @@
* Authors: Jon Lech Johansen <jon-vl@nanocrew.net>
* Christophe Massiot <massiot@via.ecp.fr>
* Derk-Jan Hartman <hartman at videolan dot org>
* Benjamin Pracht <bigben at videolan doit org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -268,18 +269,31 @@
if( p_vout != NULL )
{
id o_embedded_vout_list = [[VLCMain sharedInstance] getEmbeddedList];
while ((o_window = [o_enumerator nextObject]))
{
if( [[o_window className] isEqualToString: @"VLCWindow"] )
id o_vout_view = nil;
/* We have an embedded vout */
if( [o_embedded_vout_list windowContainsEmbedded: o_window] )
{
o_vout_view = [o_embedded_vout_list getViewForWindow: o_window];
}
/* We have a detached Vout */
else if( [[o_window className] isEqualToString: @"VLCWindow"] )
{
o_vout_view = [o_window getVoutView];
}
if( o_vout_view )
{
if( [o_title isEqualToString: _NS("Half Size") ] )
[o_window scaleWindowWithFactor: 0.5];
[o_vout_view scaleWindowWithFactor: 0.5];
else if( [o_title isEqualToString: _NS("Normal Size") ] )
[o_window scaleWindowWithFactor: 1.0];
[o_vout_view scaleWindowWithFactor: 1.0];
else if( [o_title isEqualToString: _NS("Double Size") ] )
[o_window scaleWindowWithFactor: 2.0];
[o_vout_view scaleWindowWithFactor: 2.0];
else if( [o_title isEqualToString: _NS("Float on Top") ] )
[o_window toggleFloatOnTop];
[o_vout_view toggleFloatOnTop];
else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
{
if( ![o_window isZoomed] )
@ -287,11 +301,11 @@
}
else if( [o_title isEqualToString: _NS("Snapshot") ] )
{
[o_window snapshot];
[o_vout_view snapshot];
}
else
{
[o_window toggleFullscreen];
[o_vout_view toggleFullscreen];
}
break;
}
@ -470,7 +484,7 @@
Value: another_val ofType: i_type];
[o_lmi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
[o_lmi setTarget: self];
if( !strcmp( val.psz_string, val_list.p_list->p_values[i].psz_string ) && !( i_type & VLC_VAR_ISCOMMAND ) )
[o_lmi setState: TRUE ];
@ -497,7 +511,7 @@
break;
}
}
/* clean up everything */
if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string );
var_Change( p_object, psz_variable, VLC_VAR_FREELIST, &val_list, &text_list );
@ -640,7 +654,9 @@
while( (o_window = [o_enumerator nextObject]))
{
if( [[o_window className] isEqualToString: @"VLCWindow"] )
if( [[o_window className] isEqualToString: @"VLCWindow"] ||
[[[VLCMain sharedInstance] getEmbeddedList]
windowContainsEmbedded: o_window])
{
bEnabled = TRUE;
break;

View File

@ -79,6 +79,7 @@ struct intf_sys_t
/* The messages window */
msg_subscription_t * p_sub;
};
/*****************************************************************************
@ -93,6 +94,7 @@ struct intf_sys_t
id o_wizard; /* VLCWizard */
id o_extended; /* VLCExtended */
id o_bookmarks; /* VLCBookmarks */
id o_embedded_list; /* VLCEmbeddedList*/
id o_sfilters; /* VLCsFilters */
/*id o_update; VLCUpdate */
BOOL nib_main_loaded; /* reference to the main-nib */
@ -278,6 +280,7 @@ struct intf_sys_t
- (id)getInfo;
- (id)getWizard;
- (id)getBookmarks;
- (id)getEmbeddedList;
- (void)terminate;
- (NSString *)localizedString:(char *)psz;
- (char *)delocalizeString:(NSString *)psz;

View File

@ -304,6 +304,7 @@ static VLCMain *_o_sharedMainInstance = nil;
o_wizard = [[VLCWizard alloc] init];
o_extended = nil;
o_bookmarks = [[VLCBookmarks alloc] init];
o_embedded_list = [[VLCEmbeddedList alloc] init];
o_sfilters = nil;
/*o_update = [[VLCUpdate alloc] init];*/
@ -804,6 +805,15 @@ static VLCMain *_o_sharedMainInstance = nil;
return nil;
}
- (id)getEmbeddedList
{
if( o_embedded_list )
{
return o_embedded_list;
}
return nil;
}
- (void)manage
{
playlist_t * p_playlist;

View File

@ -8,6 +8,7 @@
* Florian G. Pflug <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
* Eric Petit <titer@m0k.org>
* Benjamin Pracht <bigben at videolan dot org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -25,35 +26,99 @@
*****************************************************************************/
/*****************************************************************************
* VLCWindow interface
* VLCEmbeddedList interface
*****************************************************************************/
@interface VLCWindow : NSWindow
@interface VLCEmbeddedList : NSObject
{
NSMutableArray * o_embedded_array;
}
- (id)getEmbeddedVout;
- (void)releaseEmbeddedVout: (id)o_vout_view;
- (void)addEmbeddedVout: (id)o_vout_view;
- (BOOL)windowContainsEmbedded: (id)o_window;
- (id)getViewForWindow: (id)o_window;
@end
/*****************************************************************************
* VLCVoutView interface
*****************************************************************************/
@interface VLCVoutView : NSView
{
vout_thread_t * p_vout;
NSView * o_view;
NSRect * s_frame;
vout_thread_t * p_real_vout;
Ptr p_fullscreen_state;
mtime_t i_time_mouse_last_moved;
vlc_bool_t b_init_ok;
id o_window;
}
- (id) initWithVout: (vout_thread_t *) p_vout view: (NSView *) view
frame: (NSRect *) s_frame;
- (id) initReal: (id) sender;
- (void) close;
- (id) closeReal: (id) sender;
- (void)setOnTop:(BOOL)b_on_top;
- (void)hideMouse:(BOOL)b_hide;
- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view
frame: (NSRect *) s_arg_frame;
- (void)closeVout;
- (void)manage;
- (void)scaleWindowWithFactor: (float)factor;
- (void)setOnTop:(BOOL)b_on_top;
- (void)toggleFloatOnTop;
- (void)toggleFullscreen;
- (BOOL)isFullscreen;
- (void)snapshot;
- (id)getWindow;
+ (id)getVoutView: (vout_thread_t *)p_vout subView: (NSView *) view
frame: (NSRect *) s_frame;
+ (vout_thread_t *)getRealVout: (vout_thread_t *)p_vout;
@end
/*****************************************************************************
* VLCVoutDetachedView interface
*****************************************************************************/
@interface VLCDetachedVoutView : VLCVoutView
{
mtime_t i_time_mouse_last_moved;
}
- (void)hideMouse: (BOOL)b_hide;
@end
/*****************************************************************************
* VLCEmbeddedView interface
*****************************************************************************/
@interface VLCEmbeddedVoutView : VLCVoutView
{
BOOL b_used;
}
- (void)setUsed: (BOOL)b_new_used;
- (BOOL)isUsed;
@end
/*****************************************************************************
* VLCWindow interface
*****************************************************************************/
@interface VLCWindow : NSWindow
{
vout_thread_t * p_vout;
VLCVoutView * o_view;
NSRect * s_frame;
vout_thread_t * p_real_vout;
Ptr p_fullscreen_state;
vlc_bool_t b_init_ok;
}
- (id) initWithVout: (vout_thread_t *) p_vout view: (VLCVoutView *) view
frame: (NSRect *) s_frame;
- (id)initReal: (id) sender;
- (void)close;
- (void)closeWindow;
- (id)closeReal: (id) sender;
- (id)getVoutView;
- (void)updateTitle;
- (BOOL)windowShouldClose:(id)sender;

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,7 @@
* Jon Lech Johansen <jon-vl@nanocrew.net>
* Derk-Jan Hartman <hartman at videolan dot org>
* Eric Petit <titer@m0k.org>
* Benjamin Pracht <bigben at videolan dot org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -54,8 +55,8 @@
struct vout_sys_t
{
NSAutoreleasePool * o_pool;
VLCWindow * o_window;
VLCGLView * o_glview;
VLCVoutView * o_vout_view;
vlc_bool_t b_saved_frame;
NSRect s_frame;
vlc_bool_t b_got_frame;
@ -102,14 +103,15 @@ int E_(OpenVideoGL) ( vlc_object_t * p_this )
[p_vout->p_sys->o_glview autorelease];
/* Spawn the window */
p_vout->p_sys->b_got_frame = VLC_FALSE;
p_vout->p_sys->o_window = [[VLCWindow alloc] initWithVout: p_vout
view: p_vout->p_sys->o_glview frame: nil];
if( !p_vout->p_sys->o_window )
if( !(p_vout->p_sys->o_vout_view = [VLCVoutView getVoutView: p_vout
subView: p_vout->p_sys->o_glview frame: nil]) )
{
return VLC_EGENERIC;
}
p_vout->p_sys->b_got_frame = VLC_FALSE;
p_vout->pf_init = Init;
p_vout->pf_end = End;
p_vout->pf_manage = Manage;
@ -127,7 +129,7 @@ void E_(CloseVideoGL) ( vlc_object_t * p_this )
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
/* Close the window */
[p_vout->p_sys->o_window close];
[p_vout->p_sys->o_vout_view closeVout];
/* Clean up */
vlc_mutex_destroy( &p_vout->p_sys->lock );
@ -156,12 +158,12 @@ static int Manage( vout_thread_t * p_vout )
{
/* Save window size and position */
p_vout->p_sys->s_frame.size =
[[p_vout->p_sys->o_window contentView] frame].size;
[p_vout->p_sys->o_vout_view frame].size;
p_vout->p_sys->s_frame.origin =
[p_vout->p_sys->o_window frame].origin;
[[p_vout->p_sys->o_vout_view getWindow ]frame].origin;
p_vout->p_sys->b_saved_frame = VLC_TRUE;
}
[p_vout->p_sys->o_window close];
[p_vout->p_sys->o_vout_view closeVout];
p_vout->b_fullscreen = !p_vout->b_fullscreen;
@ -171,14 +173,15 @@ static int Manage( vout_thread_t * p_vout )
if( p_vout->p_sys->b_saved_frame )
{
p_vout->p_sys->o_window = [[VLCWindow alloc]
initWithVout: p_vout view: o_glview
frame: &p_vout->p_sys->s_frame];
p_vout->p_sys->o_vout_view = [VLCVoutView getVoutView: p_vout
subView: o_glview
frame: &p_vout->p_sys->s_frame];
}
else
{
p_vout->p_sys->o_window = [[VLCWindow alloc]
initWithVout: p_vout view: o_glview frame: nil];
p_vout->p_sys->o_vout_view = [VLCVoutView getVoutView: p_vout
subView: o_glview frame: nil];
}
[[o_glview openGLContext] makeCurrentContext];
@ -188,7 +191,7 @@ static int Manage( vout_thread_t * p_vout )
p_vout->i_changes &= ~VOUT_FULLSCREEN_CHANGE;
}
[p_vout->p_sys->o_window manage];
[p_vout->p_sys->o_vout_view manage];
return VLC_SUCCESS;
}
@ -203,7 +206,7 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args )
{
case VOUT_SET_STAY_ON_TOP:
b_arg = va_arg( args, vlc_bool_t );
[p_vout->p_sys->o_window setOnTop: b_arg];
[p_vout->p_sys->o_vout_view setOnTop: b_arg];
return VLC_SUCCESS;
case VOUT_CLOSE:

View File

@ -57,8 +57,8 @@
struct vout_sys_t
{
NSAutoreleasePool *o_pool;
VLCWindow * o_window;
VLCQTView * o_qtview;
VLCVoutView * o_vout_view;
vlc_bool_t b_saved_frame;
vlc_bool_t b_altivec;
@ -215,9 +215,9 @@ int E_(OpenVideoQT) ( vlc_object_t *p_this )
else
{
/* Spawn window */
p_vout->p_sys->o_window = [[VLCWindow alloc]
initWithVout: p_vout view: o_qtview frame: nil];
if( !p_vout->p_sys->o_window )
p_vout->p_sys->o_vout_view = [VLCVoutView getVoutView: p_vout
subView: o_qtview frame: nil];
if( !p_vout->p_sys->o_vout_view )
{
return VLC_EGENERIC;
}
@ -247,11 +247,11 @@ int E_(OpenVideoQT) ( vlc_object_t *p_this )
*****************************************************************************/
void E_(CloseVideoQT) ( vlc_object_t *p_this )
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
vout_thread_t * p_vout = (vout_thread_t *)p_this;
if( !p_vout->p_sys->b_embedded )
[p_vout->p_sys->o_window close];
[p_vout->p_sys->o_vout_view closeVout];
/* Clean Up Quicktime environment */
ExitMovies();
@ -386,7 +386,7 @@ static int ManageVideo( vout_thread_t *p_vout )
p_vout->i_changes &= ~VOUT_SIZE_CHANGE;
}
[p_vout->p_sys->o_window manage];
[p_vout->p_sys->o_vout_view manage];
return( 0 );
}
@ -463,7 +463,7 @@ static int ControlVideo( vout_thread_t *p_vout, int i_query, va_list args )
{
case VOUT_SET_STAY_ON_TOP:
b_arg = va_arg( args, vlc_bool_t );
[p_vout->p_sys->o_window setOnTop: b_arg];
[p_vout->p_sys->o_vout_view setOnTop: b_arg];
return VLC_SUCCESS;
case VOUT_CLOSE:
@ -488,12 +488,12 @@ static int CoToggleFullscreen( vout_thread_t *p_vout )
{
/* Save window size and position */
p_vout->p_sys->s_frame.size =
[[p_vout->p_sys->o_window contentView] frame].size;
[p_vout->p_sys->o_vout_view frame].size;
p_vout->p_sys->s_frame.origin =
[p_vout->p_sys->o_window frame].origin;
[[p_vout->p_sys->o_vout_view getWindow] frame].origin;
p_vout->p_sys->b_saved_frame = VLC_TRUE;
}
[p_vout->p_sys->o_window close];
[p_vout->p_sys->o_vout_view closeVout];
p_vout->b_fullscreen = !p_vout->b_fullscreen;
@ -503,14 +503,14 @@ static int CoToggleFullscreen( vout_thread_t *p_vout )
if( p_vout->p_sys->b_saved_frame )
{
p_vout->p_sys->o_window = [[VLCWindow alloc]
initWithVout: p_vout view: o_qtview
p_vout->p_sys->o_vout_view = [VLCVoutView getVoutView: p_vout
subView: o_qtview
frame: &p_vout->p_sys->s_frame];
}
else
{
p_vout->p_sys->o_window = [[VLCWindow alloc]
initWithVout: p_vout view: o_qtview frame: nil];
p_vout->p_sys->o_vout_view = [VLCVoutView getVoutView: p_vout
subView: o_qtview frame: nil];
}
/* Retrieve the QuickDraw port */