* Add an controls to the vout (using the embedded vout framework)
- There is some redundancy in the controls now... - This is just a proposal. If you don't like it, say so... - Hope I didn't forget any file (yell if you habe troubles) * Add an option to disable the embedded window
BIN
extras/MacOSX/Resources/.DS_Store
vendored
Normal file
@ -31,10 +31,29 @@
|
|||||||
};
|
};
|
||||||
CLASS = VLCControls;
|
CLASS = VLCControls;
|
||||||
LANGUAGE = ObjC;
|
LANGUAGE = ObjC;
|
||||||
OUTLETS = {"o_btn_fullscreen" = id; "o_main" = id; "o_volumeslider" = id; };
|
OUTLETS = {"o_main" = id; "o_volumeslider" = id; };
|
||||||
SUPERCLASS = NSObject;
|
SUPERCLASS = NSObject;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
CLASS = VLCDetachedEmbeddedVoutView;
|
||||||
|
LANGUAGE = ObjC;
|
||||||
|
SUPERCLASS = VLCEmbeddedVoutView;
|
||||||
|
},
|
||||||
{CLASS = VLCEmbeddedVoutView; LANGUAGE = ObjC; SUPERCLASS = VLCVoutView; },
|
{CLASS = VLCEmbeddedVoutView; LANGUAGE = ObjC; SUPERCLASS = VLCVoutView; },
|
||||||
|
{
|
||||||
|
CLASS = VLCEmbeddedWindow;
|
||||||
|
LANGUAGE = ObjC;
|
||||||
|
OUTLETS = {
|
||||||
|
"o_btn_backward" = id;
|
||||||
|
"o_btn_forward" = id;
|
||||||
|
"o_btn_fullscreen" = id;
|
||||||
|
"o_btn_play" = id;
|
||||||
|
"o_slider" = id;
|
||||||
|
"o_time" = id;
|
||||||
|
"o_window" = id;
|
||||||
|
};
|
||||||
|
SUPERCLASS = NSObject;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ACTIONS = {
|
ACTIONS = {
|
||||||
bandSliderUpdated = id;
|
bandSliderUpdated = id;
|
||||||
@ -122,7 +141,6 @@
|
|||||||
LANGUAGE = ObjC;
|
LANGUAGE = ObjC;
|
||||||
OUTLETS = {
|
OUTLETS = {
|
||||||
"o_btn_ff" = id;
|
"o_btn_ff" = id;
|
||||||
"o_btn_fullscreen" = id;
|
|
||||||
"o_btn_next" = id;
|
"o_btn_next" = id;
|
||||||
"o_btn_play" = id;
|
"o_btn_play" = id;
|
||||||
"o_btn_playlist" = id;
|
"o_btn_playlist" = id;
|
||||||
@ -135,6 +153,7 @@
|
|||||||
"o_dmi_play" = id;
|
"o_dmi_play" = id;
|
||||||
"o_dmi_previous" = id;
|
"o_dmi_previous" = id;
|
||||||
"o_dmi_stop" = id;
|
"o_dmi_stop" = id;
|
||||||
|
"o_embedded_window" = id;
|
||||||
"o_err_btn_dismiss" = id;
|
"o_err_btn_dismiss" = id;
|
||||||
"o_err_btn_msgs" = id;
|
"o_err_btn_msgs" = id;
|
||||||
"o_err_bug_lbl" = id;
|
"o_err_bug_lbl" = id;
|
||||||
@ -292,4 +311,4 @@
|
|||||||
{CLASS = VLCVoutView; LANGUAGE = ObjC; SUPERCLASS = NSView; }
|
{CLASS = VLCVoutView; LANGUAGE = ObjC; SUPERCLASS = NSView; }
|
||||||
);
|
);
|
||||||
IBVersion = 1;
|
IBVersion = 1;
|
||||||
}
|
}
|
@ -3,7 +3,7 @@
|
|||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>IBDocumentLocation</key>
|
<key>IBDocumentLocation</key>
|
||||||
<string>394 559 496 270 0 0 1280 1002 </string>
|
<string>134 289 496 270 0 0 1024 746 </string>
|
||||||
<key>IBEditorPositions</key>
|
<key>IBEditorPositions</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>1617</key>
|
<key>1617</key>
|
||||||
@ -11,18 +11,17 @@
|
|||||||
<key>2197</key>
|
<key>2197</key>
|
||||||
<string>422 532 596 143 0 0 1440 878 </string>
|
<string>422 532 596 143 0 0 1440 878 </string>
|
||||||
<key>29</key>
|
<key>29</key>
|
||||||
<string>503 790 438 44 0 0 1440 878 </string>
|
<string>294 89 438 44 0 0 1024 746 </string>
|
||||||
<key>915</key>
|
<key>915</key>
|
||||||
<string>678 573 187 249 0 0 1280 1002 </string>
|
<string>678 573 187 249 0 0 1280 1002 </string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>IBFramework Version</key>
|
<key>IBFramework Version</key>
|
||||||
<string>437.0</string>
|
<string>439.0</string>
|
||||||
<key>IBLockedObjects</key>
|
<key>IBLockedObjects</key>
|
||||||
<array/>
|
<array/>
|
||||||
<key>IBOpenObjects</key>
|
<key>IBOpenObjects</key>
|
||||||
<array>
|
<array>
|
||||||
<integer>29</integer>
|
<integer>29</integer>
|
||||||
<integer>2029</integer>
|
|
||||||
<integer>21</integer>
|
<integer>21</integer>
|
||||||
</array>
|
</array>
|
||||||
<key>IBSystem Version</key>
|
<key>IBSystem Version</key>
|
||||||
|
BIN
extras/MacOSX/Resources/embedded_vout.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
extras/MacOSX/Resources/pause_embedded.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
extras/MacOSX/Resources/pause_embedded_blue.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
extras/MacOSX/Resources/play_embedded.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
extras/MacOSX/Resources/play_embedded_blue.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
extras/MacOSX/Resources/skip_forward_active_embedded.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
extras/MacOSX/Resources/skip_forward_embedded_blue.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
extras/MacOSX/Resources/skip_previous_active_embedded.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
extras/MacOSX/Resources/skip_previous_embedded_blue.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
@ -38,5 +38,7 @@ SOURCES_macosx = \
|
|||||||
bookmarks.m \
|
bookmarks.m \
|
||||||
sfilters.h \
|
sfilters.h \
|
||||||
sfilters.m \
|
sfilters.m \
|
||||||
|
embeddedwindow.h \
|
||||||
|
embeddedwindow.m \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
51
modules/gui/macosx/embeddedwindow.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* embeddedwindow.h: MacOS X interface module
|
||||||
|
*****************************************************************************
|
||||||
|
* Copyright (C) 2002-2004 the VideoLAN team
|
||||||
|
* $Id: playlistinfo.h 11664 2005-07-09 06:17:09Z courmisch $
|
||||||
|
*
|
||||||
|
* Authors: 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
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* VLCEmbeddedWindow interface
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
@interface VLCEmbeddedWindow : NSObject
|
||||||
|
{
|
||||||
|
IBOutlet id o_btn_backward;
|
||||||
|
IBOutlet id o_btn_forward;
|
||||||
|
IBOutlet id o_btn_fullscreen;
|
||||||
|
IBOutlet id o_btn_play;
|
||||||
|
IBOutlet id o_slider;
|
||||||
|
IBOutlet id o_time;
|
||||||
|
IBOutlet id o_window;
|
||||||
|
|
||||||
|
NSImage * o_img_play;
|
||||||
|
NSImage * o_img_play_pressed;
|
||||||
|
NSImage * o_img_pause;
|
||||||
|
NSImage * o_img_pause_pressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setTime:(NSString *)o_arg_ime position:(float)f_position;
|
||||||
|
- (void)playStatusUpdated:(int)i_status;
|
||||||
|
- (void)setSeekable:(BOOL)b_seekable;
|
||||||
|
- (void)setFullscreen:(BOOL)b_fullscreen;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
102
modules/gui/macosx/embeddedwindow.m
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* embeddedwindow.m: MacOS X interface module
|
||||||
|
*****************************************************************************
|
||||||
|
* Copyright (C) 2002-2005 the VideoLAN team
|
||||||
|
* $Id: playlistinfo.m 12560 2005-09-15 14:21:38Z hartman $
|
||||||
|
*
|
||||||
|
* Authors: 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
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Preamble
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "intf.h"
|
||||||
|
#include "vout.h"
|
||||||
|
#include "embeddedwindow.h"
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* VLCEmbeddedWindow Implementation
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
@implementation VLCEmbeddedWindow
|
||||||
|
|
||||||
|
- (void)awakeFromNib
|
||||||
|
{
|
||||||
|
[o_window setDelegate: self];
|
||||||
|
|
||||||
|
[o_btn_backward setToolTip: _NS("Rewind")];
|
||||||
|
[o_btn_forward setToolTip: _NS("Fast Forward")];
|
||||||
|
[o_btn_fullscreen setToolTip: _NS("Fullscreen")];
|
||||||
|
[o_btn_play setToolTip: _NS("Play")];
|
||||||
|
[o_slider setToolTip: _NS("Position")];
|
||||||
|
|
||||||
|
o_img_play = [NSImage imageNamed: @"play_embedded"];
|
||||||
|
o_img_play_pressed = [NSImage imageNamed: @"play_embedded_blue"];
|
||||||
|
o_img_pause = [NSImage imageNamed: @"pause_embedded"];
|
||||||
|
o_img_pause_pressed = [NSImage imageNamed: @"pause_embedded_blue"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setTime:(NSString *)o_arg_time position:(float)f_position
|
||||||
|
{
|
||||||
|
[o_time setStringValue: o_arg_time];
|
||||||
|
[o_slider setFloatValue: f_position];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)playStatusUpdated:(int)i_status
|
||||||
|
{
|
||||||
|
if( i_status == PLAYING_S )
|
||||||
|
{
|
||||||
|
[o_btn_play setImage: o_img_pause];
|
||||||
|
[o_btn_play setAlternateImage: o_img_pause_pressed];
|
||||||
|
[o_btn_play setToolTip: _NS("Pause")];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[o_btn_play setImage: o_img_play];
|
||||||
|
[o_btn_play setAlternateImage: o_img_play_pressed];
|
||||||
|
[o_btn_play setToolTip: _NS("Play")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setSeekable:(BOOL)b_seekable
|
||||||
|
{
|
||||||
|
[o_btn_forward setEnabled: b_seekable];
|
||||||
|
[o_btn_backward setEnabled: b_seekable];
|
||||||
|
[o_slider setEnabled: b_seekable];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setFullscreen:(BOOL)b_fullscreen
|
||||||
|
{
|
||||||
|
[o_btn_fullscreen setState: b_fullscreen];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)windowShouldClose:(id)sender
|
||||||
|
{
|
||||||
|
playlist_t * p_playlist = vlc_object_find( VLCIntf, VLC_OBJECT_PLAYLIST,
|
||||||
|
FIND_ANYWHERE );
|
||||||
|
if( p_playlist == NULL )
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
playlist_Stop( p_playlist );
|
||||||
|
vlc_object_release( p_playlist );
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -356,24 +356,20 @@ static VLCExtended *_o_sharedInstance = nil;
|
|||||||
FIND_ANYWHERE );
|
FIND_ANYWHERE );
|
||||||
vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
|
vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
|
||||||
vout_thread_t *p_real_vout;
|
vout_thread_t *p_real_vout;
|
||||||
|
|
||||||
val.f_float = [o_sld_opaque floatValue] / 100;
|
val.f_float = [o_sld_opaque floatValue] / 100;
|
||||||
|
|
||||||
|
|
||||||
if( p_vout != NULL )
|
if( p_vout != NULL )
|
||||||
{
|
{
|
||||||
if( p_vout->i_object_type == VLC_OBJECT_OPENGL )
|
p_real_vout = [VLCVoutView getRealVout: p_vout];
|
||||||
{
|
|
||||||
p_real_vout = (vout_thread_t *) p_vout->p_parent;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
p_real_vout = p_vout;
|
|
||||||
}
|
|
||||||
var_Set( p_real_vout, "macosx-opaqueness", val );
|
var_Set( p_real_vout, "macosx-opaqueness", val );
|
||||||
|
|
||||||
while ((o_window = [o_enumerator nextObject]))
|
while ((o_window = [o_enumerator nextObject]))
|
||||||
{
|
{
|
||||||
if( [[o_window className] isEqualToString: @"VLCWindow"] )
|
if( [[o_window className] isEqualToString: @"VLCWindow"] ||
|
||||||
|
[[[VLCMain sharedInstance] getEmbeddedList]
|
||||||
|
windowContainsEmbedded: o_window])
|
||||||
{
|
{
|
||||||
[o_window setAlphaValue: val.f_float];
|
[o_window setAlphaValue: val.f_float];
|
||||||
}
|
}
|
||||||
|
@ -112,6 +112,7 @@ struct intf_sys_t
|
|||||||
IBOutlet id o_scrollfield; /* info field */
|
IBOutlet id o_scrollfield; /* info field */
|
||||||
IBOutlet id o_timefield; /* time field */
|
IBOutlet id o_timefield; /* time field */
|
||||||
IBOutlet id o_timeslider; /* time slider */
|
IBOutlet id o_timeslider; /* time slider */
|
||||||
|
IBOutlet id o_embedded_window; /* Embedded Vout Window */
|
||||||
float f_slider; /* slider value */
|
float f_slider; /* slider value */
|
||||||
float f_slider_old; /* old slider val */
|
float f_slider_old; /* old slider val */
|
||||||
IBOutlet id o_volumeslider; /* volume slider */
|
IBOutlet id o_volumeslider; /* volume slider */
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include "bookmarks.h"
|
#include "bookmarks.h"
|
||||||
#include "sfilters.h"
|
#include "sfilters.h"
|
||||||
#include "interaction.h"
|
#include "interaction.h"
|
||||||
|
#include "embeddedwindow.h"
|
||||||
/*#include "update.h"*/
|
/*#include "update.h"*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
@ -449,7 +450,8 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
|
|
||||||
var_AddCallback( p_playlist, "fullscreen", FullscreenChanged, self);
|
var_AddCallback( p_playlist, "fullscreen", FullscreenChanged, self);
|
||||||
|
|
||||||
[o_btn_fullscreen setState: ( var_Get( p_playlist, "fullscreen", &val )>=0 && val.b_bool )];
|
[o_embedded_window setFullscreen: var_GetBool( p_playlist,
|
||||||
|
"fullscreen" )];
|
||||||
vlc_object_release( p_playlist );
|
vlc_object_release( p_playlist );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -964,6 +966,8 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
[o_timeslider setEnabled: b_seekable];
|
[o_timeslider setEnabled: b_seekable];
|
||||||
[o_timefield setStringValue: @"0:00:00"];
|
[o_timefield setStringValue: @"0:00:00"];
|
||||||
|
|
||||||
|
[o_embedded_window setSeekable: b_seekable];
|
||||||
|
|
||||||
p_intf->p_sys->b_intf_update = VLC_FALSE;
|
p_intf->p_sys->b_intf_update = VLC_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -983,7 +987,7 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
|
playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
|
||||||
FIND_ANYWHERE );
|
FIND_ANYWHERE );
|
||||||
var_Get( p_playlist, "fullscreen", &val );
|
var_Get( p_playlist, "fullscreen", &val );
|
||||||
[o_btn_fullscreen setState: val.b_bool];
|
[o_embedded_window setFullscreen: val.b_bool];
|
||||||
vlc_object_release( p_playlist );
|
vlc_object_release( p_playlist );
|
||||||
|
|
||||||
p_intf->p_sys->b_fullscreen_update = VLC_FALSE;
|
p_intf->p_sys->b_fullscreen_update = VLC_FALSE;
|
||||||
@ -1020,9 +1024,11 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
|
|
||||||
while( ( o_vout_wnd = [o_enum nextObject] ) )
|
while( ( o_vout_wnd = [o_enum nextObject] ) )
|
||||||
{
|
{
|
||||||
if( [[o_vout_wnd className] isEqualToString: @"VLCWindow"] )
|
if( [[o_vout_wnd className] isEqualToString: @"VLCWindow"]
|
||||||
|
|| [[[VLCMain sharedInstance] getEmbeddedList]
|
||||||
|
windowContainsEmbedded: o_vout_wnd])
|
||||||
{
|
{
|
||||||
[o_vout_wnd updateTitle];
|
[[o_vout_wnd getVoutView] updateTitle];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vlc_object_release( (vlc_object_t *)p_vout );
|
vlc_object_release( (vlc_object_t *)p_vout );
|
||||||
@ -1053,8 +1059,9 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
(int) (i_seconds / 60 % 60),
|
(int) (i_seconds / 60 % 60),
|
||||||
(int) (i_seconds % 60)];
|
(int) (i_seconds % 60)];
|
||||||
[o_timefield setStringValue: o_time];
|
[o_timefield setStringValue: o_time];
|
||||||
|
[o_embedded_window setTime: o_time position: f_updated];
|
||||||
}
|
}
|
||||||
|
|
||||||
if( p_intf->p_sys->b_volume_update )
|
if( p_intf->p_sys->b_volume_update )
|
||||||
{
|
{
|
||||||
NSString *o_text;
|
NSString *o_text;
|
||||||
@ -1075,6 +1082,7 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
{
|
{
|
||||||
p_intf->p_sys->i_play_status = val.i_int;
|
p_intf->p_sys->i_play_status = val.i_int;
|
||||||
[self playStatusUpdated: p_intf->p_sys->i_play_status];
|
[self playStatusUpdated: p_intf->p_sys->i_play_status];
|
||||||
|
[o_embedded_window playStatusUpdated: p_intf->p_sys->i_play_status];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1082,6 +1090,7 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
p_intf->p_sys->i_play_status = END_S;
|
p_intf->p_sys->i_play_status = END_S;
|
||||||
p_intf->p_sys->b_intf_update = VLC_TRUE;
|
p_intf->p_sys->b_intf_update = VLC_TRUE;
|
||||||
[self playStatusUpdated: p_intf->p_sys->i_play_status];
|
[self playStatusUpdated: p_intf->p_sys->i_play_status];
|
||||||
|
[o_embedded_window playStatusUpdated: p_intf->p_sys->i_play_status];
|
||||||
[self setSubmenusEnabled: FALSE];
|
[self setSubmenusEnabled: FALSE];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1368,6 +1377,7 @@ static VLCMain *_o_sharedMainInstance = nil;
|
|||||||
(int) (i_seconds / 60 % 60),
|
(int) (i_seconds / 60 % 60),
|
||||||
(int) (i_seconds % 60)];
|
(int) (i_seconds % 60)];
|
||||||
[o_timefield setStringValue: o_time];
|
[o_timefield setStringValue: o_time];
|
||||||
|
[o_embedded_window setTime: o_time position: f_updated];
|
||||||
}
|
}
|
||||||
#undef p_input
|
#undef p_input
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,10 @@ void E_(CloseVideoGL) ( vlc_object_t * );
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Module descriptor
|
* Module descriptor
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
#define EMBEDDED_TEXT N_("Use embedded video output")
|
||||||
|
#define EMBEDDED_LONGTEXT N_("Disable this if you want the video output to " \
|
||||||
|
"be opened in a separate window instead of in the control window.")
|
||||||
|
|
||||||
#define VDEV_TEXT N_("Video device")
|
#define VDEV_TEXT N_("Video device")
|
||||||
#define VDEV_LONGTEXT N_("Choose a number corresponding to " \
|
#define VDEV_LONGTEXT N_("Choose a number corresponding to " \
|
||||||
"a screen in you video device selection menu and this screen " \
|
"a screen in you video device selection menu and this screen " \
|
||||||
@ -77,6 +81,8 @@ vlc_module_begin();
|
|||||||
set_callbacks( E_(OpenIntf), E_(CloseIntf) );
|
set_callbacks( E_(OpenIntf), E_(CloseIntf) );
|
||||||
set_category( CAT_INTERFACE );
|
set_category( CAT_INTERFACE );
|
||||||
set_subcategory( SUBCAT_INTERFACE_GENERAL );
|
set_subcategory( SUBCAT_INTERFACE_GENERAL );
|
||||||
|
add_bool( "macosx-embedded", 1, NULL, EMBEDDED_TEXT, EMBEDDED_LONGTEXT,
|
||||||
|
VLC_FALSE );
|
||||||
add_submodule();
|
add_submodule();
|
||||||
set_description( _("Quartz video") );
|
set_description( _("Quartz video") );
|
||||||
set_capability( "video output", 100 );
|
set_capability( "video output", 100 );
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view
|
- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view
|
||||||
frame: (NSRect *) s_arg_frame;
|
frame: (NSRect *) s_arg_frame;
|
||||||
- (void)closeVout;
|
- (void)closeVout;
|
||||||
|
- (void)updateTitle;
|
||||||
- (void)manage;
|
- (void)manage;
|
||||||
- (void)scaleWindowWithFactor: (float)factor;
|
- (void)scaleWindowWithFactor: (float)factor;
|
||||||
- (void)setOnTop:(BOOL)b_on_top;
|
- (void)setOnTop:(BOOL)b_on_top;
|
||||||
@ -98,6 +99,16 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* VLCDetachedEmbeddedView interface
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
@interface VLCDetachedEmbeddedVoutView : VLCEmbeddedVoutView
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* VLCWindow interface
|
* VLCWindow interface
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
@ -119,7 +130,6 @@
|
|||||||
- (void)closeWindow;
|
- (void)closeWindow;
|
||||||
- (id)closeReal: (id) sender;
|
- (id)closeReal: (id) sender;
|
||||||
- (id)getVoutView;
|
- (id)getVoutView;
|
||||||
- (void)updateTitle;
|
|
||||||
|
|
||||||
- (BOOL)windowShouldClose:(id)sender;
|
- (BOOL)windowShouldClose:(id)sender;
|
||||||
|
|
||||||
|
@ -248,6 +248,51 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
p_real_vout = NULL;
|
p_real_vout = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)updateTitle
|
||||||
|
{
|
||||||
|
NSMutableString * o_title = nil, * o_mrl = nil;
|
||||||
|
input_thread_t * p_input;
|
||||||
|
|
||||||
|
if( p_vout == NULL )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT );
|
||||||
|
|
||||||
|
if( p_input == NULL )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( p_input->input.p_item->psz_name != NULL )
|
||||||
|
o_title = [NSMutableString stringWithUTF8String:
|
||||||
|
p_input->input.p_item->psz_name];
|
||||||
|
if( p_input->input.p_item->psz_uri != NULL )
|
||||||
|
o_mrl = [NSMutableString stringWithUTF8String:
|
||||||
|
p_input->input.p_item->psz_uri];
|
||||||
|
if( o_title == nil )
|
||||||
|
o_title = o_mrl;
|
||||||
|
|
||||||
|
if( o_mrl != nil )
|
||||||
|
{
|
||||||
|
if( p_input->input.p_access && !strcmp( p_input->input.p_access->p_module->psz_shortname, "File" ) )
|
||||||
|
{
|
||||||
|
NSRange prefix_range = [o_mrl rangeOfString: @"file:"];
|
||||||
|
if( prefix_range.location != NSNotFound )
|
||||||
|
[o_mrl deleteCharactersInRange: prefix_range];
|
||||||
|
[o_window setRepresentedFilename: o_mrl];
|
||||||
|
}
|
||||||
|
[o_window setTitle: o_title];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[o_window setTitle: [NSString stringWithCString: VOUT_TITLE]];
|
||||||
|
}
|
||||||
|
vlc_object_release( p_input );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
- (void)setOnTop:(BOOL)b_on_top
|
- (void)setOnTop:(BOOL)b_on_top
|
||||||
{
|
{
|
||||||
if( b_on_top )
|
if( b_on_top )
|
||||||
@ -650,6 +695,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
var_Create( p_vout, "macosx-stretch", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
|
var_Create( p_vout, "macosx-stretch", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
|
||||||
var_Create( p_vout, "macosx-opaqueness", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
|
var_Create( p_vout, "macosx-opaqueness", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
|
||||||
var_Create( p_vout, "macosx-background", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
|
var_Create( p_vout, "macosx-background", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
|
||||||
|
var_Create( p_vout, "macosx-embedded", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
|
||||||
|
|
||||||
|
|
||||||
/* We only wait for NSApp to initialise if we're not embedded (as in the
|
/* We only wait for NSApp to initialise if we're not embedded (as in the
|
||||||
@ -676,7 +722,8 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( VLCIntf && !(p_vout->b_fullscreen) &&
|
if ( VLCIntf && !(p_vout->b_fullscreen) &&
|
||||||
!(var_GetBool( p_real_vout, "macosx-background" )) )
|
!(var_GetBool( p_real_vout, "macosx-background" )) &&
|
||||||
|
var_GetBool( p_vout, "macosx-embedded") )
|
||||||
{
|
{
|
||||||
o_return = [[[VLCMain sharedInstance] getEmbeddedList]
|
o_return = [[[VLCMain sharedInstance] getEmbeddedList]
|
||||||
getEmbeddedVout];
|
getEmbeddedVout];
|
||||||
@ -716,6 +763,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
i_time_mouse_last_moved = mdate();
|
i_time_mouse_last_moved = mdate();
|
||||||
o_window = [[VLCWindow alloc] initWithVout: p_arg_vout view: self
|
o_window = [[VLCWindow alloc] initWithVout: p_arg_vout view: self
|
||||||
frame: s_arg_frame];
|
frame: s_arg_frame];
|
||||||
|
[self updateTitle];
|
||||||
[view setFrame: [self frame]];
|
[view setFrame: [self frame]];
|
||||||
[o_window setAcceptsMouseMovedEvents: TRUE];
|
[o_window setAcceptsMouseMovedEvents: TRUE];
|
||||||
return b_return;
|
return b_return;
|
||||||
@ -823,6 +871,30 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@implementation VLCDetachedEmbeddedVoutView
|
||||||
|
|
||||||
|
- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view
|
||||||
|
frame: (NSRect *) s_arg_frame
|
||||||
|
{
|
||||||
|
BOOL b_return = [super setVout: p_arg_vout subView: view frame: s_arg_frame];
|
||||||
|
|
||||||
|
if( b_return )
|
||||||
|
{
|
||||||
|
[o_window setAlphaValue: var_GetFloat( p_vout, "macosx-opaqueness" )];
|
||||||
|
[self updateTitle];
|
||||||
|
[self scaleWindowWithFactor: 1.0];
|
||||||
|
[o_window makeKeyAndOrderFront: self];
|
||||||
|
}
|
||||||
|
return b_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)closeVout
|
||||||
|
{
|
||||||
|
[o_window orderOut: self];
|
||||||
|
[super closeVout];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* VLCWindow implementation
|
* VLCWindow implementation
|
||||||
@ -847,7 +919,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initReal: (id) sender
|
- (id)initReal: (id) sender
|
||||||
{
|
{
|
||||||
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
|
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
|
||||||
NSArray *o_screens = [NSScreen screens];
|
NSArray *o_screens = [NSScreen screens];
|
||||||
@ -943,7 +1015,6 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[self updateTitle];
|
|
||||||
[self makeKeyAndOrderFront: nil];
|
[self makeKeyAndOrderFront: nil];
|
||||||
[self setReleasedWhenClosed: YES];
|
[self setReleasedWhenClosed: YES];
|
||||||
|
|
||||||
@ -1001,50 +1072,6 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
|
|||||||
|
|
||||||
/* This is actually the same as VLCControls::stop. */
|
/* This is actually the same as VLCControls::stop. */
|
||||||
|
|
||||||
- (void)updateTitle /*not modified yey ! */
|
|
||||||
{
|
|
||||||
NSMutableString * o_title = NULL, * o_mrl = NULL;
|
|
||||||
input_thread_t * p_input;
|
|
||||||
|
|
||||||
if( p_vout == NULL )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT );
|
|
||||||
|
|
||||||
if( p_input == NULL )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( p_input->input.p_item->psz_name != NULL )
|
|
||||||
o_title = [NSMutableString stringWithUTF8String:
|
|
||||||
p_input->input.p_item->psz_name];
|
|
||||||
if( p_input->input.p_item->psz_uri != NULL )
|
|
||||||
o_mrl = [NSMutableString stringWithUTF8String:
|
|
||||||
p_input->input.p_item->psz_uri];
|
|
||||||
if( o_title == nil )
|
|
||||||
o_title = o_mrl;
|
|
||||||
|
|
||||||
if( o_mrl != nil )
|
|
||||||
{
|
|
||||||
if( p_input->input.p_access && !strcmp( p_input->input.p_access->p_module->psz_shortname, "File" ) )
|
|
||||||
{
|
|
||||||
NSRange prefix_range = [o_mrl rangeOfString: @"file:"];
|
|
||||||
if( prefix_range.location != NSNotFound )
|
|
||||||
[o_mrl deleteCharactersInRange: prefix_range];
|
|
||||||
[self setRepresentedFilename: o_mrl];
|
|
||||||
}
|
|
||||||
[self setTitle: o_title];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[self setTitle: [NSString stringWithCString: VOUT_TITLE]];
|
|
||||||
}
|
|
||||||
vlc_object_release( p_input );
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)windowShouldClose:(id)sender
|
- (BOOL)windowShouldClose:(id)sender
|
||||||
{
|
{
|
||||||
playlist_t * p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST,
|
playlist_t * p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST,
|
||||||
|