annotate libvo/vo_macosx.m @ 26234:f0788169e503

Ignore if we fail to get disc key, fixes playback of one of my DVDs which claims to be scrambled but actually is not, and always allows to fallback to cached keys.
author reimar
date Fri, 21 Mar 2008 12:31:47 +0000
parents a77c438fedf7
children 46f0b4d34fa1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
2 vo_macosx.m
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
3 by Nicolas Plourde <nicolasplourde@gmail.com>
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
4
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
5 MPlayer Mac OSX video out module.
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
6 Copyright (c) Nicolas Plourde - 2005
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
7 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
8
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
9 #import "vo_macosx.h"
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
10 #include <sys/types.h>
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
11 #include <sys/ipc.h>
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
12 #include <sys/shm.h>
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
13
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
14 //MPLAYER
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
15 #include "config.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
16 #include "fastmemcpy.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
17 #include "video_out.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
18 #include "video_out_internal.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
19 #include "aspect.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
20 #include "mp_msg.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
21 #include "m_option.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
22
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
23 #include "input/input.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
24 #include "input/mouse.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
25
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
26 #include "osdep/keycodes.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
27
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
28 //Cocoa
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
29 NSDistantObject *mplayerosxProxy;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
30 id <MPlayerOSXVOProto> mplayerosxProto;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
31 MPlayerOpenGLView *mpGLView;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
32 NSAutoreleasePool *autoreleasepool;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
33 OSType pixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
34
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
35 //shared memory
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
36 int shm_id;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
37 struct shmid_ds shm_desc;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
38 BOOL shared_buffer = false;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
39
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
40 //Screen
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
41 int screen_id;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
42 BOOL screen_force;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
43 NSRect screen_frame;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
44 NSScreen *screen_handle;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
45 NSArray *screen_array;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
46
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
47 //image
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
48 unsigned char *image_data;
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
49 // For double buffering
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
50 static uint8_t image_page = 0;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
51 static unsigned char *image_datas[2];
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
52
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
53 static uint32_t image_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
54 static uint32_t image_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
55 static uint32_t image_depth;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
56 static uint32_t image_bytes;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
57 static uint32_t image_format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
58
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
59 //vo
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
60 static int isFullscreen;
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
61 static int isOntop;
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
62 static int isRootwin;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
63 extern float monitor_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
64 extern float movie_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
65 static float old_movie_aspect;
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
66 extern int enable_mouse_movements;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
67
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
68 static float winAlpha = 1;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
69 static int int_pause = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
70
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
71 static BOOL isLeopardOrLater;
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
72
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
73 static vo_info_t info =
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
74 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
75 "Mac OSX Core Video",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
76 "macosx",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
77 "Nicolas Plourde <nicolas.plourde@gmail.com>",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
78 ""
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
79 };
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
80
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
81 LIBVO_EXTERN(macosx)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
82
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
83 extern void mplayer_put_key(int code);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
84 extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
85
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
86 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
87 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
88 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
89 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
90 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
91 vo_draw_alpha_rgb32(w,h,src,srca,stride,image_data+4*(y0*image_width+x0),4*image_width);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
92 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
93 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
94 vo_draw_alpha_yuy2(w,h,src,srca,stride,image_data + (x0 + y0 * image_width) * 2,image_width*2);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
95 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
96 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
97 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
98
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
99 static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
100 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
101
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
102 //init screen
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
103 screen_array = [NSScreen screens];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
104 if(screen_id < [screen_array count])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
105 {
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
106 screen_handle = [screen_array objectAtIndex:screen_id];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
107 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
108 else
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
109 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
110 mp_msg(MSGT_VO, MSGL_FATAL, "Get device error: Device ID %d do not exist, falling back to main device.\n", screen_id);
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
111 screen_handle = [screen_array objectAtIndex:0];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
112 screen_id = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
113 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
114 screen_frame = [screen_handle frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
115 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
116 vo_screenheight = screen_frame.size.height;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
117
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
118 //misc mplayer setup
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
119 image_width = width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
120 image_height = height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
121 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
122 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
123 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
124 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
125 image_depth = 32;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
126 break;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
127 case IMGFMT_YUY2:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
128 image_depth = 16;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
129 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
130 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
131 image_bytes = (image_depth + 7) / 8;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
132
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
133 if(!shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
134 {
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
135 image_data = malloc(image_width*image_height*image_bytes);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
136 image_datas[0] = image_data;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
137 if (vo_doublebuffering)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
138 image_datas[1] = malloc(image_width*image_height*image_bytes);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
139 image_page = 0;
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
140
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
141 monitor_aspect = (float)screen_frame.size.width/(float)screen_frame.size.height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
142
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
143 //set aspect
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
144 panscan_init();
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
145 aspect_save_orig(width,height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
146 aspect_save_prescale(d_width,d_height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
147 aspect_save_screenres(screen_frame.size.width, screen_frame.size.height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
148 aspect((int *)&d_width,(int *)&d_height,A_NOZOOM);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
149
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
150 movie_aspect = (float)d_width/(float)d_height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
151 old_movie_aspect = movie_aspect;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
152
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
153 vo_fs = flags & VOFLAG_FULLSCREEN;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
154
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
155 //config OpenGL View
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
156 [mpGLView config];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
157 [mpGLView reshape];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
158 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
159 else
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
160 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
161 movie_aspect = (float)d_width/(float)d_height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
162
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
163 shm_id = shmget(9849, image_width*image_height*image_bytes, IPC_CREAT | 0666);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
164 if (shm_id == -1)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
165 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
166 perror("vo_mplayer shmget: ");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
167 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
168 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
169
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
170 image_data = shmat(shm_id, NULL, 0);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
171 if (!image_data)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
172 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
173 perror("vo_mplayer shmat: ");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
174 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
175 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
176
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
177 //connnect to mplayerosx
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
178 mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:@"mplayerosx" host:nil];
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
179 if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) {
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
180 [mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
181 mplayerosxProto = (id <MPlayerOSXVOProto>)mplayerosxProxy;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
182 [mplayerosxProto startWithWidth: image_width withHeight: image_height withBytes: image_bytes withAspect:(int)(movie_aspect*100)];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
183 }
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
184 else {
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
185 [mplayerosxProxy release];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
186 mplayerosxProxy = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
187 mplayerosxProto = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
188 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
189 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
190 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
191 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
192
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
193 static void check_events(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
194 {
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
195 [mpGLView check_events];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
196 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
197
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
198 static void draw_osd(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
199 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
200 vo_draw_text(image_width, image_height, draw_alpha);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
201 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
202
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
203 static void flip_page(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
204 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
205 if(shared_buffer)
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
206 [mplayerosxProto render];
25114
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
207 else {
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
208 [mpGLView setCurrentTexture];
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
209 [mpGLView render];
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
210 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
211 image_page = 1 - image_page;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
212 image_data = image_datas[image_page];
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
213 }
25114
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
214 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
215 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
216
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
217 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
218 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
219 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
220 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
221
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
222
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
223 static int draw_frame(uint8_t *src[])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
224 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
225 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
226 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
227 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
228 case IMGFMT_RGB32:
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23381
diff changeset
229 fast_memcpy(image_data, src[0], image_width*image_height*image_bytes);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
230 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
231
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
232 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
233 memcpy_pic(image_data, src[0], image_width * 2, image_height, image_width * 2, image_width * 2);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
234 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
235 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
236
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
237 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
238 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
239
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
240 static int query_format(uint32_t format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
241 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
242 image_format = format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
243
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
244 switch(format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
245 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
246 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
247 pixelFormat = kYUVSPixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
248 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
249
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
250 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
251 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
252 pixelFormat = k32ARGBPixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
253 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
254 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
255 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
256 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
257
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
258 static void uninit(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
259 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
260 if(shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
261 {
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
262 [mplayerosxProto stop];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
263 mplayerosxProto = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
264 [mplayerosxProxy release];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
265 mplayerosxProxy = nil;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
266
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
267 if (shmdt(image_data) == -1)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
268 mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shmdt failed\n");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
269
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
270 if (shmctl(shm_id, IPC_RMID, &shm_desc) == -1)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
271 mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shmctl failed\n");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
272 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
273
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
274 SetSystemUIMode( kUIModeNormal, 0);
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
275 CGDisplayShowCursor(kCGDirectMainDisplay);
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
276
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
277 if(mpGLView)
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
278 {
25136
e029d2fcd20f Fix warning:
ulion
parents: 25121
diff changeset
279 NSAutoreleasePool *finalPool;
24742
0bef706332b5 Fix deallocate bug which sometimes causes a crash when reinitializing.
nplourde
parents: 24698
diff changeset
280 mpGLView = nil;
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
281 [autoreleasepool release];
25136
e029d2fcd20f Fix warning:
ulion
parents: 25121
diff changeset
282 finalPool = [[NSAutoreleasePool alloc] init];
25078
3efbdaab822f Let NSApp handle events when uninit to fix the delay dealloc bug of mpGLView.
ulion
parents: 24965
diff changeset
283 [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES];
3efbdaab822f Let NSApp handle events when uninit to fix the delay dealloc bug of mpGLView.
ulion
parents: 24965
diff changeset
284 [finalPool release];
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
285 }
25121
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
286 if (!shared_buffer)
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
287 {
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
288 free(image_datas[0]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
289 if (vo_doublebuffering)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
290 free(image_datas[1]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
291 image_datas[0] = NULL;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
292 image_datas[1] = NULL;
25121
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
293 image_data = NULL;
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
294 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
295 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
296
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
297 static int preinit(const char *arg)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
298 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
299 int parse_err = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
300
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
301 if(arg)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
302 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
303 char *parse_pos = (char *)&arg[0];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
304 while (parse_pos[0] && !parse_err)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
305 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
306 if (strncmp (parse_pos, "device_id=", 10) == 0)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
307 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
308 parse_pos = &parse_pos[10];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
309 screen_id = strtol(parse_pos, &parse_pos, 0);
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
310 screen_force = YES;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
311 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
312 if (strncmp (parse_pos, "shared_buffer", 13) == 0)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
313 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
314 parse_pos = &parse_pos[13];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
315 shared_buffer = YES;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
316 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
317 if (parse_pos[0] == ':') parse_pos = &parse_pos[1];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
318 else if (parse_pos[0]) parse_err = 1;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
319 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
320 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
321
15737
0c3939433cef set nsapp and setup cocoa with NSApplicationLoad
nplourde
parents: 15736
diff changeset
322 NSApplicationLoad();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
323 autoreleasepool = [[NSAutoreleasePool alloc] init];
15737
0c3939433cef set nsapp and setup cocoa with NSApplicationLoad
nplourde
parents: 15736
diff changeset
324 NSApp = [NSApplication sharedApplication];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
325 isLeopardOrLater = floor(NSAppKitVersionNumber) > 824;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
326
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
327 if(!shared_buffer)
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
328 {
17358
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
329 #if !defined (MACOSX_FINDER_SUPPORT) || !defined (HAVE_SDL)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
330 //this chunk of code is heavily based off SDL_macosx.m from SDL
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
331 //it uses an Apple private function to request foreground operation
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
332 void CPSEnableForegroundOperation(ProcessSerialNumber* psn);
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
333 ProcessSerialNumber myProc, frProc;
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
334 Boolean sameProc;
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
335
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
336 if (GetFrontProcess(&frProc) == noErr)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
337 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
338 if (GetCurrentProcess(&myProc) == noErr)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
339 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
340 if (SameProcess(&frProc, &myProc, &sameProc) == noErr && !sameProc)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
341 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
342 CPSEnableForegroundOperation(&myProc);
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
343 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
344 SetFrontProcess(&myProc);
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
345 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
346 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
347 #endif
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
348
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
349 if(!mpGLView)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
350 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
351 mpGLView = [[MPlayerOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPlayerOpenGLView defaultPixelFormat]];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
352 [mpGLView autorelease];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
353 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
354
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
355 [mpGLView display];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
356 [mpGLView preinit];
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
357 }
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
358
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
359 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
360 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
361
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
362 static int control(uint32_t request, void *data, ...)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
363 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
364 switch (request)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
365 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
366 case VOCTRL_PAUSE: return (int_pause=1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
367 case VOCTRL_RESUME: return (int_pause=0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
368 case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data));
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
369 case VOCTRL_ONTOP: vo_ontop = (!(vo_ontop)); if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
370 case VOCTRL_ROOTWIN: vo_rootwin = (!(vo_rootwin)); [mpGLView rootwin]; return VO_TRUE;
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
371 case VOCTRL_FULLSCREEN: vo_fs = (!(vo_fs)); if(!shared_buffer){ [mpGLView fullscreen: NO]; } else { [mplayerosxProto toggleFullscreen]; } return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
372 case VOCTRL_GET_PANSCAN: return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
373 case VOCTRL_SET_PANSCAN: [mpGLView panscan]; return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
374 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
375 return VO_NOTIMPL;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
376 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
377
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
378 //////////////////////////////////////////////////////////////////////////
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
379 // NSOpenGLView Subclass
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
380 //////////////////////////////////////////////////////////////////////////
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
381 @implementation MPlayerOpenGLView
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
382 - (void) preinit
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
383 {
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
384 //init menu
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
385 [self initMenu];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
386
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
387 //create window
15747
fbf14e1ab725 osx 10.3 dont like to have a window init with no size
nplourde
parents: 15737
diff changeset
388 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
389 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
390 backing:NSBackingStoreBuffered defer:NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
391
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
392 [window autorelease];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
393 [window setDelegate:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
394 [window setContentView:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
395 [window setInitialFirstResponder:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
396 [window setAcceptsMouseMovedEvents:YES];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
397 [window setTitle:@"MPlayer - The Movie Player"];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
398
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
399 isFullscreen = 0;
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
400 winSizeMult = 1;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
401 }
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
402
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
403 - (void) config
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
404 {
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
405 uint32_t d_width;
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
406 uint32_t d_height;
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
407
25137
6f2f5c2dea52 Fix warning on Leopard, tested ok on Tiger:
ulion
parents: 25136
diff changeset
408 GLint swapInterval = 1;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
409
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
410 NSRect frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
411 CVReturn error = kCVReturnSuccess;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
412
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
413 //config window
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
414 aspect((int *)&d_width, (int *)&d_height,A_NOZOOM);
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
415 frame = NSMakeRect(0, 0, d_width, d_height);
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
416 [window setContentSize: frame.size];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
417
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
418 //create OpenGL Context
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
419 glContext = [[NSOpenGLContext alloc] initWithFormat:[NSOpenGLView defaultPixelFormat] shareContext:nil];
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
420
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
421 [self setOpenGLContext:glContext];
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
422 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
423 [glContext setView:self];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
424 [glContext makeCurrentContext];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
425
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
426 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[0], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[0]);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
427 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
428 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create Pixel Buffer(%d)\n", error);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
429 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
430 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[1], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[1]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
431 if(error != kCVReturnSuccess)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
432 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create Pixel Double Buffer(%d)\n", error);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
433 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
434
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
435 error = CVOpenGLTextureCacheCreate(NULL, 0, [glContext CGLContextObj], [[self pixelFormat] CGLPixelFormatObj], 0, &textureCache);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
436 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
437 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture Cache(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
438
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
439 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
440 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
441 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
442
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
443 //show window
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
444 [window center];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
445 [window makeKeyAndOrderFront:mpGLView];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
446
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
447 if(vo_rootwin)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
448 [mpGLView rootwin];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
449
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
450 if(vo_fs)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
451 [mpGLView fullscreen: NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
452
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
453 if(vo_ontop)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
454 [mpGLView ontop];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
455 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
456
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
457 /*
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
458 Init Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
459 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
460 - (void)initMenu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
461 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
462 NSMenu *menu, *aspectMenu;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
463 NSMenuItem *menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
464
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
465 [NSApp setMainMenu:[[NSMenu alloc] init]];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
466
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
467 //Create Movie Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
468 menu = [[NSMenu alloc] initWithTitle:@"Movie"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
469 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
470 kHalfScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
471 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
472 kNormalScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
473 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
474 kDoubleScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
475 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
476 kFullScreenCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
477 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [menu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
478
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
479 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
480 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
481 if(vo_keepaspect) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
482 kKeepAspectCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
483 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
484 if(vo_panscan) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
485 kPanScanCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
486 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [aspectMenu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
487 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
488 kAspectOrgCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
489 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
490 kAspectFullCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
491 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
492 kAspectWideCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
493 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
494 [menuItem setSubmenu:aspectMenu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
495 [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
496 [aspectMenu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
497
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
498 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
499 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
500 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
501 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
502
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
503 //Create Window Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
504 menu = [[NSMenu alloc] initWithTitle:@"Window"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
505
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
506 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
507 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
508
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
509 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
510 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
511 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
512 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
513 [NSApp setWindowsMenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
514
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
515 [menu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
516 [menuItem release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
517 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
518
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
519 /*
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
520 Menu Action
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
521 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
522 - (void)menuAction:(id)sender
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
523 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
524 uint32_t d_width;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
525 uint32_t d_height;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
526 NSRect frame;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
527
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
528 aspect((int *)&d_width, (int *)&d_height,A_NOZOOM);
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
529
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
530 if(sender == kQuitCmd)
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
531 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
532 mplayer_put_key(KEY_ESC);
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
533 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
534
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
535 if(sender == kHalfScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
536 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
537 if(isFullscreen) {
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
538 vo_fs = (!(vo_fs)); [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
539 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
540
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
541 winSizeMult = 0.5;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
542 frame.size.width = (d_width*winSizeMult);
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
543 frame.size.height = ((d_width/movie_aspect)*winSizeMult);
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
544 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
545 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
546 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
547 if(sender == kNormalScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
548 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
549 if(isFullscreen) {
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
550 vo_fs = (!(vo_fs)); [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
551 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
552
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
553 winSizeMult = 1;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
554 frame.size.width = d_width;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
555 frame.size.height = d_width/movie_aspect;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
556 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
557 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
558 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
559 if(sender == kDoubleScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
560 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
561 if(isFullscreen) {
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
562 vo_fs = (!(vo_fs)); [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
563 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
564
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
565 winSizeMult = 2;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
566 frame.size.width = d_width*winSizeMult;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
567 frame.size.height = (d_width/movie_aspect)*winSizeMult;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
568 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
569 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
570 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
571 if(sender == kFullScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
572 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
573 vo_fs = (!(vo_fs));
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
574 [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
575 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
576
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
577 if(sender == kKeepAspectCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
578 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
579 vo_keepaspect = (!(vo_keepaspect));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
580 if(vo_keepaspect)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
581 [kKeepAspectCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
582 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
583 [kKeepAspectCmd setState:NSOffState];
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
584
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
585 [self reshape];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
586 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
587
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
588 if(sender == kPanScanCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
589 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
590 vo_panscan = (!(vo_panscan));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
591 if(vo_panscan)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
592 [kPanScanCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
593 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
594 [kPanScanCmd setState:NSOffState];
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
595
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
596 [self panscan];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
597 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
598
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
599 if(sender == kAspectOrgCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
600 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
601 movie_aspect = old_movie_aspect;
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
602
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
603 if(isFullscreen)
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
604 {
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
605 [self reshape];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
606 }
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
607 else
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
608 {
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
609 frame.size.width = d_width*winSizeMult;
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
610 frame.size.height = (d_width/movie_aspect)*winSizeMult;
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
611 [window setContentSize: frame.size];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
612 [self reshape];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
613 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
614 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
615
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
616 if(sender == kAspectFullCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
617 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
618 movie_aspect = 4.0f/3.0f;
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
619
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
620 if(isFullscreen)
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
621 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
622 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
623 }
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
624 else
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
625 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
626 frame.size.width = d_width*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
627 frame.size.height = (d_width/movie_aspect)*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
628 [window setContentSize: frame.size];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
629 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
630 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
631 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
632
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
633 if(sender == kAspectWideCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
634 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
635 movie_aspect = 16.0f/9.0f;
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
636
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
637 if(isFullscreen)
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
638 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
639 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
640 }
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
641 else
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
642 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
643 frame.size.width = d_width*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
644 frame.size.height = (d_width/movie_aspect)*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
645 [window setContentSize: frame.size];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
646 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
647 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
648 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
649 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
650
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
651 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
652 Setup OpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
653 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
654 - (void)prepareOpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
655 {
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
656 glEnable(GL_BLEND);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
657 glDisable(GL_DEPTH_TEST);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
658 glDepthMask(GL_FALSE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
659 glDisable(GL_CULL_FACE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
660 [self reshape];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
661 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
662
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
663 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
664 reshape OpenGL viewport
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
665 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
666 - (void)reshape
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
667 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
668 uint32_t d_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
669 uint32_t d_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
670 float aspectX;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
671 float aspectY;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
672 int padding = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
673
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
674 NSRect frame = [self frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
675
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
676 glViewport(0, 0, frame.size.width, frame.size.height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
677 glMatrixMode(GL_PROJECTION);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
678 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
679 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
680 glMatrixMode(GL_MODELVIEW);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
681 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
682
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
683 //set texture frame
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
684 if(vo_keepaspect)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
685 {
15571
ab43da229a76 fix signess warning
nplourde
parents: 15570
diff changeset
686 aspect( (int *)&d_width, (int *)&d_height, A_NOZOOM);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
687 d_height = ((float)d_width/movie_aspect);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
688
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
689 aspectX = (float)((float)frame.size.width/(float)d_width);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
690 aspectY = (float)((float)(frame.size.height)/(float)d_height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
691
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
692 if((d_height*aspectX)>(frame.size.height))
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
693 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
694 padding = (frame.size.width - d_width*aspectY)/2;
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
695 textureFrame = NSMakeRect(padding, 0, d_width*aspectY, d_height*aspectY);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
696 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
697 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
698 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
699 padding = ((frame.size.height) - d_height*aspectX)/2;
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
700 textureFrame = NSMakeRect(0, padding, d_width*aspectX, d_height*aspectX);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
701 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
702 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
703 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
704 {
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
705 textureFrame = frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
706 }
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
707 vo_dwidth = textureFrame.size.width;
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
708 vo_dheight = textureFrame.size.height;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
709 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
710
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
711 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
712 Render frame
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
713 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
714 - (void) render
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
715 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
716 int curTime;
24953
aca7d0259d90 Fix the prevent system idle code. Original code also works, but not as expected.
ulion
parents: 24742
diff changeset
717 static int lastTime = 0;
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
718
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
719 glClear(GL_COLOR_BUFFER_BIT);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
720
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
721 glEnable(CVOpenGLTextureGetTarget(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
722 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
723
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
724 glColor3f(1,1,1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
725 glBegin(GL_QUADS);
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
726 glTexCoord2f(upperLeft[0], upperLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
727 glTexCoord2f(lowerLeft[0], lowerLeft[1]); glVertex2i(textureFrame.origin.x-(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1));
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
728 glTexCoord2f(lowerRight[0], lowerRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1));
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
729 glTexCoord2f(upperRight[0], upperRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
730 glEnd();
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
731 glDisable(CVOpenGLTextureGetTarget(texture));
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
732
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
733 //render resize box
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
734 if(!isFullscreen)
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
735 {
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
736 NSRect frame = [self frame];
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
737
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
738 glBegin(GL_LINES);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
739 glColor4f(0.2, 0.2, 0.2, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
740 glVertex2i(frame.size.width-1, frame.size.height-1); glVertex2i(frame.size.width-1, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
741 glVertex2i(frame.size.width-1, frame.size.height-5); glVertex2i(frame.size.width-5, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
742 glVertex2i(frame.size.width-1, frame.size.height-9); glVertex2i(frame.size.width-9, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
743
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
744 glColor4f(0.4, 0.4, 0.4, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
745 glVertex2i(frame.size.width-1, frame.size.height-2); glVertex2i(frame.size.width-2, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
746 glVertex2i(frame.size.width-1, frame.size.height-6); glVertex2i(frame.size.width-6, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
747 glVertex2i(frame.size.width-1, frame.size.height-10); glVertex2i(frame.size.width-10, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
748
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
749 glColor4f(0.6, 0.6, 0.6, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
750 glVertex2i(frame.size.width-1, frame.size.height-3); glVertex2i(frame.size.width-3, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
751 glVertex2i(frame.size.width-1, frame.size.height-7); glVertex2i(frame.size.width-7, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
752 glVertex2i(frame.size.width-1, frame.size.height-11); glVertex2i(frame.size.width-11, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
753 glEnd();
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
754 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
755
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
756 glFlush();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
757
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
758 //auto hide mouse cursor and futur on-screen control?
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
759 if(isFullscreen && !mouseHide && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
760 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
761 int curTime = TickCount()/60;
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
762 static int lastTime = 0;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
763
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
764 if( ((curTime - lastTime) >= 5) || (lastTime == 0) )
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
765 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
766 CGDisplayHideCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
767 mouseHide = YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
768 lastTime = curTime;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
769 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
770 }
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
771
17725
d7dd016cb97a update activity every 30 sec
nplourde
parents: 17546
diff changeset
772 //update activity every 30 seconds to prevent
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
773 //screensaver from starting up.
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
774 curTime = TickCount()/60;
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
775
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
776 if( ((curTime - lastTime) >= 30) || (lastTime == 0) )
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
777 {
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
778 UpdateSystemActivity(UsrActivity);
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
779 lastTime = curTime;
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
780 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
781 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
782
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
783 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
784 Create OpenGL texture from current frame & set texco
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
785 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
786 - (void) setCurrentTexture
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
787 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
788 CVReturn error = kCVReturnSuccess;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
789
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
790 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
791 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
792 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
793
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
794 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
795 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
796
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
797 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
798 redraw win rect
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
799 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
800 - (void) drawRect: (NSRect *) bounds
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
801 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
802 [self render];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
803 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
804
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
805 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
806 Toggle Fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
807 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
808 - (void) fullscreen: (BOOL) animate
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
809 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
810 static NSRect old_frame;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
811 static NSRect old_view_frame;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
812
15573
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
813 panscan_calc();
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
814
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
815 //go fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
816 if(vo_fs)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
817 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
818 if(!isRootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
819 {
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
820 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
821 CGDisplayHideCursor(kCGDirectMainDisplay);
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
822 mouseHide = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
823 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
824
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
825 old_frame = [window frame]; //save main window size & position
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
826 if(screen_force)
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
827 screen_frame = [screen_handle frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
828 else {
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
829 screen_frame = [[window screen] frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
830 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
831 vo_screenheight = screen_frame.size.height;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
832 }
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
833
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
834 [window setFrame:screen_frame display:YES animate:animate]; //zoom-in window with nice useless sfx
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
835 old_view_frame = [self bounds];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
836
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
837 //fix origin for multi screen setup
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
838 screen_frame.origin.x = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
839 screen_frame.origin.y = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
840 [self setFrame:screen_frame];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
841 [self setNeedsDisplay:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
842 [window setHasShadow:NO];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
843 isFullscreen = 1;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
844 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
845 else
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
846 {
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
847 SetSystemUIMode( kUIModeNormal, 0);
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
848
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
849 isFullscreen = 0;
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
850 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
851 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
852
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
853 //revert window to previous setting
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
854 [self setFrame:old_view_frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
855 [self setNeedsDisplay:YES];
16081
72c352edce8f restore window shadow when quitting fullscreen mode
nplourde
parents: 15909
diff changeset
856 [window setHasShadow:YES];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
857 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
858 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
859 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
860
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
861 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
862 Toggle ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
863 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
864 - (void) ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
865 {
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
866 if(vo_ontop)
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
867 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
868 [window setLevel:NSScreenSaverWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
869 isOntop = YES;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
870 }
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
871 else
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
872 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
873 [window setLevel:NSNormalWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
874 isOntop = NO;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
875 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
876 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
877
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
878 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
879 Toggle panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
880 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
881 - (void) panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
882 {
15331
7746903599b2 enable panscan
nplourde
parents: 15327
diff changeset
883 panscan_calc();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
884 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
885
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
886 /*
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
887 Toggle rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
888 */
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
889 - (void) rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
890 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
891 if(vo_rootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
892 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
893 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
894 [window orderBack:self];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
895 isRootwin = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
896 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
897 else
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
898 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
899 [window setLevel:NSNormalWindowLevel];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
900 isRootwin = NO;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
901 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
902 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
903
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
904 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
905 Check event for new event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
906 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
907 - (void) check_events
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
908 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
909 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.0001] inMode:NSEventTrackingRunLoopMode dequeue:YES];
25178
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
910 if (event == nil)
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
911 return;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
912 [NSApp sendEvent:event];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
913 // Without SDL's bootstrap code (include SDL.h in mplayer.c),
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
914 // on Leopard, we got trouble to get the play window auto focused
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
915 // when app is actived. Following code fix this problem.
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
916 #ifndef HAVE_SDL
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
917 if (isLeopardOrLater && [event type] == NSAppKitDefined
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
918 && [event subtype] == NSApplicationActivatedEventType) {
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
919 [window makeMainWindow];
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
920 [window makeKeyAndOrderFront:mpGLView];
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
921 }
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
922 #endif
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
923 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
924
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
925 /*
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
926 From NSView, respond to key equivalents.
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
927 */
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
928 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
929 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
930 switch([theEvent keyCode])
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
931 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
932 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
933 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
934 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
935 return NO;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
936 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
937
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
938 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
939 Process key event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
940 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
941 - (void) keyDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
942 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
943 unsigned int key;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
944
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
945 switch([theEvent keyCode])
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
946 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
947 case 0x34:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
948 case 0x24: key = KEY_ENTER; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
949 case 0x35: key = KEY_ESC; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
950 case 0x33: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
951 case 0x3A: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
952 case 0x3B: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
953 case 0x38: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
954 case 0x7A: key = KEY_F+1; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
955 case 0x78: key = KEY_F+2; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
956 case 0x63: key = KEY_F+3; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
957 case 0x76: key = KEY_F+4; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
958 case 0x60: key = KEY_F+5; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
959 case 0x61: key = KEY_F+6; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
960 case 0x62: key = KEY_F+7; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
961 case 0x64: key = KEY_F+8; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
962 case 0x65: key = KEY_F+9; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
963 case 0x6D: key = KEY_F+10; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
964 case 0x67: key = KEY_F+11; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
965 case 0x6F: key = KEY_F+12; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
966 case 0x72: key = KEY_INSERT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
967 case 0x75: key = KEY_DELETE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
968 case 0x73: key = KEY_HOME; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
969 case 0x77: key = KEY_END; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
970 case 0x45: key = '+'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
971 case 0x4E: key = '-'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
972 case 0x30: key = KEY_TAB; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
973 case 0x74: key = KEY_PAGE_UP; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
974 case 0x79: key = KEY_PAGE_DOWN; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
975 case 0x7B: key = KEY_LEFT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
976 case 0x7C: key = KEY_RIGHT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
977 case 0x7D: key = KEY_DOWN; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
978 case 0x7E: key = KEY_UP; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
979 case 0x43: key = '*'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
980 case 0x4B: key = '/'; break;
24107
d4adc8503dd5 100l typo: ENTER --> KPENTER
diego
parents: 24106
diff changeset
981 case 0x4C: key = KEY_KPENTER; break;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
982 case 0x41: key = KEY_KPDEC; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
983 case 0x52: key = KEY_KP0; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
984 case 0x53: key = KEY_KP1; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
985 case 0x54: key = KEY_KP2; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
986 case 0x55: key = KEY_KP3; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
987 case 0x56: key = KEY_KP4; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
988 case 0x57: key = KEY_KP5; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
989 case 0x58: key = KEY_KP6; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
990 case 0x59: key = KEY_KP7; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
991 case 0x5B: key = KEY_KP8; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
992 case 0x5C: key = KEY_KP9; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
993 default: key = *[[theEvent characters] UTF8String]; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
994 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
995 mplayer_put_key(key);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
996 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
997
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
998 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
999 Process mouse button event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1000 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1001 - (void) mouseMoved: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1002 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
1003 if(isFullscreen && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1004 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
1005 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1006 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1007 }
25468
a77c438fedf7 Do not send mouse movements events in root win mode.
ulion
parents: 25446
diff changeset
1008 if (enable_mouse_movements && !isRootwin) {
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1009 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil];
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1010 if ([self mouse:p inRect:textureFrame]) {
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1011 char cmdstr[40];
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1012 snprintf(cmdstr, sizeof(cmdstr), "set_mouse_pos %i %i",
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1013 (int)(vo_fs ? p.x : (p.x - textureFrame.origin.x)),
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1014 (int)(vo_fs ? [self frame].size.height - p.y: (NSMaxY(textureFrame) - p.y)));
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1015 mp_input_queue_cmd(mp_input_parse_cmd(cmdstr));
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1016 }
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1017 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1018 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1019
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1020 - (void) mouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1021 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1022 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1023 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1024
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1025 - (void) mouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1026 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1027 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1028 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1029
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1030 - (void) rightMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1031 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1032 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1033 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1034
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1035 - (void) rightMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1036 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1037 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1038 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1039
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1040 - (void) otherMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1041 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1042 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1043 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1044
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1045 - (void) otherMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1046 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1047 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1048 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1049
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1050 - (void) scrollWheel: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1051 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1052 if([theEvent deltaY] > 0)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1053 mplayer_put_key(MOUSE_BTN3);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1054 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1055 mplayer_put_key(MOUSE_BTN4);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1056 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1057
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1058 - (void) mouseEvent: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1059 {
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1060 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
1061 {
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1062 int buttonNumber = [theEvent buttonNumber];
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1063 // Fix to mplayer defined button order: left, middle, right
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1064 if (buttonNumber == 1)
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1065 buttonNumber = 2;
25423
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
1066 else if (buttonNumber == 2)
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
1067 buttonNumber = 1;
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1068 switch([theEvent type])
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1069 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1070 case NSLeftMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1071 case NSRightMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1072 case NSOtherMouseDown:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1073 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
1074 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1075 case NSLeftMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1076 case NSRightMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1077 case NSOtherMouseUp:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1078 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
1079 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1080 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1081 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1082 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1083
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1084 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1085 NSResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1086 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1087 - (BOOL) acceptsFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1088 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1089 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1090 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1091
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1092 - (BOOL) becomeFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1093 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1094 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1095 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1096
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1097 - (BOOL) resignFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1098 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1099 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1100 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1101
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1102 - (void)windowWillClose:(NSNotification *)aNotification
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1103 {
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
1104 mpGLView = NULL;
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1105 mplayer_put_key(KEY_ESC);
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1106 }
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1107 @end