Mercurial > mplayer.hg
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 |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28306
diff
changeset
|
1 /* |
29210 | 2 * CoreVideo video output driver |
28836 | 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 | 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 | 25 #include <CoreServices/CoreServices.h> |
26 //special workaround for Apple bug #6267445 | |
27 //(OSServices Power API disabled in OSServices.h for 64bit systems) | |
28 #ifndef __POWER__ | |
29 #include <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h> | |
30 #endif | |
15289 | 31 |
32 //MPLAYER | |
33 #include "config.h" | |
34 #include "video_out.h" | |
35 #include "aspect.h" | |
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 | 38 |
39 #include "input/input.h" | |
40 #include "input/mouse.h" | |
41 | |
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 | 44 |
15731 | 45 static float winAlpha = 1; |
15289 | 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 | 51 |
35092 | 52 void (*vo_osx_redraw_func)(void); |
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 | 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 | 72 } |
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 | 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 | 102 void vo_osx_swap_buffers(void) |
103 { | |
104 [oglv->glContext flushBuffer]; | |
105 } | |
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 | 109 { |
35074
3fb18ad99003
Deprecate corevideo device_id in favour of -xineramascreen.
reimar
parents:
35073
diff
changeset
|
110 int screen_id = xinerama_screen; |
35073 | 111 NSArray *screen_array = [NSScreen screens]; |
35072 | 112 NSScreen *screen_handle; |
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 | 115 if(screen_id >= (int)[screen_array count]) |
15728 | 116 { |
29210 | 117 mp_msg(MSGT_VO, MSGL_INFO, "[vo_corevideo] Device ID %d does not exist, falling back to main device\n", screen_id); |
28306 | 118 screen_id = -1; |
15728 | 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 | 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 | 128 xinerama_x = screen_frame.origin.x; |
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 | 133 - (void) preinit |
15289 | 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 | 153 //init menu |
154 [self initMenu]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
155 |
15726 | 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 | 158 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask |
159 backing:NSBackingStoreBuffered defer:NO]; | |
160 | |
16144 | 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 | 165 [window setAcceptsMouseMovedEvents:YES]; |
31742 | 166 [window setTitle:@"MPlayer - The Movie Player"]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
167 |
15855 | 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 | 177 } |
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 | 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 | 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 | 190 vo_dwidth = width *= self->winSizeMult; |
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 | 193 //config window |
30001 | 194 [window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)]; |
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 | 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 | 202 [window setFrameTopLeftPoint:NSMakePoint( |
35071 | 203 vo_dx, |
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 | 208 [self rootwin]; |
15726 | 209 |
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 | 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 | 218 } |
219 | |
35092 | 220 - (void) drawRect: (NSRect *) bounds |
221 { | |
222 if (vo_osx_redraw_func) vo_osx_redraw_func(); | |
223 } | |
224 | |
35091 | 225 - (void)reshape |
226 { | |
227 NSRect frame = [self frame]; | |
228 vo_dwidth = frame.size.width; | |
229 vo_dheight = frame.size.height; | |
230 event_flags |= VO_EVENT_RESIZE; | |
231 } | |
232 | |
15289 | 233 /* |
15570 | 234 Init Menu |
235 */ | |
236 - (void)initMenu | |
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 | 239 NSMenu *menu, *aspectMenu; |
15570 | 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 | 252 |
253 //Create Movie Menu | |
254 menu = [[NSMenu alloc] initWithTitle:@"Movie"]; | |
255 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem]; | |
256 kHalfScreenCmd = menuItem; | |
257 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem]; | |
258 kNormalScreenCmd = menuItem; | |
259 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem]; | |
260 kDoubleScreenCmd = menuItem; | |
261 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem]; | |
262 kFullScreenCmd = menuItem; | |
31738 | 263 menuItem = [NSMenuItem separatorItem]; [menu addItem:menuItem]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
264 |
31742 | 265 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"]; |
266 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
267 if(vo_keepaspect) [menuItem setState:NSOnState]; | |
268 kKeepAspectCmd = menuItem; | |
269 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
270 if(vo_panscan) [menuItem setState:NSOnState]; | |
271 kPanScanCmd = menuItem; | |
272 menuItem = [NSMenuItem separatorItem]; [aspectMenu addItem:menuItem]; | |
273 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
274 kAspectOrgCmd = menuItem; | |
275 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
276 kAspectFullCmd = menuItem; | |
277 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
278 kAspectWideCmd = menuItem; | |
279 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""]; | |
280 [menuItem setSubmenu:aspectMenu]; | |
281 [menu addItem:menuItem]; | |
282 [aspectMenu release]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
283 |
15570 | 284 //Add to menubar |
285 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""]; | |
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 | 289 //Create Window Menu |
290 menu = [[NSMenu alloc] initWithTitle:@"Window"]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
291 |
15570 | 292 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem]; |
293 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem]; | |
294 | |
295 //Add to menubar | |
296 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; | |
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 | 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 | 302 [menu release]; |
303 [menuItem release]; | |
304 } | |
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 | 324 /* |
325 Menu Action | |
326 */ | |
327 - (void)menuAction:(id)sender | |
328 { | |
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 | 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 | 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 | 335 if(sender == kFullScreenCmd) |
336 { | |
31736 | 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 | 339 } |
340 | |
341 if(sender == kKeepAspectCmd) | |
342 { | |
31736 | 343 vo_keepaspect = !vo_keepaspect; |
15570 | 344 if(vo_keepaspect) |
345 [kKeepAspectCmd setState:NSOnState]; | |
346 else | |
347 [kKeepAspectCmd setState:NSOffState]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
348 |
15909 | 349 [self reshape]; |
15570 | 350 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
351 |
15570 | 352 if(sender == kPanScanCmd) |
353 { | |
31736 | 354 vo_panscan = !vo_panscan; |
15570 | 355 if(vo_panscan) |
356 [kPanScanCmd setState:NSOnState]; | |
357 else | |
358 [kPanScanCmd setState:NSOffState]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
359 |
35069 | 360 panscan_calc(); |
15570 | 361 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
362 |
15570 | 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 | 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 | 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 | 371 } |
372 | |
373 /* | |
15289 | 374 Toggle Fullscreen |
375 */ | |
376 - (void) fullscreen: (BOOL) animate | |
377 { | |
378 static NSRect old_frame; | |
379 static NSRect old_view_frame; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
380 |
15573 | 381 panscan_calc(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
382 |
15289 | 383 //go fullscreen |
384 if(vo_fs) | |
385 { | |
35082
6d8be70115a8
Remove local variables that (except for very brief moments before
reimar
parents:
35081
diff
changeset
|
386 if(!vo_rootwin) |
15327 | 387 { |
15882 | 388 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar); |
18057 | 389 CGDisplayHideCursor(kCGDirectMainDisplay); |
15327 | 390 mouseHide = YES; |
391 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
392 |
15289 | 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 | 395 |
35072 | 396 [window setFrame:NSMakeRect(xinerama_x, xinerama_y, vo_screenwidth, vo_screenheight) display:YES animate:animate]; //zoom-in window with nice useless sfx |
15289 | 397 old_view_frame = [self bounds]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
398 |
35072 | 399 [self setFrame:NSMakeRect(0, 0, vo_screenwidth, vo_screenheight)]; |
15289 | 400 [self setNeedsDisplay:YES]; |
401 [window setHasShadow:NO]; | |
402 } | |
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 | 407 CGDisplayShowCursor(kCGDirectMainDisplay); |
15289 | 408 mouseHide = NO; |
409 | |
410 //revert window to previous setting | |
411 [self setFrame:old_view_frame]; | |
412 [self setNeedsDisplay:YES]; | |
16081
72c352edce8f
restore window shadow when quitting fullscreen mode
nplourde
parents:
15909
diff
changeset
|
413 [window setHasShadow:YES]; |
15289 | 414 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx |
415 } | |
416 } | |
417 | |
418 /* | |
419 Toggle ontop | |
420 */ | |
421 - (void) ontop | |
422 { | |
15320 | 423 if(vo_ontop) |
424 { | |
425 [window setLevel:NSScreenSaverWindowLevel]; | |
426 } | |
427 else | |
428 { | |
429 [window setLevel:NSNormalWindowLevel]; | |
430 } | |
15289 | 431 } |
432 | |
433 /* | |
15327 | 434 Toggle rootwin |
435 */ | |
436 - (void) rootwin | |
437 { | |
438 if(vo_rootwin) | |
439 { | |
440 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)]; | |
441 [window orderBack:self]; | |
442 } | |
443 else | |
444 { | |
445 [window setLevel:NSNormalWindowLevel]; | |
446 } | |
447 } | |
448 | |
449 /* | |
15289 | 450 Check event for new event |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
451 */ |
35091 | 452 - (int) check_events |
15289 | 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 | 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 | 478 if (event == nil) |
35091 | 479 return event_flags; |
15289 | 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 | 482 // on Leopard, we have trouble to get the play window automatically focused |
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 | 491 return event_flags; |
15289 | 492 } |
493 | |
494 /* | |
15731 | 495 From NSView, respond to key equivalents. |
496 */ | |
497 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent | |
498 { | |
499 switch([theEvent keyCode]) | |
31742 | 500 { |
15731 | 501 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES; |
502 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES; | |
31742 | 503 } |
15731 | 504 return NO; |
505 } | |
506 | |
507 /* | |
15289 | 508 Process key event |
509 */ | |
510 - (void) keyDown: (NSEvent *) theEvent | |
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 | 514 mplayer_put_key(key); |
515 } | |
516 | |
517 /* | |
518 Process mouse button event | |
519 */ | |
520 - (void) mouseMoved: (NSEvent *) theEvent | |
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 | 523 { |
18057 | 524 CGDisplayShowCursor(kCGDirectMainDisplay); |
15289 | 525 mouseHide = NO; |
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 | 528 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil]; |
35079 | 529 if ([self mouse:p inRect:[self frame]]) { |
530 vo_mouse_movement(p.x, [self frame].size.height - p.y); | |
25446 | 531 } |
532 } | |
15289 | 533 } |
534 | |
535 - (void) mouseDown: (NSEvent *) theEvent | |
536 { | |
537 [self mouseEvent: theEvent]; | |
538 } | |
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 | 545 - (void) rightMouseDown: (NSEvent *) theEvent |
546 { | |
547 [self mouseEvent: theEvent]; | |
548 } | |
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 | 555 - (void) otherMouseDown: (NSEvent *) theEvent |
556 { | |
557 [self mouseEvent: theEvent]; | |
558 } | |
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 | 565 - (void) scrollWheel: (NSEvent *) theEvent |
566 { | |
567 if([theEvent deltaY] > 0) | |
568 mplayer_put_key(MOUSE_BTN3); | |
569 else | |
570 mplayer_put_key(MOUSE_BTN4); | |
571 } | |
572 | |
573 - (void) mouseEvent: (NSEvent *) theEvent | |
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 | 577 int buttonNumber = [theEvent buttonNumber]; |
578 // Fix to mplayer defined button order: left, middle, right | |
579 if (buttonNumber == 1) | |
580 buttonNumber = 2; | |
25423 | 581 else if (buttonNumber == 2) |
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 | 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 | 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 | 596 } |
597 } | |
598 | |
599 /* | |
600 NSResponder | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
601 */ |
15289 | 602 - (BOOL) acceptsFirstResponder |
603 { | |
604 return YES; | |
605 } | |
606 | |
607 - (BOOL) becomeFirstResponder | |
608 { | |
609 return YES; | |
610 } | |
611 | |
612 - (BOOL) resignFirstResponder | |
613 { | |
614 return YES; | |
615 } | |
15325 | 616 |
31756
8e043273075d
Change window-closing handling so it works properly if the
reimar
parents:
31745
diff
changeset
|
617 - (BOOL)windowShouldClose:(id)sender |
15325 | 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 | 624 } |
31758 | 625 |
626 - (void)handleQuitEvent:(NSAppleEventDescriptor*)e withReplyEvent:(NSAppleEventDescriptor*)r | |
627 { | |
628 mplayer_put_key(KEY_CLOSE_WIN); | |
629 } | |
15325 | 630 @end |