/*****************************************************************************
* vout.m: MacOS X video output module
*****************************************************************************
- * Copyright (C) 2001-2008 the VideoLAN team
+ * Copyright (C) 2001-2009 the VideoLAN team
* $Id$
*
* Authors: Colin Delacroix <colin@zoy.org>
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <errno.h> /* ENOMEM */
#include <stdlib.h> /* free() */
#include <string.h>
-/* BeginFullScreen, EndFullScreen */
-#include <QuickTime/QuickTime.h>
-
/* prevent system sleep */
#import <CoreServices/CoreServices.h>
+/* FIXME: HACK!! */
+#ifdef __x86_64__
+#import <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h>
+#endif
+
+/* SystemUIMode */
+#import <Carbon/Carbon.h>
-#include <vlc_keys.h>
#include "intf.h"
#include "fspanel.h"
#import "controls.h"
#import "embeddedwindow.h"
+#include <vlc_common.h>
+#include <vlc_keys.h>
+
/*****************************************************************************
* DeviceCallback: Callback triggered when the video-device variable is changed
*****************************************************************************/
return self;
}
-- (id)getEmbeddedVout
+- (id)embeddedVout
{
unsigned int i;
{
NSLog( @"We were not given a VLCVoutWindow" );
}*/
- return ([self getViewForWindow: o_window] == nil ? NO : YES );
+ return ([self viewForWindow: o_window] == nil ? NO : YES );
}
-- (id)getViewForWindow: (id)o_window
+- (id)viewForWindow: (id)o_window
{
- id o_enumerator = [o_embedded_array objectEnumerator];
- id o_current_embedded;
-
- while( (o_current_embedded = [o_enumerator nextObject]) )
+ if( o_embedded_array != nil )
{
- if( [o_current_embedded getWindow] == o_window )
+ id o_enumerator = [o_embedded_array objectEnumerator];
+ id o_current_embedded;
+ if( o_window != nil )
{
- return o_current_embedded;
+ while( (o_current_embedded = [o_enumerator nextObject]) )
+ {
+ if( [o_current_embedded voutWindow] == o_window )
+ {
+ return o_current_embedded;
+ }
+ }
}
}
return nil;
return NO;
}
- p_real_vout = [VLCVoutView getRealVout: p_vout];
+ p_real_vout = [VLCVoutView realVout: p_vout];
/* Get the pref value when this is the first time, otherwise retrieve the device from the top level video-device var */
if( var_Type( p_real_vout->p_libvlc, "video-device" ) == 0 )
- (void)closeVout
{
- [[[[VLCMain sharedInstance] getControls] getFSPanel] fadeOut];
+ [[[[VLCMain sharedInstance] controls] fspanel] fadeOut];
/* Make sure we don't see a white flash */
- [[self window] disableScreenUpdatesUntilFlush];
+ [[self voutWindow] disableScreenUpdatesUntilFlush];
[o_view removeFromSuperview];
o_view = nil;
p_vout = NULL;
- (void)updateTitle
{
- NSString * o_title = nil;
+ NSString * o_title = nil;
NSMutableString * o_mrl = nil;
input_thread_t * p_input;
char * psz_title;
if( !p_vout ) return;
- p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT );
+ p_input = getInput();
if( !p_input ) return;
vlc_object_release( p_input );
}
-
- (void)setOnTop:(BOOL)b_on_top
{
if( b_on_top )
{
vlc_value_t val;
if( !p_real_vout ) return;
- var_Get( p_real_vout, "fullscreen", &val );
- val.b_bool = !val.b_bool;
- var_Set( p_real_vout, "fullscreen", val );
+ var_ToggleBool( p_real_vout, "fullscreen" );
}
- (BOOL)isFullscreen
- (void)snapshot
{
- vout_Control( p_real_vout, VOUT_SNAPSHOT );
+ var_TriggerCallback( p_real_vout, "video-snapshot" );
}
- (void)manage
if( !VLCIntf || !VLCIntf->p_sys )
return;
- UInt8 UsrActivity;
if( VLCIntf->p_sys->i_play_status == PLAYING_S )
UpdateSystemActivity( UsrActivity );
}
-- (id)getWindow
+- (id)voutWindow
{
return o_window;
}
- (void)scrollWheel:(NSEvent *)theEvent
{
- VLCControls * o_controls = (VLCControls *)[[NSApp delegate] getControls];
+ VLCControls * o_controls = (VLCControls *)[[NSApp delegate] controls];
[o_controls scrollWheel: theEvent];
}
( [o_event modifierFlags] & NSControlKeyMask ) ) )
{
msg_Dbg( p_vout, "received NSRightMouseDown (generic method) or Ctrl clic" );
- [NSMenu popUpContextMenu: [[VLCMain sharedInstance] getVoutMenu] withEvent: o_event forView: [[[VLCMain sharedInstance] getControls] voutView]];
+ [NSMenu popUpContextMenu: [[VLCMain sharedInstance] voutMenu] withEvent: o_event forView: [[[VLCMain sharedInstance] controls] voutView]];
}
}
if( p_vout && [o_event type] == NSRightMouseDown )
{
msg_Dbg( p_vout, "received NSRightMouseDown (specific method)" );
- [NSMenu popUpContextMenu: [[VLCMain sharedInstance] getVoutMenu] withEvent: o_event forView: [[[VLCMain sharedInstance] getControls] voutView]];
+ [NSMenu popUpContextMenu: [[VLCMain sharedInstance] voutMenu] withEvent: o_event forView: [[[VLCMain sharedInstance] controls] voutView]];
}
[super mouseDown: o_event];
if( p_vout && [o_event type] == NSLeftMouseUp )
{
- vlc_value_t b_val;
- b_val.b_bool = true;
- var_Set( p_vout, "mouse-clicked", b_val );
+ int x, y;
+
+ var_GetCoords( p_vout, "mouse-moved", &x, &y );
+ var_SetCoords( p_vout, "mouse-clicked", x, y );
var_Get( p_vout, "mouse-button-down", &val );
val.i_int &= ~1;
/* FIXME: this isn't the appropriate place, but we can't receive
* NSRightMouseDown some how */
msg_Dbg( p_vout, "received NSRightMouseUp" );
- [NSMenu popUpContextMenu: [[VLCMain sharedInstance] getVoutMenu] withEvent: o_event forView: [[[VLCMain sharedInstance] getControls] voutView]];
+ [NSMenu popUpContextMenu: [[VLCMain sharedInstance] voutMenu] withEvent: o_event forView: [[[VLCMain sharedInstance] controls] voutView]];
}
[super mouseUp: o_event];
if( b_inside )
{
- vlc_value_t val;
+ int x, y;
unsigned int i_width, i_height, i_x, i_y;
vout_PlacePicture( p_vout, (unsigned int)s_rect.size.width,
(unsigned int)s_rect.size.height,
&i_x, &i_y, &i_width, &i_height );
- val.i_int = ( ((int)ml.x) - i_x ) *
- p_vout->render.i_width / i_width;
- var_Set( p_vout, "mouse-x", val );
-
+ x = (((int)ml.x) - i_x) * p_vout->render.i_width / i_width;
if( [[o_view className] isEqualToString: @"VLCGLView"] )
{
- val.i_int = ( ((int)(s_rect.size.height - ml.y)) - i_y ) *
+ y = (((int)(s_rect.size.height - ml.y)) - i_y) *
p_vout->render.i_height / i_height;
}
else
{
- val.i_int = ( ((int)ml.y) - i_y ) *
- p_vout->render.i_height / i_height;
+ y = (((int)ml.y) - i_y) * p_vout->render.i_height / i_height;
}
- var_Set( p_vout, "mouse-y", val );
-
- val.b_bool = true;
- var_Set( p_vout, "mouse-moved", val );
+ var_SetCoords( p_vout, "mouse-moved", x, y );
}
if( [self isFullscreen] )
- [[[[VLCMain sharedInstance] getControls] getFSPanel] fadeIn];
+ [[[[VLCMain sharedInstance] controls] fspanel] fadeIn];
}
[super mouseMoved: o_event];
/* Class methods used by the different vout modules */
-+ (vout_thread_t *)getRealVout: (vout_thread_t *)p_vout
++ (vout_thread_t *)realVout: (vout_thread_t *)p_vout
{
/* p_real_vout: the vout we have to use to check for video-on-top
and a few other things. If we are the QuickTime output, it's us.
+ (id)voutView: (vout_thread_t *)p_vout subView: (NSView *)view
frame: (NSRect *)s_frame
{
- vlc_value_t value_drawable;
+ int i_drawable_gl;
int i_timeout;
id o_return = nil;
- var_Get( p_vout->p_libvlc, "drawable", &value_drawable );
+ i_drawable_gl = var_GetInteger( p_vout->p_libvlc, "drawable-gl" );
var_Create( p_vout, "macosx-vdev", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_vout, "macosx-stretch", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
/* We only wait for NSApp to initialise if we're not embedded (as in the
* case of the Mozilla plugin). We can tell whether we're embedded or not
- * by examining the "drawable" value: if it's zero, we're running in the
+ * by examining the "drawable-gl" value: if it's zero, we're running in the
* main Mac intf; if it's non-zero, we're embedded. */
- if( value_drawable.i_int == 0 )
+ if( i_drawable_gl == 0 )
{
/* Wait for a MacOS X interface to appear. Timeout is 2 seconds. */
for( i_timeout = 20 ; i_timeout-- ; )
!(var_GetBool( p_vout, "macosx-background" )) &&
var_GetBool( p_vout, "embedded-video") )
{
- o_return = [[[VLCMain sharedInstance] getEmbeddedList]
- getEmbeddedVout];
+ o_return = [[[VLCMain sharedInstance] embeddedList] embeddedVout];
}
}
}
- (void)enterFullscreen
{
/* Save the settings for next playing item */
- playlist_t * p_playlist = pl_Hold( p_real_vout );
+ playlist_t * p_playlist = pl_Get( p_real_vout );
var_SetBool( p_playlist, "fullscreen", true );
- pl_Release( p_real_vout );
}
- (void)leaveFullscreen
{
/* Save the settings for next playing item */
- playlist_t * p_playlist = pl_Hold( p_real_vout );
+ playlist_t * p_playlist = pl_Get( p_real_vout );
var_SetBool( p_playlist, "fullscreen", false );
- pl_Release( p_real_vout );
}
@end
return YES;
}
-- (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
{
BOOL b_return = [super setVout: p_arg_vout subView: view frame:s_arg_frame];
i_time_mouse_last_moved = mdate();
o_window = [[VLCVoutWindow alloc] initWithVout: p_arg_vout view: self
frame: s_arg_frame];
-
+
[self updateTitle];
if([self isFullscreen])
[o_window performSelectorOnMainThread: @selector(enterFullscreen) withObject: NULL waitUntilDone: YES];
if(self = [super initWithFrame: frameRect])
{
b_used = NO;
- [[[VLCMain sharedInstance] getEmbeddedList] addEmbeddedVout: self];
+ [[[VLCMain sharedInstance] embeddedList] addEmbeddedVout: self];
o_embeddedwindow = nil; /* Filled later on in -awakeFromNib */
}
return self;
/* o_window needs to point to our o_embeddedwindow, super might have set it
* to the fullscreen window that o_embeddedwindow setups during fullscreen */
o_window = o_embeddedwindow;
-
+
if( b_return )
{
[o_window lockFullscreenAnimation];
/* FIXME: fix core */
[o_embeddedwindow performSelector:@selector(orderOut:) withObject:nil afterDelay:3.];
- [[[VLCMain sharedInstance] getEmbeddedList] releaseEmbeddedVout: self];
+ [[[VLCMain sharedInstance] embeddedList] releaseEmbeddedVout: self];
}
- (void)enterFullscreen
[self setLevel:NSNormalWindowLevel];
/* tell the fspanel to move itself to front next time it's triggered */
- [[[[VLCMain sharedInstance] getControls] getFSPanel] setVoutWasUpdated: i_device];
- [[[[VLCMain sharedInstance] getControls] getFSPanel] setActive: nil];
+ [[[[VLCMain sharedInstance] controls] fspanel] setVoutWasUpdated: i_device];
+ [[[[VLCMain sharedInstance] controls] fspanel] setActive: nil];
fullscreen = YES;
}
[NSScreen unblackoutScreens];
- [[[[VLCMain sharedInstance] getControls] getFSPanel] setNonActive: nil];
+ [[[[VLCMain sharedInstance] controls] fspanel] setNonActive: nil];
SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+
[self setFrame:initialFrame display:YES animate:YES];
[self setMovableByWindowBackground: YES];
if( var_GetBool( p_vout, "video-on-top" ) )