annotate libvo/osx_objc_common.m @ 35418:cedb0ba2b5c6

Move the code to set guiInfo's Track, Chapter and Angle start values. Set them before checking whether there is any media opened, because with no media opened we clear the counters.
author ib
date Thu, 29 Nov 2012 14:11:03 +0000
parents 84bb4ca7c6dd
children c528b4f82e8b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
1 /*
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
2 * CoreVideo video output driver
28836
93652f17d567 cosmetics: Reformat file header.
diego
parents: 28446
diff changeset
3 * Copyright (c) 2005 Nicolas Plourde <nicolasplourde@gmail.com>
35098
84bb4ca7c6dd Add my copyright since the file now contains a relevant amount of code by me.
reimar
parents: 35094
diff changeset
4 * Copyright (c) 2012 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
28836
93652f17d567 cosmetics: Reformat file header.
diego
parents: 28446
diff changeset
5 *
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
6 * This file is part of MPlayer.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
7 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
9 * it under the terms of the GNU General Public License as published by
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
11 * (at your option) any later version.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
12 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
16 * GNU General Public License for more details.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
17 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
18 * You should have received a copy of the GNU General Public License along
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
21 */
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
22
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
23 #import "osx_objc_common.h"
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
24 #include <Carbon/Carbon.h>
27988
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
25 #include <CoreServices/CoreServices.h>
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
26 //special workaround for Apple bug #6267445
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
27 //(OSServices Power API disabled in OSServices.h for 64bit systems)
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
28 #ifndef __POWER__
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
29 #include <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h>
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
30 #endif
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
31
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
32 //MPLAYER
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
33 #include "config.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
34 #include "video_out.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
35 #include "aspect.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
36 #include "mp_msg.h"
28075
ca9badc94740 #include appropriate headers instead of locally declaring function prototypes.
diego
parents: 28051
diff changeset
37 #include "mp_fifo.h"
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
38
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
39 #include "input/input.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
40 #include "input/mouse.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
41
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
42 #include "osdep/keycodes.h"
29533
9c8f8e375823 Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents: 29272
diff changeset
43 #include "osx_common.h"
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
44
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
45 static float winAlpha = 1;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
46
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
47 static BOOL isLeopardOrLater;
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
48
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
49 static NSAutoreleasePool *autoreleasepool;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
50 static MPCommonOpenGLView *oglv;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
51
35092
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
52 void (*vo_osx_redraw_func)(void);
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
53
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
54 int vo_osx_init(void)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
55 {
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
56 autoreleasepool = [[NSAutoreleasePool alloc] init];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
57 oglv = [[MPCommonOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPCommonOpenGLView defaultPixelFormat]];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
58 [oglv autorelease];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
59 [oglv display];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
60 [oglv preinit];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
61 return 1;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
62 }
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
63
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
64 void vo_osx_uninit(void)
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
65 {
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
66 NSAutoreleasePool *finalPool;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
67 oglv = nil;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
68 [autoreleasepool release];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
69 finalPool = [[NSAutoreleasePool alloc] init];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
70 [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
71 [finalPool release];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
72 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
73
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
74 int vo_osx_config(uint32_t width, uint32_t height, uint32_t flags)
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
75 {
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
76 [oglv config:width:height:flags];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
77 return 1;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
78 }
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
79
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
80 void vo_osx_ontop(void)
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
81 {
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
82 vo_ontop = !vo_ontop;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
83 [oglv ontop];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
84 }
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
85
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
86 void vo_osx_fullscreen(void)
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
87 {
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
88 vo_fs = !vo_fs;
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
89 [oglv fullscreen:YES];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
90 }
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
91
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
92 int vo_osx_check_events(void)
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
93 {
35091
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
94 return [oglv check_events];
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
95 }
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
96
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
97 void vo_osx_update_xinerama_info(void)
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
98 {
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
99 [oglv update_screen_info];
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
100 }
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
101
35094
967b0f13715c Provide a swap buffer function for OS X.
reimar
parents: 35092
diff changeset
102 void vo_osx_swap_buffers(void)
967b0f13715c Provide a swap buffer function for OS X.
reimar
parents: 35092
diff changeset
103 {
967b0f13715c Provide a swap buffer function for OS X.
reimar
parents: 35092
diff changeset
104 [oglv->glContext flushBuffer];
967b0f13715c Provide a swap buffer function for OS X.
reimar
parents: 35092
diff changeset
105 }
967b0f13715c Provide a swap buffer function for OS X.
reimar
parents: 35092
diff changeset
106
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
107 @implementation MPCommonOpenGLView
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
108 - (void) update_screen_info
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
109 {
35074
3fb18ad99003 Deprecate corevideo device_id in favour of -xineramascreen.
reimar
parents: 35073
diff changeset
110 int screen_id = xinerama_screen;
35073
cae3fc699368 Merge declaration and initialization.
reimar
parents: 35072
diff changeset
111 NSArray *screen_array = [NSScreen screens];
35072
5d9e4777593b Avoid some more global variables.
reimar
parents: 35071
diff changeset
112 NSScreen *screen_handle;
5d9e4777593b Avoid some more global variables.
reimar
parents: 35071
diff changeset
113 NSRect screen_frame;
30000
a30debd7acd7 Add -xineramascreen support to corevideo vo. Still prefer corevideo's own device_id parameter if it's set.
adrian
parents: 29657
diff changeset
114
31740
ede53d2a08eb Simplify update_screen_info.
reimar
parents: 31739
diff changeset
115 if(screen_id >= (int)[screen_array count])
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
116 {
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
117 mp_msg(MSGT_VO, MSGL_INFO, "[vo_corevideo] Device ID %d does not exist, falling back to main device\n", screen_id);
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
118 screen_id = -1;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
119 }
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
120 if (screen_id < 0 && [self window])
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
121 screen_handle = [[self window] screen];
31741
601cd1e830fe Avoid some code duplication in update_screen_info.
reimar
parents: 31740
diff changeset
122 else
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
123 screen_handle = [screen_array objectAtIndex:(screen_id < 0 ? 0 : screen_id)];
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
124
31741
601cd1e830fe Avoid some code duplication in update_screen_info.
reimar
parents: 31740
diff changeset
125 screen_frame = [screen_handle frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
126 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
127 vo_screenheight = screen_frame.size.height;
35071
e31eb09c681d Use xinerama_x/xinerama_y.
reimar
parents: 35070
diff changeset
128 xinerama_x = screen_frame.origin.x;
e31eb09c681d Use xinerama_x/xinerama_y.
reimar
parents: 35070
diff changeset
129 xinerama_y = screen_frame.origin.y;
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
130 aspect_save_screenres(vo_screenwidth, vo_screenheight);
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
131 }
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
132
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
133 - (void) preinit
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
134 {
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
135 GLint swapInterval = 1;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
136
35085
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
137 NSApplicationLoad();
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
138 NSApp = [NSApplication sharedApplication];
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
139 isLeopardOrLater = floor(NSAppKitVersionNumber) > 824;
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
140
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
141 osx_foreground_hack();
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
142
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
143 // Install an event handler so the Quit menu entry works
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
144 // The proper way using NSApp setDelegate: and
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
145 // applicationShouldTerminate: does not work,
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
146 // probably NSApplication never installs its handler.
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
147 [[NSAppleEventManager sharedAppleEventManager]
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
148 setEventHandler:self
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
149 andSelector:@selector(handleQuitEvent:withReplyEvent:)
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
150 forEventClass:kCoreEventClass
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
151 andEventID:kAEQuitApplication];
5a9728bbb51e Move some code around in preparation for following patch.
reimar
parents: 35084
diff changeset
152
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
153 //init menu
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
154 [self initMenu];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
155
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
156 //create window
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
157 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
158 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
159 backing:NSBackingStoreBuffered defer:NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
160
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
161 [window autorelease];
35066
e91f5bd3214d Consistently use "self" instead of a global variable.
reimar
parents: 35065
diff changeset
162 [window setDelegate:self];
e91f5bd3214d Consistently use "self" instead of a global variable.
reimar
parents: 35065
diff changeset
163 [window setContentView:self];
e91f5bd3214d Consistently use "self" instead of a global variable.
reimar
parents: 35065
diff changeset
164 [window setInitialFirstResponder:self];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
165 [window setAcceptsMouseMovedEvents:YES];
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
166 [window setTitle:@"MPlayer - The Movie Player"];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
167
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
168 winSizeMult = 1;
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
169
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
170 //create OpenGL Context
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
171 glContext = [[NSOpenGLContext alloc] initWithFormat:[NSOpenGLView defaultPixelFormat] shareContext:nil];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
172
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
173 [self setOpenGLContext:glContext];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
174 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
175 [glContext setView:self];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
176 [glContext makeCurrentContext];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
177 }
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
178
29574
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
179 - (void) dealloc
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
180 {
35094
967b0f13715c Provide a swap buffer function for OS X.
reimar
parents: 35092
diff changeset
181 [glContext release];
29574
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
182 [self setOpenGLContext:nil];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
183 [super dealloc];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
184 }
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
185
35080
a10c7a7a9232 Move some code around to make splitting into vo-specific and generic code easier.
reimar
parents: 35079
diff changeset
186 - (void) config:(uint32_t)width:(uint32_t)height:(uint32_t)flags
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
187 {
35080
a10c7a7a9232 Move some code around to make splitting into vo-specific and generic code easier.
reimar
parents: 35079
diff changeset
188 config_movie_aspect((float)width/height);
a10c7a7a9232 Move some code around to make splitting into vo-specific and generic code easier.
reimar
parents: 35079
diff changeset
189
35084
3be1bcf3f16b Use "self".
reimar
parents: 35083
diff changeset
190 vo_dwidth = width *= self->winSizeMult;
3be1bcf3f16b Use "self".
reimar
parents: 35083
diff changeset
191 vo_dheight = height *= self->winSizeMult;
35080
a10c7a7a9232 Move some code around to make splitting into vo-specific and generic code easier.
reimar
parents: 35079
diff changeset
192
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
193 //config window
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
194 [window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)];
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
195
35070
ff4758e8cfba Change geometry for corevideo vo to not take dock into account.
reimar
parents: 35069
diff changeset
196 // Do not use visibleFrame - taking the menu bar and dock into account
ff4758e8cfba Change geometry for corevideo vo to not take dock into account.
reimar
parents: 35069
diff changeset
197 // would be nicer in principle, but currently only results in the window
ff4758e8cfba Change geometry for corevideo vo to not take dock into account.
reimar
parents: 35069
diff changeset
198 // being placed strangely off-center since vo_dx/vo_dy calculation is
ff4758e8cfba Change geometry for corevideo vo to not take dock into account.
reimar
parents: 35069
diff changeset
199 // not aware of it.
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
200 // Also flip vo_dy since the screen origin is in the bottom left on OSX.
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
201 [self update_screen_info];
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
202 [window setFrameTopLeftPoint:NSMakePoint(
35071
e31eb09c681d Use xinerama_x/xinerama_y.
reimar
parents: 35070
diff changeset
203 vo_dx,
e31eb09c681d Use xinerama_x/xinerama_y.
reimar
parents: 35070
diff changeset
204 2*xinerama_y + vo_screenheight - vo_dy)];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
205
35080
a10c7a7a9232 Move some code around to make splitting into vo-specific and generic code easier.
reimar
parents: 35079
diff changeset
206 vo_fs = flags & VOFLAG_FULLSCREEN;
a10c7a7a9232 Move some code around to make splitting into vo-specific and generic code easier.
reimar
parents: 35079
diff changeset
207
35083
b3a7f40618b9 Fix handling of -ontop and -rootwin.
reimar
parents: 35082
diff changeset
208 [self rootwin];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
209
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
210 if(vo_fs)
35066
e91f5bd3214d Consistently use "self" instead of a global variable.
reimar
parents: 35065
diff changeset
211 [self fullscreen: NO];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
212
35083
b3a7f40618b9 Fix handling of -ontop and -rootwin.
reimar
parents: 35082
diff changeset
213 [self ontop];
35081
65f3a403ab3e Set up things like fullscreen status etc. before showing the window.
reimar
parents: 35080
diff changeset
214
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
215 if (!(flags & VOFLAG_HIDDEN))
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
216 //show window
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
217 [window makeKeyAndOrderFront:self];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
218 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
219
35092
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
220 - (void) drawRect: (NSRect *) bounds
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
221 {
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
222 if (vo_osx_redraw_func) vo_osx_redraw_func();
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
223 }
cc8276116e95 gl: support screen redraw on OSX.
reimar
parents: 35091
diff changeset
224
35091
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
225 - (void)reshape
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
226 {
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
227 NSRect frame = [self frame];
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
228 vo_dwidth = frame.size.width;
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
229 vo_dheight = frame.size.height;
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
230 event_flags |= VO_EVENT_RESIZE;
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
231 }
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
232
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
233 /*
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
234 Init Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
235 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
236 - (void)initMenu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
237 {
35075
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
238 NSMenu *mainMenu = [[NSMenu alloc] init];
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
239 NSMenu *menu, *aspectMenu;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
240 NSMenuItem *menuItem;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
241
35075
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
242 menu = [[NSMenu alloc] init];
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
243 menuItem = [[NSMenuItem alloc] init];
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
244 [menuItem setSubmenu:menu];
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
245 [mainMenu addItem:menuItem];
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
246 // Note: setAppleMenu seems to be unnecessary from 10.6 on,
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
247 // but is needed for all earlier versions or the menu is
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
248 // messed up.
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
249 // Round-about way with performSelector used to avoid compiler
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
250 // warnings.
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
251 [NSApp performSelector:@selector(setAppleMenu:) withObject:menu];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
252
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
253 //Create Movie Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
254 menu = [[NSMenu alloc] initWithTitle:@"Movie"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
255 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
256 kHalfScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
257 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
258 kNormalScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
259 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
260 kDoubleScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
261 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
262 kFullScreenCmd = menuItem;
31738
781904280cd7 Remove pointless casts.
reimar
parents: 31737
diff changeset
263 menuItem = [NSMenuItem separatorItem]; [menu addItem:menuItem];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
264
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
265 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
266 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
267 if(vo_keepaspect) [menuItem setState:NSOnState];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
268 kKeepAspectCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
269 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
270 if(vo_panscan) [menuItem setState:NSOnState];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
271 kPanScanCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
272 menuItem = [NSMenuItem separatorItem]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
273 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
274 kAspectOrgCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
275 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
276 kAspectFullCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
277 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
278 kAspectWideCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
279 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
280 [menuItem setSubmenu:aspectMenu];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
281 [menu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
282 [aspectMenu release];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
283
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
284 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
285 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
286 [menuItem setSubmenu:menu];
35075
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
287 [mainMenu addItem:menuItem];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
288
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
289 //Create Window Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
290 menu = [[NSMenu alloc] initWithTitle:@"Window"];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
291
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
292 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
293 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
294
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
295 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
296 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
297 [menuItem setSubmenu:menu];
35075
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
298 [mainMenu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
299 [NSApp setWindowsMenu:menu];
35075
c40203dd82b7 Fix menu on newer OSX versions (at least 10.6) without breaking 10.5.
reimar
parents: 35074
diff changeset
300 [NSApp setMainMenu:mainMenu];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
301
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
302 [menu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
303 [menuItem release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
304 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
305
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
306 - (void)set_winSizeMult:(float)mult
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
307 {
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
308 NSRect frame;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
309 int d_width, d_height;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
310 aspect(&d_width, &d_height, A_NOZOOM);
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
311
35082
6d8be70115a8 Remove local variables that (except for very brief moments before
reimar
parents: 35081
diff changeset
312 if (vo_fs) {
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
313 vo_fs = !vo_fs;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
314 [self fullscreen:NO];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
315 }
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
316
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
317 winSizeMult = mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
318 frame.size.width = d_width * mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
319 frame.size.height = d_height * mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
320 [window setContentSize: frame.size];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
321 [self reshape];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
322 }
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
323
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
324 /*
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
325 Menu Action
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
326 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
327 - (void)menuAction:(id)sender
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
328 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
329 if(sender == kHalfScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
330 [self set_winSizeMult: 0.5];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
331 if(sender == kNormalScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
332 [self set_winSizeMult: 1];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
333 if(sender == kDoubleScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
334 [self set_winSizeMult: 2];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
335 if(sender == kFullScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
336 {
31736
8d6697e4838e Remove useless ().
reimar
parents: 31735
diff changeset
337 vo_fs = !vo_fs;
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
338 [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
339 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
340
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
341 if(sender == kKeepAspectCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
342 {
31736
8d6697e4838e Remove useless ().
reimar
parents: 31735
diff changeset
343 vo_keepaspect = !vo_keepaspect;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
344 if(vo_keepaspect)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
345 [kKeepAspectCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
346 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
347 [kKeepAspectCmd setState:NSOffState];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
348
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
349 [self reshape];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
350 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
351
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
352 if(sender == kPanScanCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
353 {
31736
8d6697e4838e Remove useless ().
reimar
parents: 31735
diff changeset
354 vo_panscan = !vo_panscan;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
355 if(vo_panscan)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
356 [kPanScanCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
357 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
358 [kPanScanCmd setState:NSOffState];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
359
35069
90a2e4fedfab Remove pointless one-line function.
reimar
parents: 35066
diff changeset
360 panscan_calc();
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
361 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
362
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
363 if(sender == kAspectOrgCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
364 change_movie_aspect(-1);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
365
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
366 if(sender == kAspectFullCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
367 change_movie_aspect(4.0f/3.0f);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
368
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
369 if(sender == kAspectWideCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
370 change_movie_aspect(16.0f/9.0f);
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
371 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
372
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
373 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
374 Toggle Fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
375 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
376 - (void) fullscreen: (BOOL) animate
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
377 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
378 static NSRect old_frame;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
379 static NSRect old_view_frame;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
380
15573
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
381 panscan_calc();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
382
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
383 //go fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
384 if(vo_fs)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
385 {
35082
6d8be70115a8 Remove local variables that (except for very brief moments before
reimar
parents: 35081
diff changeset
386 if(!vo_rootwin)
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
387 {
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
388 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
389 CGDisplayHideCursor(kCGDirectMainDisplay);
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
390 mouseHide = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
391 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
392
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
393 old_frame = [window frame]; //save main window size & position
35086
8848682f4035 Split out an objective-C common OS X layer, to be reused by -vo gl.
reimar
parents: 35085
diff changeset
394 [self update_screen_info];
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
395
35072
5d9e4777593b Avoid some more global variables.
reimar
parents: 35071
diff changeset
396 [window setFrame:NSMakeRect(xinerama_x, xinerama_y, vo_screenwidth, vo_screenheight) display:YES animate:animate]; //zoom-in window with nice useless sfx
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
397 old_view_frame = [self bounds];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
398
35072
5d9e4777593b Avoid some more global variables.
reimar
parents: 35071
diff changeset
399 [self setFrame:NSMakeRect(0, 0, vo_screenwidth, vo_screenheight)];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
400 [self setNeedsDisplay:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
401 [window setHasShadow:NO];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
402 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
403 else
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
404 {
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
405 SetSystemUIMode( kUIModeNormal, 0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
406
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
407 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
408 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
409
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
410 //revert window to previous setting
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
411 [self setFrame:old_view_frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
412 [self setNeedsDisplay:YES];
16081
72c352edce8f restore window shadow when quitting fullscreen mode
nplourde
parents: 15909
diff changeset
413 [window setHasShadow:YES];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
414 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
415 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
416 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
417
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
418 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
419 Toggle ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
420 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
421 - (void) ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
422 {
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
423 if(vo_ontop)
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
424 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
425 [window setLevel:NSScreenSaverWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
426 }
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
427 else
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
428 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
429 [window setLevel:NSNormalWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
430 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
431 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
432
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
433 /*
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
434 Toggle rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
435 */
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
436 - (void) rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
437 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
438 if(vo_rootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
439 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
440 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
441 [window orderBack:self];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
442 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
443 else
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
444 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
445 [window setLevel:NSNormalWindowLevel];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
446 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
447 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
448
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
449 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
450 Check event for new event
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
451 */
35091
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
452 - (int) check_events
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
453 {
31760
dc95a7191375 Move variable into the only function where it is used.
reimar
parents: 31759
diff changeset
454 NSEvent *event;
31759
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
455 int curTime = TickCount()/60;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
456
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
457 //automatically hide mouse cursor (and future on-screen control?)
35082
6d8be70115a8 Remove local variables that (except for very brief moments before
reimar
parents: 35081
diff changeset
458 if(vo_fs && !mouseHide && !vo_rootwin)
31759
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
459 {
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
460 if(curTime - lastMouseHide >= 5 || lastMouseHide == 0)
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
461 {
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
462 CGDisplayHideCursor(kCGDirectMainDisplay);
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
463 mouseHide = TRUE;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
464 lastMouseHide = curTime;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
465 }
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
466 }
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
467
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
468 //update activity every 30 seconds to prevent
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
469 //screensaver from starting up.
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
470 if(curTime - lastScreensaverUpdate >= 30 || lastScreensaverUpdate == 0)
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
471 {
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
472 UpdateSystemActivity(UsrActivity);
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
473 lastScreensaverUpdate = curTime;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
474 }
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
475
35091
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
476 event_flags = 0;
31757
83423e6b288e Simplify check_events: avoid seemingly pointless untilDate argument.
reimar
parents: 31756
diff changeset
477 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSEventTrackingRunLoopMode dequeue:YES];
25178
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
478 if (event == nil)
35091
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
479 return event_flags;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
480 [NSApp sendEvent:event];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
481 // Without SDL's bootstrap code (include SDL.h in mplayer.c),
28837
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
482 // on Leopard, we have trouble to get the play window automatically focused
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
483 // when the app is actived. The Following code fix this problem.
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 26755
diff changeset
484 #ifndef CONFIG_SDL
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
485 if (isLeopardOrLater && [event type] == NSAppKitDefined
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
486 && [event subtype] == NSApplicationActivatedEventType) {
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
487 [window makeMainWindow];
35066
e91f5bd3214d Consistently use "self" instead of a global variable.
reimar
parents: 35065
diff changeset
488 [window makeKeyAndOrderFront:self];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
489 }
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
490 #endif
35091
9fcfc9c5f038 gl OSX backend: Detect and pass on resize events
reimar
parents: 35086
diff changeset
491 return event_flags;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
492 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
493
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
494 /*
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
495 From NSView, respond to key equivalents.
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
496 */
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
497 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
498 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
499 switch([theEvent keyCode])
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
500 {
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
501 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
502 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES;
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
503 }
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
504 return NO;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
505 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
506
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
507 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
508 Process key event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
509 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
510 - (void) keyDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
511 {
29533
9c8f8e375823 Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents: 29272
diff changeset
512 int key = convert_key([theEvent keyCode], *[[theEvent characters] UTF8String]);
9c8f8e375823 Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents: 29272
diff changeset
513 if (key != -1)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
514 mplayer_put_key(key);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
515 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
516
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
517 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
518 Process mouse button event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
519 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
520 - (void) mouseMoved: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
521 {
35082
6d8be70115a8 Remove local variables that (except for very brief moments before
reimar
parents: 35081
diff changeset
522 if(vo_fs && !vo_rootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
523 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
524 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
525 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
526 }
35082
6d8be70115a8 Remove local variables that (except for very brief moments before
reimar
parents: 35081
diff changeset
527 if (enable_mouse_movements && !vo_rootwin) {
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
528 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil];
35079
d01a5c88bcc9 corevideo: Simplify mouse handling.
reimar
parents: 35075
diff changeset
529 if ([self mouse:p inRect:[self frame]]) {
d01a5c88bcc9 corevideo: Simplify mouse handling.
reimar
parents: 35075
diff changeset
530 vo_mouse_movement(p.x, [self frame].size.height - p.y);
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
531 }
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
532 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
533 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
534
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
535 - (void) mouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
536 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
537 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
538 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
539
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
540 - (void) mouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
541 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
542 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
543 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
544
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
545 - (void) rightMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
546 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
547 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
548 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
549
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
550 - (void) rightMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
551 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
552 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
553 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
554
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
555 - (void) otherMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
556 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
557 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
558 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
559
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
560 - (void) otherMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
561 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
562 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
563 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
564
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
565 - (void) scrollWheel: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
566 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
567 if([theEvent deltaY] > 0)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
568 mplayer_put_key(MOUSE_BTN3);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
569 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
570 mplayer_put_key(MOUSE_BTN4);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
571 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
572
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
573 - (void) mouseEvent: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
574 {
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
575 if ( [theEvent buttonNumber] >= 0 && [theEvent buttonNumber] <= 9 )
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
576 {
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
577 int buttonNumber = [theEvent buttonNumber];
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
578 // Fix to mplayer defined button order: left, middle, right
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
579 if (buttonNumber == 1)
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
580 buttonNumber = 2;
25423
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
581 else if (buttonNumber == 2)
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
582 buttonNumber = 1;
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
583 switch([theEvent type])
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
584 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
585 case NSLeftMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
586 case NSRightMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
587 case NSOtherMouseDown:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
588 mplayer_put_key((MOUSE_BTN0 + buttonNumber) | MP_KEY_DOWN);
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
589 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
590 case NSLeftMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
591 case NSRightMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
592 case NSOtherMouseUp:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
593 mplayer_put_key(MOUSE_BTN0 + buttonNumber);
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
594 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
595 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
596 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
597 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
598
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
599 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
600 NSResponder
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
601 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
602 - (BOOL) acceptsFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
603 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
604 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
605 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
606
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
607 - (BOOL) becomeFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
608 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
609 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
610 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
611
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
612 - (BOOL) resignFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
613 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
614 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
615 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
616
31756
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
617 - (BOOL)windowShouldClose:(id)sender
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
618 {
31735
3bb00f5abe8e Send KEY_CLOSE_WIN instead of KEY_ESC when the user requested
reimar
parents: 31049
diff changeset
619 mplayer_put_key(KEY_CLOSE_WIN);
31756
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
620 // We have to wait for MPlayer to handle this,
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
621 // otherwise we are in trouble if the
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
622 // KEY_CLOSE_WIN handler is disabled
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
623 return NO;
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
624 }
31758
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
625
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
626 - (void)handleQuitEvent:(NSAppleEventDescriptor*)e withReplyEvent:(NSAppleEventDescriptor*)r
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
627 {
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
628 mplayer_put_key(KEY_CLOSE_WIN);
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
629 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
630 @end