Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-gpu
Commits
af5969ae
Commit
af5969ae
authored
Sep 04, 2011
by
Felix Paul Kühne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
macosx: remove dead code and rename vout.* to VideoView.*
parent
9415464e
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
14 additions
and
1632 deletions
+14
-1632
Makefile.am
Makefile.am
+2
-12
extras/package/macosx/vlc.xcodeproj/project.pbxproj
extras/package/macosx/vlc.xcodeproj/project.pbxproj
+4
-10
modules/gui/macosx/MainMenu.m
modules/gui/macosx/MainMenu.m
+1
-1
modules/gui/macosx/Modules.am
modules/gui/macosx/Modules.am
+2
-5
modules/gui/macosx/VideoView.h
modules/gui/macosx/VideoView.h
+1
-1
modules/gui/macosx/VideoView.m
modules/gui/macosx/VideoView.m
+2
-2
modules/gui/macosx/controls.m
modules/gui/macosx/controls.m
+1
-1
modules/gui/macosx/embeddedwindow.h
modules/gui/macosx/embeddedwindow.h
+0
-167
modules/gui/macosx/embeddedwindow.m
modules/gui/macosx/embeddedwindow.m
+0
-1012
modules/gui/macosx/intf.m
modules/gui/macosx/intf.m
+1
-2
modules/gui/macosx/voutgl.m
modules/gui/macosx/voutgl.m
+0
-419
No files found.
Makefile.am
View file @
af5969ae
...
...
@@ -475,19 +475,14 @@ VLC-release.app: vlc
prefs.m
\
simple_prefs.h
\
simple_prefs.m
\
vout.h
\
voutgl.m
\
wizard.h
\
wizard.m
\
bookmarks.h
\
bookmarks.m
\
coredialogs.h
\
coredialogs.m
\
embeddedwindow.h
\
embeddedwindow.m
\
fspanel.h
\
fspanel.m
\
vout.m
;
do
\
fspanel.m
;
do
\
cp
"
$(srcdir)
/modules/gui/macosx/
$$
i"
\
$(top_builddir)
/tmp/modules/gui/macosx
;
\
done
...
...
@@ -608,19 +603,14 @@ VLC.app: vlc $(top_builddir)/src/.libs/libvlccore.dylib $(top_builddir)/lib/.lib
prefs.m
\
simple_prefs.h
\
simple_prefs.m
\
vout.h
\
voutgl.m
\
wizard.h
\
wizard.m
\
bookmarks.h
\
bookmarks.m
\
coredialogs.h
\
coredialogs.m
\
embeddedwindow.h
\
embeddedwindow.m
\
fspanel.h
\
fspanel.m
\
vout.m
;
do
\
fspanel.m
;
do
\
cp
"
$(srcdir)
/modules/gui/macosx/
$$
i"
\
$(top_builddir)
/tmp/modules/gui/macosx
;
\
done
...
...
extras/package/macosx/vlc.xcodeproj/project.pbxproj
View file @
af5969ae
...
...
@@ -239,7 +239,6 @@
8E6BC6FA041684EC0059A3A7
/* controls.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
controls.h
;
path
=
../../../modules/gui/macosx/controls.h
;
sourceTree
=
SOURCE_ROOT
;
};
8E9CA1A306D7DEE800B7186C
/* prefs_widgets.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
5
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
prefs_widgets.h
;
path
=
../../../modules/gui/macosx/prefs_widgets.h
;
sourceTree
=
SOURCE_ROOT
;
};
8E9CA1A406D7DEE800B7186C
/* prefs_widgets.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
prefs_widgets.m
;
path
=
../../../modules/gui/macosx/prefs_widgets.m
;
sourceTree
=
SOURCE_ROOT
;
};
8E9CA1A506D7DEE800B7186C
/* voutgl.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
5
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
voutgl.m
;
path
=
../../../modules/gui/macosx/voutgl.m
;
sourceTree
=
SOURCE_ROOT
;
};
8EBF3FA303F13FFB0059A3A7
/* vlc.scriptSuite */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text
;
name
=
vlc.scriptSuite
;
path
=
Resources/vlc.scriptSuite
;
sourceTree
=
SOURCE_ROOT
;
};
8EBF3FA503F140960059A3A7
/* vlc.scriptTerminology */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text.xml
;
name
=
vlc.scriptTerminology
;
path
=
Resources/vlc.scriptTerminology
;
sourceTree
=
SOURCE_ROOT
;
};
8ED6C27B03E2EB1C0059A3A7
/* controls.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
controls.m
;
path
=
../../../modules/gui/macosx/controls.m
;
sourceTree
=
SOURCE_ROOT
;
};
...
...
@@ -254,8 +253,6 @@
8ED6C28403E2EB1C0059A3A7
/* playlist.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
playlist.m
;
path
=
../../../modules/gui/macosx/playlist.m
;
sourceTree
=
SOURCE_ROOT
;
};
8ED6C28503E2EB1C0059A3A7
/* prefs.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
prefs.h
;
path
=
../../../modules/gui/macosx/prefs.h
;
sourceTree
=
SOURCE_ROOT
;
};
8ED6C28603E2EB1C0059A3A7
/* prefs.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
prefs.m
;
path
=
../../../modules/gui/macosx/prefs.m
;
sourceTree
=
SOURCE_ROOT
;
};
8ED6C28703E2EB1C0059A3A7
/* vout.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
vout.h
;
path
=
../../../modules/gui/macosx/vout.h
;
sourceTree
=
SOURCE_ROOT
;
};
8ED6C28803E2EB1C0059A3A7
/* vout.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
vout.m
;
path
=
../../../modules/gui/macosx/vout.m
;
sourceTree
=
SOURCE_ROOT
;
};
8EDAC3430440F72D0059A3A7
/* README.MacOSX.rtf */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text.rtf
;
path
=
README.MacOSX.rtf
;
sourceTree
=
SOURCE_ROOT
;
};
8EE1AF9F044465080059A3A7
/* about.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
about.h
;
path
=
../../../modules/gui/macosx/about.h
;
sourceTree
=
SOURCE_ROOT
;
};
8EE1AFA0044465080059A3A7
/* about.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
about.m
;
path
=
../../../modules/gui/macosx/about.m
;
sourceTree
=
SOURCE_ROOT
;
};
...
...
@@ -475,9 +472,9 @@
CCB24D5D0D54BBAE004D780C
/* simple_prefs.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
lineEnding
=
0
;
name
=
simple_prefs.m
;
path
=
../../../modules/gui/macosx/simple_prefs.m
;
sourceTree
=
SOURCE_ROOT
;
};
CCB24D5E0D54BBAE004D780C
/* simple_prefs.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
simple_prefs.h
;
path
=
../../../modules/gui/macosx/simple_prefs.h
;
sourceTree
=
SOURCE_ROOT
;
};
CCBE999E0F922C51000705F8
/* CoreServices.framework */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
wrapper.framework
;
name
=
CoreServices.framework
;
path
=
/System/Library/Frameworks/CoreServices.framework
;
sourceTree
=
"<absolute>"
;
};
CCC593780AB4A9FB0004FF52
/* embeddedwindow.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
embeddedwindow.h
;
path
=
../../../modules/gui/macosx/embeddedwindow.h
;
sourceTree
=
SOURCE_ROOT
;
};
CCC593790AB4A9FB0004FF52
/* embeddedwindow.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
embeddedwindow.m
;
path
=
../../../modules/gui/macosx/embeddedwindow.m
;
sourceTree
=
SOURCE_ROOT
;
};
CCC895830D9A8A82005AE59C
/* eyetv.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
eyetv.m
;
path
=
../../../modules/access/eyetv.m
;
sourceTree
=
SOURCE_ROOT
;
};
CCCCDCA01413E1C000FE3DE1
/* VideoView.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
VideoView.h
;
path
=
../../../modules/gui/macosx/VideoView.h
;
sourceTree
=
"<group>"
;
};
CCCCDCA11413E1C000FE3DE1
/* VideoView.m */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
VideoView.m
;
path
=
../../../modules/gui/macosx/VideoView.m
;
sourceTree
=
"<group>"
;
};
CCCDDEEF13E870BB00A35661
/* SideBarItem.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
SideBarItem.h
;
path
=
../../../modules/gui/macosx/SideBarItem.h
;
sourceTree
=
"<group>"
;
};
CCCDDEF013E870BB00A35661
/* SideBarItem.m */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.objc
;
name
=
SideBarItem.m
;
path
=
../../../modules/gui/macosx/SideBarItem.m
;
sourceTree
=
"<group>"
;
};
CCCE366D13817E4500694F2A
/* VideoEffects.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
name
=
VideoEffects.h
;
path
=
../../../modules/gui/macosx/VideoEffects.h
;
sourceTree
=
"<group>"
;
};
...
...
@@ -615,15 +612,12 @@
8E49720106417F6800370C9F
/* playlistinfo.m */
,
8E55FB7F0459B0FD00FB3317
/* output.h */
,
8E55FB800459B0FD00FB3317
/* output.m */
,
8ED6C28703E2EB1C0059A3A7
/* vout.h */
,
8ED6C28803E2EB1C0059A3A7
/* vout.m */
,
8E9CA1A506D7DEE800B7186C
/* voutgl.m */
,
CCCCDCA01413E1C000FE3DE1
/* VideoView.h */
,
CCCCDCA11413E1C000FE3DE1
/* VideoView.m */
,
DC769AB8085DF0DB001A838D
/* wizard.h */
,
DC769AB7085DF0DB001A838D
/* wizard.m */
,
DCE7BD0708A5724D007B10AE
/* bookmarks.h */
,
DCE7BD0608A5724D007B10AE
/* bookmarks.m */
,
CCC593780AB4A9FB0004FF52
/* embeddedwindow.h */
,
CCC593790AB4A9FB0004FF52
/* embeddedwindow.m */
,
2AEF857609A5FEC900130822
/* fspanel.h */
,
2AEF857709A5FEC900130822
/* fspanel.m */
,
CC6EDD4F0B9CA2140096068A
/* eyetv.h */
,
...
...
modules/gui/macosx/MainMenu.m
View file @
af5969ae
...
...
@@ -37,7 +37,7 @@
#import "coredialogs.h"
#import "controls.h"
#import "playlistinfo.h"
#import "
vout
.h"
#import "
VideoView
.h"
#import "CoreInteraction.h"
#import "MainWindow.h"
...
...
modules/gui/macosx/Modules.am
View file @
af5969ae
...
...
@@ -54,8 +54,6 @@ SOURCES_macosx = \
VideoEffects.m \
bookmarks.h \
bookmarks.m \
embeddedwindow.h \
embeddedwindow.m \
PXSourceList.h \
PXSourceList.m \
PXSourceListDataSource.h \
...
...
@@ -66,8 +64,7 @@ SOURCES_macosx = \
fspanel.h \
eyetv.h \
eyetv.m \
vout.h \
vout.m \
voutgl.m \
VideoView.h \
VideoView.m \
$(NULL)
modules/gui/macosx/
vout
.h
→
modules/gui/macosx/
VideoView
.h
View file @
af5969ae
/*****************************************************************************
*
vout
.h: MacOS X video output module
*
VideoView
.h: MacOS X video output module
*****************************************************************************
* Copyright (C) 2002-2011 the VideoLAN team
* $Id$
...
...
modules/gui/macosx/
vout
.m
→
modules/gui/macosx/
VideoView
.m
View file @
af5969ae
/*****************************************************************************
*
vout
.m: MacOS X video output module
*
VideoView
.m: MacOS X video output module
*****************************************************************************
* Copyright (C) 2002-2011 the VideoLAN team
* $Id$
...
...
@@ -32,7 +32,7 @@
#import <string.h>
#import "intf.h"
#import "
vout
.h"
#import "
VideoView
.h"
#import "CoreInteraction.h"
#import "MainMenu.h"
#import "MainWindow.h"
...
...
modules/gui/macosx/controls.m
View file @
af5969ae
...
...
@@ -33,7 +33,7 @@
#include <string.h>
#import "intf.h"
#import "
vout
.h"
#import "
VideoView
.h"
#import "open.h"
#import "controls.h"
#import "playlist.h"
...
...
modules/gui/macosx/embeddedwindow.h
deleted
100644 → 0
View file @
9415464e
/*****************************************************************************
* embeddedwindow.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2005-2007 the VideoLAN team
* $Id$
*
* 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* VLCEmbeddedWindow interface
*****************************************************************************/
#import "CompatibilityFixes.h"
#import "misc.h"
@interface
VLCEmbeddedWindow
:
NSWindow
<
NSWindowDelegate
,
NSAnimationDelegate
>
{
IBOutlet
id
o_btn_backward
;
IBOutlet
id
o_btn_forward
;
IBOutlet
id
o_btn_fullscreen
;
IBOutlet
id
o_btn_equalizer
;
IBOutlet
id
o_btn_playlist
;
IBOutlet
id
o_btn_play
;
IBOutlet
id
o_btn_prev
;
IBOutlet
id
o_btn_stop
;
IBOutlet
id
o_btn_next
;
IBOutlet
id
o_btn_volume_down
;
IBOutlet
id
o_volumeslider
;
IBOutlet
id
o_btn_volume_up
;
IBOutlet
id
o_backgroundimg_right
;
IBOutlet
id
o_backgroundimg_middle
;
IBOutlet
id
o_timeslider
;
IBOutlet
id
o_main_pgbar
;
IBOutlet
id
o_time
;
IBOutlet
id
o_scrollfield
;
IBOutlet
id
o_horizontal_split
;
IBOutlet
id
o_vertical_split
;
IBOutlet
id
o_videosubview
;
IBOutlet
id
o_view
;
IBOutlet
id
o_background_view
;
IBOutlet
id
o_searchfield
;
IBOutlet
id
o_status
;
IBOutlet
id
o_playlist
;
IBOutlet
id
o_playlist_view
;
IBOutlet
id
o_playlist_table
;
IBOutlet
id
o_vlc_main
;
IBOutlet
id
o_video_view
;
NSImage
*
o_img_play
;
NSImage
*
o_img_play_pressed
;
NSImage
*
o_img_pause
;
NSImage
*
o_img_pause_pressed
;
VLCWindow
*
o_fullscreen_window
;
NSViewAnimation
*
o_fullscreen_anim1
;
NSViewAnimation
*
o_fullscreen_anim2
;
NSViewAnimation
*
o_makekey_anim
;
NSView
*
o_temp_view
;
/* set to yes if we are fullscreen and all animations are over */
BOOL
b_fullscreen
;
NSRecursiveLock
*
o_animation_lock
;
BOOL
b_window_is_invisible
;
NSSize
videoRatio
;
NSInteger
originalLevel
;
}
-
(
void
)
controlTintChanged
;
-
(
id
)
videoView
;
-
(
void
)
setTime
:
(
NSString
*
)
o_arg_ime
position
:
(
float
)
f_position
;
-
(
id
)
getPgbar
;
-
(
void
)
playStatusUpdated
:
(
int
)
i_status
;
-
(
void
)
setSeekable
:
(
BOOL
)
b_seekable
;
-
(
void
)
setStop
:(
BOOL
)
b_input
;
-
(
void
)
setPrev
:(
BOOL
)
b_input
;
-
(
void
)
setNext
:(
BOOL
)
b_input
;
-
(
void
)
setVolumeEnabled
:(
BOOL
)
b_input
;
-
(
void
)
setScrollString
:(
NSString
*
)
o_string
;
-
(
void
)
setVolumeSlider
:(
float
)
f_level
;
-
(
void
)
setVideoRatio
:(
NSSize
)
ratio
;
-
(
NSView
*
)
mainView
;
-
(
IBAction
)
togglePlaylist
:(
id
)
sender
;
-
(
BOOL
)
isFullscreen
;
-
(
void
)
lockFullscreenAnimation
;
-
(
void
)
unlockFullscreenAnimation
;
-
(
void
)
enterFullscreen
;
-
(
void
)
leaveFullscreen
;
/* Allows leaving fullscreen by simply fading out the display */
-
(
void
)
leaveFullscreenAndFadeOut
:
(
BOOL
)
fadeout
;
/* private */
-
(
void
)
hasEndedFullscreen
;
-
(
void
)
hasBecomeFullscreen
;
-
(
void
)
setFrameOnMainThread
:(
NSData
*
)
packedargs
;
@end
/*****************************************************************************
* embeddedbackground
*****************************************************************************/
@interface
embeddedbackground
:
NSView
{
IBOutlet
id
o_window
;
IBOutlet
id
o_timeslider
;
IBOutlet
id
o_main_pgbar
;
IBOutlet
id
o_time
;
IBOutlet
id
o_scrollfield
;
IBOutlet
id
o_searchfield
;
IBOutlet
id
o_btn_backward
;
IBOutlet
id
o_btn_forward
;
IBOutlet
id
o_btn_fullscreen
;
IBOutlet
id
o_btn_equalizer
;
IBOutlet
id
o_btn_playlist
;
IBOutlet
id
o_btn_play
;
IBOutlet
id
o_btn_prev
;
IBOutlet
id
o_btn_stop
;
IBOutlet
id
o_btn_next
;
IBOutlet
id
o_btn_volume_down
;
IBOutlet
id
o_volumeslider
;
IBOutlet
id
o_btn_volume_up
;
NSPoint
dragStart
;
}
@end
/*****************************************************************************
* statusbar
*****************************************************************************/
@interface
statusbar
:
NSView
{
IBOutlet
id
o_text
;
BOOL
mainwindow
;
}
@end
modules/gui/macosx/embeddedwindow.m
deleted
100644 → 0
View file @
9415464e
/*****************************************************************************
* embeddedwindow.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2005-2011 the VideoLAN team
* $Id$
*
* Authors: Benjamin Pracht <bigben at videolan dot org>
* Felix Paul Kühne <fkuehne 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#import "intf.h"
#import "controls.h"
#import "vout.h"
#import "embeddedwindow.h"
#import "fspanel.h"
#import "CoreInteraction.h"
#import "playlist.h"
#import <vlc_url.h>
/* SetSystemUIMode, ... */
#import <Carbon/Carbon.h>
#if 0
/*****************************************************************************
* VLCEmbeddedWindow Implementation
*****************************************************************************/
@implementation VLCEmbeddedWindow
- (id)initWithContentRect:(NSRect)contentRect styleMask: (NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation
{
BOOL b_useTextured = YES;
if( [[NSWindow class] instancesRespondToSelector:@selector(setContentBorderThickness:forEdge:)] )
{
b_useTextured = NO;
windowStyle ^= NSTexturedBackgroundWindowMask;
}
self = [super initWithContentRect:contentRect styleMask:windowStyle backing:bufferingType defer:deferCreation];
if(! b_useTextured )
{
[self setContentBorderThickness:28.0 forEdge:NSMinYEdge];
}
return self;
}
- (void)awakeFromNib
{
[self setDelegate: self];
/* button strings */
[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_timeslider setToolTip: _NS("Position")];
[o_btn_prev setToolTip: _NS("Previous")];
[o_btn_stop setToolTip: _NS("Stop")];
[o_btn_next setToolTip: _NS("Next")];
[o_volumeslider setToolTip: _NS("Volume")];
[o_btn_playlist setToolTip: _NS("Playlist")];
[self setTitle: _NS("VLC media player")];
o_img_play = [NSImage imageNamed: @"play_embedded"];
o_img_pause = [NSImage imageNamed: @"pause_embedded"];
/* Useful to save o_view frame in fullscreen mode */
o_temp_view = [[NSView alloc] init];
[o_temp_view setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable];
o_fullscreen_window = nil;
o_makekey_anim = o_fullscreen_anim1 = o_fullscreen_anim2 = nil;
/* Not fullscreen when we wake up */
[o_btn_fullscreen setState: NO];
b_fullscreen = NO;
[self setMovableByWindowBackground:YES];
[self setDelegate:self];
/* Make sure setVisible: returns NO */
[self orderOut:self];
b_window_is_invisible = YES;
videoRatio = NSMakeSize( 0., 0. );
/* enlarge the time slider and move items around in case we have no window resize control */
if ([self showsResizeIndicator] == NO) {
NSRect view_rect;
view_rect = [o_backgroundimg_right frame];
[o_backgroundimg_right setFrame: NSMakeRect( view_rect.origin.x+15,
view_rect.origin.y,
view_rect.size.width,
view_rect.size.height )];
view_rect = [o_backgroundimg_middle frame];
[o_backgroundimg_middle setFrame: NSMakeRect( view_rect.origin.x,
view_rect.origin.y,
view_rect.size.width+15,
view_rect.size.height )];
view_rect = [o_timeslider frame];
[o_timeslider setFrame: NSMakeRect( view_rect.origin.x,
view_rect.origin.y,
view_rect.size.width+15,
view_rect.size.height )];
view_rect = [o_time frame];
[o_time setFrame: NSMakeRect( view_rect.origin.x+15,
view_rect.origin.y,
view_rect.size.width,
view_rect.size.height )];
}
/* we don't want this window to be restored on relaunch */
if ([self respondsToSelector:@selector(setRestorable:)])
[self setRestorable:NO];
}
- (void)controlTintChanged
{
BOOL b_playing = NO;
if( [o_btn_play alternateImage] == o_img_play_pressed )
b_playing = YES;
if( [NSColor currentControlTint] == NSGraphiteControlTint )
{
o_img_play_pressed = [NSImage imageNamed: @"play_embedded_graphite"];
o_img_pause_pressed = [NSImage imageNamed: @"pause_embedded_graphite"];
[o_btn_backward setAlternateImage: [NSImage imageNamed: @"skip_previous_embedded_graphite"]];
[o_btn_forward setAlternateImage: [NSImage imageNamed: @"skip_forward_embedded_graphite"]];
[o_btn_fullscreen setAlternateImage: [NSImage imageNamed: @"fullscreen_graphite"]];
} else {
o_img_play_pressed = [NSImage imageNamed: @"play_embedded_blue"];
o_img_pause_pressed = [NSImage imageNamed: @"pause_embedded_blue"];
[o_btn_backward setAlternateImage: [NSImage imageNamed: @"skip_previous_embedded_blue"]];
[o_btn_forward setAlternateImage: [NSImage imageNamed: @"skip_forward_embedded_blue"]];
[o_btn_fullscreen setAlternateImage: [NSImage imageNamed: @"fullscreen_blue"]];
}
if( b_playing )
[o_btn_play setAlternateImage: o_img_play_pressed];
else
[o_btn_play setAlternateImage: o_img_pause_pressed];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
[o_img_play release];
[o_img_play_pressed release];
[o_img_pause release];
[o_img_pause_pressed release];
[super dealloc];
}
- (id)videoView
{
return o_video_view;
}
- (void)setTime:(NSString *)o_arg_time position:(float)f_position
{
[o_time setStringValue: o_arg_time];
[o_timeslider 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_timeslider setEnabled: b_seekable];
}
- (void)setScrollString:(NSString *)o_string
{
[o_scrollfield setStringValue: o_string];
}
- (id)getPgbar
{
if( o_main_pgbar )
return o_main_pgbar;
return nil;
}
- (void)setStop:(BOOL)b_input
{
[o_btn_stop setEnabled: b_input];
}
- (void)setNext:(BOOL)b_input
{
[o_btn_next setEnabled: b_input];
}
- (void)setPrev:(BOOL)b_input
{
[o_btn_prev setEnabled: b_input];
}
- (void)setVolumeEnabled:(BOOL)b_input
{
[o_volumeslider setEnabled: b_input];
}
- (void)setVolumeSlider:(float)f_level
{
[o_volumeslider setFloatValue: f_level];
}
- (BOOL)windowShouldZoom:(NSWindow *)sender toFrame:(NSRect)newFrame
{
[self setFrame: newFrame display: YES animate: YES];
return NO;
}
- (BOOL)windowShouldClose:(id)sender
{
playlist_t * p_playlist = pl_Get( VLCIntf );
playlist_Stop( p_playlist );
return YES;
}
- (NSView *)mainView
{
if (o_fullscreen_window)
return o_temp_view;
else
return o_view;
}
- (void)setVideoRatio:(NSSize)ratio
{
videoRatio = ratio;
}
- (NSSize)windowWillResize:(NSWindow *)window toSize:(NSSize)proposedFrameSize
{
if( videoRatio.height == 0. || videoRatio.width == 0. )
return proposedFrameSize;
if( [[VLCCoreInteraction sharedInstance] aspectRatioIsLocked] )
{
NSRect viewRect = [o_view convertRect:[o_view bounds] toView: nil];
NSRect contentRect = [self contentRectForFrameRect:[self frame]];
float marginy = viewRect.origin.y + [self frame].size.height - contentRect.size.height;
float marginx = contentRect.size.width - viewRect.size.width;
proposedFrameSize.height = (proposedFrameSize.width - marginx) * videoRatio.height / videoRatio.width + marginy;
}
return proposedFrameSize;
}
- (void)becomeMainWindow
{
[o_status becomeMainWindow];
[super becomeMainWindow];
}
- (void)resignMainWindow
{
[o_status resignMainWindow];
[super resignMainWindow];
}
- (CGFloat)splitView:(NSSplitView *) splitView constrainSplitPosition:(CGFloat) proposedPosition ofSubviewAt:(NSInteger) index
{
if([splitView isVertical])
return proposedPosition;
else if ( splitView == o_vertical_split )
return proposedPosition ;
else {
float bottom = [splitView frame].size.height - [splitView dividerThickness];
if(proposedPosition > bottom - 50) {
[o_btn_playlist setState: NSOffState];
[o_searchfield setHidden:YES];
[o_playlist_view setHidden:YES];
return bottom;
}
else {
[o_btn_playlist setState: NSOnState];
[o_searchfield setHidden:NO];
[o_playlist_view setHidden:NO];
[o_playlist swapPlaylists: o_playlist_table];
[o_vlc_main togglePlaylist:self];
return proposedPosition;
}
}
}
- (void)splitViewWillResizeSubviews:(NSNotification *) notification
{
}
- (CGFloat)splitView:(NSSplitView *) splitView constrainMinCoordinate:(CGFloat) proposedMin ofSubviewAt:(NSInteger) offset
{
if([splitView isVertical])
return 125.;
else
return 0.;
}
- (CGFloat)splitView:(NSSplitView *) splitView constrainMaxCoordinate:(CGFloat) proposedMax ofSubviewAt:(NSInteger) offset
{
if([splitView isVertical])
return MIN([self frame].size.width - 551, 300);
else
return [splitView frame].size.height;
}
- (BOOL)splitView:(NSSplitView *) splitView canCollapseSubview:(NSView *) subview
{
if([splitView isVertical])
return NO;
else
return NO;
}
- (NSRect)splitView:(NSSplitView *)splitView effectiveRect:(NSRect)proposedEffectiveRect forDrawnRect:(NSRect)drawnRect
ofDividerAtIndex:(NSInteger)dividerIndex
{
if([splitView isVertical]) {
drawnRect.origin.x -= 3;
drawnRect.size.width += 5;
return drawnRect;
}
else
return drawnRect;
}
- (IBAction)togglePlaylist:(id)sender
{
NSView *playback_area = [[o_vertical_split subviews] objectAtIndex:0];
NSView *playlist_area = [[o_vertical_split subviews] objectAtIndex:1];
NSRect newVid = [playback_area frame];
NSRect newList = [playlist_area frame];
if(newList.size.height < 50 && sender != self && sender != o_vlc_main) {
newList.size.height = newVid.size.height/2;
newVid.size.height = newVid.size.height/2;
newVid.origin.y = newVid.origin.y + newList.size.height;
[o_btn_playlist setState: NSOnState];
[o_searchfield setHidden:NO];
[o_playlist_view setHidden:NO];
[o_playlist swapPlaylists: o_playlist_table];
[o_vlc_main togglePlaylist:self];
}
else {
newVid.size.height = newVid.size.height + newList.size.height;
newList.size.height = 0;
newVid.origin.y = 0;
[o_btn_playlist setState: NSOffState];
[o_searchfield setHidden:YES];
[o_playlist_view setHidden:YES];
}
[playback_area setFrame: newVid];
[playlist_area setFrame: newList];
}
/*****************************************************************************
* Fullscreen support
*/
- (BOOL)isFullscreen
{
return b_fullscreen;
}
- (void)lockFullscreenAnimation
{
[o_animation_lock lock];
}
- (void)unlockFullscreenAnimation
{
[o_animation_lock unlock];
}
- (void)enterFullscreen
{
NSMutableDictionary *dict1, *dict2;
NSScreen *screen;
NSRect screen_rect;
NSRect rect;
vout_thread_t *p_vout = getVout();
BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" );
if( p_vout )
screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)var_GetInteger( p_vout, "video-device" )];
[self lockFullscreenAnimation];
if (!screen)
{
msg_Dbg( VLCIntf, "chosen screen isn't present, using current screen for fullscreen mode" );
screen = [self screen];
}
if (!screen)
{
msg_Dbg( VLCIntf, "Using deepest screen" );
screen = [NSScreen deepestScreen];
}
if( p_vout )
vlc_object_release( p_vout );
screen_rect = [screen frame];
[o_btn_fullscreen setState: YES];
[NSCursor setHiddenUntilMouseMoves: YES];
if( blackout_other_displays )
[screen blackoutOtherScreens];
/* Make sure we don't see the window flashes in float-on-top mode */
originalLevel = [self level];
[self setLevel:NSNormalWindowLevel];
/* Only create the o_fullscreen_window if we are not in the middle of the zooming animation */
if (!o_fullscreen_window)
{
/* We can't change the styleMask of an already created NSWindow, so we create another window, and do eye catching stuff */
rect = [[o_view superview] convertRect: [o_view frame] toView: nil]; /* Convert to Window base coord */
rect.origin.x += [self frame].origin.x;
rect.origin.y += [self frame].origin.y;
o_fullscreen_window = [[VLCWindow alloc] initWithContentRect:rect styleMask: NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
[o_fullscreen_window setBackgroundColor: [NSColor blackColor]];
[o_fullscreen_window setCanBecomeKeyWindow: YES];
if (![self isVisible] || [self alphaValue] == 0.0)
{
/* We don't animate if we are not visible, instead we
* simply fade the display */
CGDisplayFadeReservationToken token;
if( blackout_other_displays )
{
CGAcquireDisplayFadeReservation( kCGMaxDisplayReservationInterval, &token );
CGDisplayFade( token, 0.5, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES );
}
if ([screen isMainScreen])
SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
[[o_view superview] replaceSubview:o_view with:o_temp_view];
[o_temp_view setFrame:[o_view frame]];
[o_fullscreen_window setContentView:o_view];
[o_fullscreen_window makeKeyAndOrderFront:self];
[o_fullscreen_window orderFront:self animate:YES];
[o_fullscreen_window setFrame:screen_rect display:YES];
if( blackout_other_displays )
{
CGDisplayFade( token, 0.3, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO );
CGReleaseDisplayFadeReservation( token );
}
/* Will release the lock */
[self hasBecomeFullscreen];
return;
}
/* Make sure we don't see the o_view disappearing of the screen during this operation */
NSDisableScreenUpdates();
[[o_view superview] replaceSubview:o_view with:o_temp_view];
[o_temp_view setFrame:[o_view frame]];
[o_fullscreen_window setContentView:o_view];
[o_fullscreen_window makeKeyAndOrderFront:self];
NSEnableScreenUpdates();
}
/* We are in fullscreen (and no animation is running) */
if (b_fullscreen)
{
/* Make sure we are hidden */
[super orderOut: self];
[self unlockFullscreenAnimation];
return;
}
if (o_fullscreen_anim1)
{
[o_fullscreen_anim1 stopAnimation];
[o_fullscreen_anim1 release];
}
if (o_fullscreen_anim2)
{
[o_fullscreen_anim2 stopAnimation];
[o_fullscreen_anim2 release];
}
if ([screen isMainScreen])
SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
dict1 = [[NSMutableDictionary alloc] initWithCapacity:2];
dict2 = [[NSMutableDictionary alloc] initWithCapacity:3];
[dict1 setObject:self forKey:NSViewAnimationTargetKey];
[dict1 setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];
[dict2 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey];
[dict2 setObject:[NSValue valueWithRect:[o_fullscreen_window frame]] forKey:NSViewAnimationStartFrameKey];
[dict2 setObject:[NSValue valueWithRect:screen_rect] forKey:NSViewAnimationEndFrameKey];
/* Strategy with NSAnimation allocation:
- Keep at most 2 animation at a time
- leaveFullscreen/enterFullscreen are the only responsible for releasing and alloc-ing
*/
o_fullscreen_anim1 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict1]];
o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict2]];
[dict1 release];
[dict2 release];
[o_fullscreen_anim1 setAnimationBlockingMode: NSAnimationNonblocking];
[o_fullscreen_anim1 setDuration: 0.3];
[o_fullscreen_anim1 setFrameRate: 30];
[o_fullscreen_anim2 setAnimationBlockingMode: NSAnimationNonblocking];
[o_fullscreen_anim2 setDuration: 0.2];
[o_fullscreen_anim2 setFrameRate: 30];
[o_fullscreen_anim2 setDelegate: self];
[o_fullscreen_anim2 startWhenAnimation: o_fullscreen_anim1 reachesProgress: 1.0];
[o_fullscreen_anim1 startAnimation];
/* fullscreenAnimation will be unlocked when animation ends */
}
- (void)hasBecomeFullscreen
{
[o_fullscreen_window makeFirstResponder: [[[VLCMain sharedInstance] controls] voutView]];
[o_fullscreen_window makeKeyWindow];
[o_fullscreen_window setAcceptsMouseMovedEvents: TRUE];
/* tell the fspanel to move itself to front next time it's triggered */
[[[[VLCMain sharedInstance] controls] fspanel] setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]];
if([self isVisible])
[super orderOut: self];
[[[[VLCMain sharedInstance] controls] fspanel] setActive: nil];
b_fullscreen = YES;
[self unlockFullscreenAnimation];
}
- (void)leaveFullscreen
{
[self leaveFullscreenAndFadeOut: NO];
}
- (void)leaveFullscreenAndFadeOut: (BOOL)fadeout
{
NSMutableDictionary *dict1, *dict2;
NSRect frame;
BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" );
[self lockFullscreenAnimation];
b_fullscreen = NO;
[o_btn_fullscreen setState: NO];
/* We always try to do so */
[NSScreen unblackoutScreens];
/* Don't do anything if o_fullscreen_window is already closed */
if (!o_fullscreen_window)
{
[self unlockFullscreenAnimation];
return;
}
if (fadeout)
{
/* We don't animate if we are not visible, instead we
* simply fade the display */
CGDisplayFadeReservationToken token;
if( blackout_other_displays )
{
CGAcquireDisplayFadeReservation( kCGMaxDisplayReservationInterval, &token );
CGDisplayFade( token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES );
}
[[[[VLCMain sharedInstance] controls] fspanel] setNonActive: nil];
SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
/* Will release the lock */
[self hasEndedFullscreen];
/* Our window is hidden, and might be faded. We need to workaround that, so note it
* here */
b_window_is_invisible = YES;
if( blackout_other_displays )
{
CGDisplayFade( token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO );
CGReleaseDisplayFadeReservation( token );
}
return;
}
[self setAlphaValue: 0.0];
[self orderFront: self];
[[[[VLCMain sharedInstance] controls] fspanel] setNonActive: nil];
SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
if (o_fullscreen_anim1)
{
[o_fullscreen_anim1 stopAnimation];
[o_fullscreen_anim1 release];
}
if (o_fullscreen_anim2)
{
[o_fullscreen_anim2 stopAnimation];
[o_fullscreen_anim2 release];
}
frame = [[o_temp_view superview] convertRect: [o_temp_view frame] toView: nil]; /* Convert to Window base coord */
frame.origin.x += [self frame].origin.x;
frame.origin.y += [self frame].origin.y;
dict2 = [[NSMutableDictionary alloc] initWithCapacity:2];
[dict2 setObject:self forKey:NSViewAnimationTargetKey];
[dict2 setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict2, nil]];
[dict2 release];
[o_fullscreen_anim2 setAnimationBlockingMode: NSAnimationNonblocking];
[o_fullscreen_anim2 setDuration: 0.3];
[o_fullscreen_anim2 setFrameRate: 30];
[o_fullscreen_anim2 setDelegate: self];
dict1 = [[NSMutableDictionary alloc] initWithCapacity:3];
[dict1 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey];
[dict1 setObject:[NSValue valueWithRect:[o_fullscreen_window frame]] forKey:NSViewAnimationStartFrameKey];
[dict1 setObject:[NSValue valueWithRect:frame] forKey:NSViewAnimationEndFrameKey];
o_fullscreen_anim1 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict1, nil]];
[dict1 release];
[o_fullscreen_anim1 setAnimationBlockingMode: NSAnimationNonblocking];
[o_fullscreen_anim1 setDuration: 0.2];
[o_fullscreen_anim1 setFrameRate: 30];
[o_fullscreen_anim2 startWhenAnimation: o_fullscreen_anim1 reachesProgress: 1.0];
/* Make sure o_fullscreen_window is the frontmost window */
[o_fullscreen_window orderFront: self];
[o_fullscreen_anim1 startAnimation];
/* fullscreenAnimation will be unlocked when animation ends */
}
- (void)hasEndedFullscreen
{
/* This function is private and should be only triggered at the end of the fullscreen change animation */
/* Make sure we don't see the o_view disappearing of the screen during this operation */
NSDisableScreenUpdates();
[o_view retain];
[o_view removeFromSuperviewWithoutNeedingDisplay];
[[o_temp_view superview] replaceSubview:o_temp_view with:o_view];
[o_view release];
[o_view setFrame:[o_temp_view frame]];
[self makeFirstResponder: o_view];
if ([self isVisible])
[super makeKeyAndOrderFront:self]; /* our version contains a workaround */
[o_fullscreen_window orderOut: self];
NSEnableScreenUpdates();
[o_fullscreen_window release];
o_fullscreen_window = nil;
[self setLevel:originalLevel];
[self unlockFullscreenAnimation];
}
- (void)animationDidEnd:(NSAnimation*)animation
{
NSArray *viewAnimations;
if( o_makekey_anim == animation )
{
[o_makekey_anim release];
return;
}
if ([animation currentValue] < 1.0)
return;
/* Fullscreen ended or started (we are a delegate only for leaveFullscreen's/enterFullscren's anim2) */
viewAnimations = [o_fullscreen_anim2 viewAnimations];
if ([viewAnimations count] >=1 &&
[[[viewAnimations objectAtIndex: 0] objectForKey: NSViewAnimationEffectKey] isEqualToString:NSViewAnimationFadeInEffect])
{
/* Fullscreen ended */
[self hasEndedFullscreen];
}
else
{
/* Fullscreen started */
[self hasBecomeFullscreen];
}
}
- (void)orderOut: (id)sender
{
[super orderOut: sender];
/* Make sure we leave fullscreen */
[self leaveFullscreenAndFadeOut: YES];
}
- (void)makeKeyAndOrderFront: (id)sender
{
/* Hack
* when we exit fullscreen and fade out, we may endup in
* having a window that is faded. We can't have it fade in unless we
* animate again. */
if(!b_window_is_invisible)
{
/* Make sure we don't do it too much */
[super makeKeyAndOrderFront: sender];
return;
}
[super setAlphaValue:0.0f];
[super makeKeyAndOrderFront: sender];
NSMutableDictionary * dict = [[NSMutableDictionary alloc] initWithCapacity:2];
[dict setObject:self forKey:NSViewAnimationTargetKey];
[dict setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
o_makekey_anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];
[dict release];
[o_makekey_anim setAnimationBlockingMode: NSAnimationNonblocking];
[o_makekey_anim setDuration: 0.1];
[o_makekey_anim setFrameRate: 30];
[o_makekey_anim setDelegate: self];
[o_makekey_anim startAnimation];
b_window_is_invisible = NO;
/* fullscreenAnimation will be unlocked when animation ends */
}
/* Make sure setFrame gets executed on main thread especially if we are animating.
* (Thus we won't block the video output thread) */
- (void)setFrame:(NSRect)frame display:(BOOL)display animate:(BOOL)animate
{
struct { NSRect frame; BOOL display; BOOL animate;} args;
NSData *packedargs;
args.frame = frame;
args.display = display;
args.animate = animate;
packedargs = [NSData dataWithBytes:&args length:sizeof(args)];
[self performSelectorOnMainThread:@selector(setFrameOnMainThread:)
withObject: packedargs waitUntilDone: YES];
}
- (void)setFrameOnMainThread:(NSData*)packedargs
{
struct args { NSRect frame; BOOL display; BOOL animate; } * args = (struct args*)[packedargs bytes];
if( args->animate )
{
/* Make sure we don't block too long and set up a non blocking animation */
NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys:
self, NSViewAnimationTargetKey,
[NSValue valueWithRect:[self frame]], NSViewAnimationStartFrameKey,
[NSValue valueWithRect:args->frame], NSViewAnimationEndFrameKey, nil];
NSViewAnimation * anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];
[dict release];
[anim setAnimationBlockingMode: NSAnimationNonblocking];
[anim setDuration: 0.4];
[anim setFrameRate: 30];
[anim startAnimation];
}
else {
[super setFrame:args->frame display:args->display animate:args->animate];
}
}
@end
/*****************************************************************************
* embeddedbackground
*****************************************************************************/
@implementation embeddedbackground
- (void)dealloc
{
[self unregisterDraggedTypes];
[super dealloc];
}
- (void)awakeFromNib
{
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSTIFFPboardType,
NSFilenamesPboardType, nil]];
[self addSubview: o_timeslider];
[self addSubview: o_scrollfield];
[self addSubview: o_time];
[self addSubview: o_main_pgbar];
[self addSubview: o_btn_backward];
[self addSubview: o_btn_forward];
[self addSubview: o_btn_fullscreen];
[self addSubview: o_btn_equalizer];
[self addSubview: o_btn_playlist];
[self addSubview: o_btn_play];
[self addSubview: o_btn_prev];
[self addSubview: o_btn_stop];
[self addSubview: o_btn_next];
[self addSubview: o_btn_volume_down];
[self addSubview: o_volumeslider];
[self addSubview: o_btn_volume_up];
[self addSubview: o_searchfield];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
if ((NSDragOperationGeneric & [sender draggingSourceOperationMask])
== NSDragOperationGeneric)
{
return NSDragOperationGeneric;
}
else
{
return NSDragOperationNone;
}
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
return YES;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *o_paste = [sender draggingPasteboard];
NSArray *o_types = [NSArray arrayWithObjects: NSFilenamesPboardType, nil];
NSString *o_desired_type = [o_paste availableTypeFromArray:o_types];
NSData *o_carried_data = [o_paste dataForType:o_desired_type];
BOOL b_autoplay = config_GetInt( VLCIntf, "macosx-autoplay" );
if( o_carried_data )
{
if ([o_desired_type isEqualToString:NSFilenamesPboardType])
{
int i;
NSArray *o_array = [NSArray array];
NSArray *o_values = [[o_paste propertyListForType: NSFilenamesPboardType]
sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
for( i = 0; i < (int)[o_values count]; i++)
{
NSDictionary *o_dic;
char *psz_uri = make_URI([[o_values objectAtIndex:i] UTF8String], NULL);
if( !psz_uri )
continue;
o_dic = [NSDictionary dictionaryWithObject:[NSString stringWithCString:psz_uri encoding:NSUTF8StringEncoding] forKey:@"ITEM_URL"];
free( psz_uri );
o_array = [o_array arrayByAddingObject: o_dic];
}
if( b_autoplay )
[[[VLCMain sharedInstance] playlist] appendArray: o_array atPos: -1 enqueue:NO];
else
[[[VLCMain sharedInstance] playlist] appendArray: o_array atPos: -1 enqueue:YES];
return YES;
}
}
[self setNeedsDisplay:YES];
return YES;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
[self setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)rect
{
NSImage *leftImage = [NSImage imageNamed:@"display_left"];
NSImage *middleImage = [NSImage imageNamed:@"display_middle"];
NSImage *rightImage = [NSImage imageNamed:@"display_right"];
[middleImage setSize:NSMakeSize(NSWidth( [self bounds] ) - 134 - [leftImage size].width - [rightImage size].width, [middleImage size].height)];
[middleImage setScalesWhenResized:YES];
[leftImage compositeToPoint:NSMakePoint( 122., 40. ) operation:NSCompositeSourceOver];
[middleImage compositeToPoint:NSMakePoint( 122. + [leftImage size].width, 40. ) operation:NSCompositeSourceOver];
[rightImage compositeToPoint:NSMakePoint( NSWidth( [self bounds] ) - 12 - [rightImage size].width, 40. ) operation:NSCompositeSourceOver];
}
- (void)mouseDown:(NSEvent *)event
{
dragStart = [self convertPoint:[event locationInWindow] fromView:nil];
}
- (void)mouseDragged:(NSEvent *)event
{
NSPoint dragLocation = [self convertPoint:[event locationInWindow] fromView:nil];
NSPoint winOrigin = [o_window frame].origin;
NSPoint newOrigin = NSMakePoint(winOrigin.x + (dragLocation.x - dragStart.x),
winOrigin.y + (dragLocation.y - dragStart.y));
[o_window setFrameOrigin: newOrigin];
}
@end
/*****************************************************************************
* statusbar
*****************************************************************************/
@implementation statusbar
- (void)awakeFromNib
{
[self addSubview: o_text];
mainwindow = YES;
}
- (void)resignMainWindow
{
mainwindow = NO;
[self needsDisplay];
}
- (void)becomeMainWindow
{
mainwindow = YES;
[self needsDisplay];
}
- (void)drawRect:(NSRect)rect
{
if(mainwindow)
[[NSColor colorWithCalibratedRed:0.820
green:0.843
blue:0.886
alpha:1.0] set];
else
[[NSColor colorWithCalibratedWhite:0.91 alpha:1.0] set];
NSRectFill(rect);
/*NSRect divider = rect;
divider.origin.y += divider.size.height - 1;
divider.size.height = 1;
[[NSColor colorWithCalibratedWhite:0.65 alpha:1.] set];
NSRectFill(divider);*/
}
@end
#endif
modules/gui/macosx/intf.m
View file @
af5969ae
...
...
@@ -42,7 +42,7 @@
#import "CompatibilityFixes.h"
#import "intf.h"
#import "MainMenu.h"
#import "
vout
.h"
#import "
VideoView
.h"
#import "prefs.h"
#import "playlist.h"
#import "playlistinfo.h"
...
...
@@ -51,7 +51,6 @@
#import "wizard.h"
#import "bookmarks.h"
#import "coredialogs.h"
#import "embeddedwindow.h"
#import "AppleRemote.h"
#import "eyetv.h"
#import "simple_prefs.h"
...
...
modules/gui/macosx/voutgl.m
deleted
100644 → 0
View file @
9415464e
/*****************************************************************************
* voutgl.m: MacOS X OpenGL provider
*****************************************************************************
* Copyright (C) 2001-2004, 2007-2009, 2011 the VideoLAN team
* $Id$
*
* Authors: Colin Delacroix <colin@zoy.org>
* Florian G. Pflug <fgp@phlo.org>
* 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>
* Damien Fouilleul <damienf at videolan dot org>
* Felix Paul Kuehne <fkuehne 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h>
/* free() */
#include <string.h>
#include <vlc_common.h>
#include <vlc_keys.h>
#include "intf.h"
#include "vout.h"
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h>
#if 0
/*****************************************************************************
* VLCGLView interface
*****************************************************************************/
@interface VLCGLView : NSOpenGLView <VLCVoutViewResetting>
{
vout_thread_t * p_vout;
}
+ (void)resetVout: (NSValue *) voutValue;
- (id) initWithVout: (vout_thread_t *) p_vout;
@end
struct vout_sys_t
{
VLCGLView * o_glview;
VLCVoutView * o_vout_view;
bool b_saved_frame;
NSRect s_frame;
bool b_got_frame;
bool b_embedded;
};
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static int Init ( vout_thread_t * p_vout );
static void End ( vout_thread_t * p_vout );
static int Manage ( vout_thread_t * p_vout );
static int Control( vout_thread_t *, int, va_list );
static void Swap ( vout_thread_t * p_vout );
static int Lock ( vout_thread_t * p_vout );
static void Unlock ( vout_thread_t * p_vout );
int OpenVideoGL ( vlc_object_t * p_this )
{
vout_thread_t * p_vout = (vout_thread_t *) p_this;
if( !CGDisplayUsesOpenGLAcceleration( kCGDirectMainDisplay ) )
{
msg_Warn( p_vout, "no OpenGL hardware acceleration found. "
"Video display might be slow" );
}
msg_Dbg( p_vout, "display is Quartz Extreme accelerated" );
p_vout->p_sys = malloc( sizeof( vout_sys_t ) );
if( p_vout->p_sys == NULL )
return VLC_ENOMEM;
memset( p_vout->p_sys, 0, sizeof( vout_sys_t ) );
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
p_vout->p_sys->b_embedded = false;
[VLCGLView performSelectorOnMainThread:@selector(initVout:) withObject:[NSValue valueWithPointer:p_vout] waitUntilDone:YES];
[o_pool release];
/* Check to see if initVout: was successfull */
if( !p_vout->p_sys->o_vout_view )
{
free( p_vout->p_sys );
return VLC_EGENERIC;
}
p_vout->pf_init = Init;
p_vout->pf_end = End;
p_vout->pf_manage = Manage;
p_vout->pf_control= Control;
p_vout->pf_swap = Swap;
p_vout->pf_lock = Lock;
p_vout->pf_unlock = Unlock;
p_vout->p_sys->b_got_frame = false;
return VLC_SUCCESS;
}
void CloseVideoGL ( vlc_object_t * p_this )
{
vout_thread_t * p_vout = (vout_thread_t *) p_this;
if(VLCIntf && vlc_object_alive (VLCIntf))
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
/* Close the window */
[p_vout->p_sys->o_vout_view performSelectorOnMainThread:@selector(closeVout) withObject:NULL waitUntilDone:YES];
[o_pool release];
}
/* Clean up */
free( p_vout->p_sys );
}
static int Init( vout_thread_t * p_vout )
{
[[p_vout->p_sys->o_glview openGLContext] makeCurrentContext];
return VLC_SUCCESS;
}
static void End( vout_thread_t * p_vout )
{
[[p_vout->p_sys->o_glview openGLContext] makeCurrentContext];
}
static int Manage( vout_thread_t * p_vout )
{
if( p_vout->i_changes & VOUT_ASPECT_CHANGE )
{
[p_vout->p_sys->o_glview reshape];
p_vout->i_changes &= ~VOUT_ASPECT_CHANGE;
}
if( p_vout->i_changes & VOUT_CROP_CHANGE )
{
[p_vout->p_sys->o_glview reshape];
p_vout->i_changes &= ~VOUT_CROP_CHANGE;
}
if( p_vout->i_changes & VOUT_FULLSCREEN_CHANGE )
{
NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
p_vout->b_fullscreen = !p_vout->b_fullscreen;
if( p_vout->b_fullscreen )
[p_vout->p_sys->o_vout_view enterFullscreen];
else
[p_vout->p_sys->o_vout_view leaveFullscreen];
[o_pool release];
p_vout->i_changes &= ~VOUT_FULLSCREEN_CHANGE;
}
if( p_vout->p_sys->o_vout_view )
[p_vout->p_sys->o_vout_view manage];
return VLC_SUCCESS;
}
/*****************************************************************************
* Control: control facility for the vout
*****************************************************************************/
static int Control( vout_thread_t *p_vout, int i_query, va_list args )
{
bool b_arg;
switch( i_query )
{
case VOUT_SET_STAY_ON_TOP:
b_arg = (bool) va_arg( args, int );
[p_vout->p_sys->o_vout_view setOnTop: b_arg];
return VLC_SUCCESS;
default:
return VLC_EGENERIC;
}
}
static void Swap( vout_thread_t * p_vout )
{
p_vout->p_sys->b_got_frame = true;
[[p_vout->p_sys->o_glview openGLContext] flushBuffer];
}
static int Lock( vout_thread_t * p_vout )
{
if( kCGLNoError == CGLLockContext([[p_vout->p_sys->o_glview openGLContext] CGLContextObj]) )
{
[[p_vout->p_sys->o_glview openGLContext] makeCurrentContext];
return 0;
}
return 1;
}
static void Unlock( vout_thread_t * p_vout )
{
CGLUnlockContext([[p_vout->p_sys->o_glview openGLContext] CGLContextObj]);
}
/*****************************************************************************
* VLCGLView implementation
*****************************************************************************/
@implementation VLCGLView
+ (void)initVout:(NSValue *)arg
{
vout_thread_t * p_vout = [arg pointerValue];
/* Create the GL view */
p_vout->p_sys->o_glview = [[VLCGLView alloc] initWithVout: p_vout];
[p_vout->p_sys->o_glview autorelease];
/* Spawn the window */
id old_vout = p_vout->p_sys->o_vout_view;
p_vout->p_sys->o_vout_view = [[VLCVoutView voutView: p_vout
subView: p_vout->p_sys->o_glview frame: nil] retain];
[old_vout release];
}
/* This function will reset the o_vout_view. It's useful to go fullscreen. */
+ (void)resetVout:(NSValue *) voutValue
{
vout_thread_t * p_vout = [voutValue pointerValue];
if( p_vout->b_fullscreen )
{
/* Save window size and position */
p_vout->p_sys->s_frame.size =
[p_vout->p_sys->o_vout_view frame].size;
p_vout->p_sys->s_frame.origin =
[[p_vout->p_sys->o_vout_view voutWindow]frame].origin;
p_vout->p_sys->b_saved_frame = true;
}
[p_vout->p_sys->o_vout_view closeVout];
#define o_glview p_vout->p_sys->o_glview
o_glview = [[VLCGLView alloc] initWithVout: p_vout];
[o_glview autorelease];
if( p_vout->p_sys->b_saved_frame )
{
id old_vout = p_vout->p_sys->o_vout_view;
p_vout->p_sys->o_vout_view = [[VLCVoutView voutView: p_vout
subView: o_glview
frame: &p_vout->p_sys->s_frame] retain];
[old_vout release];
}
else
{
id old_vout = p_vout->p_sys->o_vout_view;
p_vout->p_sys->o_vout_view = [[VLCVoutView voutView: p_vout
subView: o_glview frame: nil] retain];
[old_vout release];
}
#undef o_glview
}
- (id) initWithVout: (vout_thread_t *) vout
{
/* Must be called from main thread:
* "The NSView class is generally thread-safe, with a few exceptions. You
* should create, destroy, resize, move, and perform other operations on NSView
* objects only from the main thread of an application. Drawing from secondary
* threads is thread-safe as long as you bracket drawing calls with calls to
* lockFocusIfCanDraw and unlockFocus." Cocoa Thread Safety */
p_vout = vout;
NSOpenGLPixelFormatAttribute attribs[] =
{
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAAccelerated,
NSOpenGLPFANoRecovery,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAWindow,
0
};
NSOpenGLPixelFormat * fmt = [[NSOpenGLPixelFormat alloc]
initWithAttributes: attribs];
if( !fmt )
{
msg_Warn( p_vout, "could not create OpenGL video output" );
return nil;
}
self = [super initWithFrame: NSMakeRect(0,0,10,10) pixelFormat: fmt];
[fmt release];
[[self openGLContext] makeCurrentContext];
[[self openGLContext] update];
/* Swap buffers only during the vertical retrace of the monitor.
http://developer.apple.com/documentation/GraphicsImaging/
Conceptual/OpenGL/chap5/chapter_5_section_44.html */
GLint params[] = { 1 };
CGLSetParameter( CGLGetCurrentContext(), kCGLCPSwapInterval, params );
return self;
}
- (BOOL)mouseDownCanMoveWindow
{
return YES;
}
- (void) reshape
{
int x, y;
Lock( p_vout );
NSRect bounds = [self bounds];
if( var_GetBool( p_vout, "macosx-stretch" ) )
{
x = bounds.size.width;
y = bounds.size.height;
}
else if( bounds.size.height * p_vout->fmt_in.i_visible_width *
p_vout->fmt_in.i_sar_num <
bounds.size.width * p_vout->fmt_in.i_visible_height *
p_vout->fmt_in.i_sar_den )
{
x = ( bounds.size.height * p_vout->fmt_in.i_visible_width *
p_vout->fmt_in.i_sar_num ) /
( p_vout->fmt_in.i_visible_height * p_vout->fmt_in.i_sar_den);
y = bounds.size.height;
}
else
{
x = bounds.size.width;
y = ( bounds.size.width * p_vout->fmt_in.i_visible_height *
p_vout->fmt_in.i_sar_den) /
( p_vout->fmt_in.i_visible_width * p_vout->fmt_in.i_sar_num );
}
glViewport( ( bounds.size.width - x ) / 2,
( bounds.size.height - y ) / 2, x, y );
[super reshape];
if( p_vout->p_sys->b_got_frame )
{
/* Ask the opengl module to redraw */
vout_thread_t * p_parent;
p_parent = (vout_thread_t *) p_vout->p_parent;
Unlock( p_vout );
if( p_parent && p_parent->pf_display )
{
p_parent->pf_display( p_parent, NULL );
}
}
else
{
glClear( GL_COLOR_BUFFER_BIT );
Unlock( p_vout );
}
}
- (void) update
{
Lock( p_vout );
[super update];
Unlock( p_vout );
}
- (void) drawRect: (NSRect) rect
{
Lock( p_vout );
[[p_vout->p_sys->o_glview openGLContext] flushBuffer];
[super drawRect:rect];
Unlock( p_vout );
}
- (void) renewGState
{
NSWindow *window = [self window];
if ([window respondsToSelector:@selector(disableScreenUpdatesUntilFlush)])
{
[window disableScreenUpdatesUntilFlush];
}
[super renewGState];
}
@end
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment