| | 1160 | /* Common QT and OpenGL code to catch mouse events */ |
|---|
| | 1161 | #define CATCH_MOUSE_EVENTS \ |
|---|
| | 1162 | - (BOOL)acceptsFirstResponder \ |
|---|
| | 1163 | { \ |
|---|
| | 1164 | return( YES ); \ |
|---|
| | 1165 | } \ |
|---|
| | 1166 | \ |
|---|
| | 1167 | - (BOOL)becomeFirstResponder \ |
|---|
| | 1168 | { \ |
|---|
| | 1169 | id o_window = [self window]; \ |
|---|
| | 1170 | \ |
|---|
| | 1171 | [o_window setAcceptsMouseMovedEvents: YES]; \ |
|---|
| | 1172 | return( YES ); \ |
|---|
| | 1173 | } \ |
|---|
| | 1174 | \ |
|---|
| | 1175 | - (BOOL)resignFirstResponder \ |
|---|
| | 1176 | { \ |
|---|
| | 1177 | vout_thread_t * vout; \ |
|---|
| | 1178 | id o_window = [self window]; \ |
|---|
| | 1179 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1180 | \ |
|---|
| | 1181 | [o_window setAcceptsMouseMovedEvents: NO]; \ |
|---|
| | 1182 | VLCHideMouse( vout, NO ); \ |
|---|
| | 1183 | return( YES ); \ |
|---|
| | 1184 | } \ |
|---|
| | 1185 | \ |
|---|
| | 1186 | - (void)mouseDown:(NSEvent *)o_event \ |
|---|
| | 1187 | { \ |
|---|
| | 1188 | vout_thread_t * vout; \ |
|---|
| | 1189 | id o_window = [self window]; \ |
|---|
| | 1190 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1191 | vlc_value_t val; \ |
|---|
| | 1192 | \ |
|---|
| | 1193 | switch( [o_event type] ) \ |
|---|
| | 1194 | { \ |
|---|
| | 1195 | case NSLeftMouseDown: \ |
|---|
| | 1196 | { \ |
|---|
| | 1197 | var_Get( vout, "mouse-button-down", &val ); \ |
|---|
| | 1198 | val.i_int |= 1; \ |
|---|
| | 1199 | var_Set( vout, "mouse-button-down", val ); \ |
|---|
| | 1200 | } \ |
|---|
| | 1201 | break; \ |
|---|
| | 1202 | \ |
|---|
| | 1203 | default: \ |
|---|
| | 1204 | [super mouseDown: o_event]; \ |
|---|
| | 1205 | break; \ |
|---|
| | 1206 | } \ |
|---|
| | 1207 | } \ |
|---|
| | 1208 | \ |
|---|
| | 1209 | - (void)otherMouseDown:(NSEvent *)o_event \ |
|---|
| | 1210 | { \ |
|---|
| | 1211 | vout_thread_t * vout; \ |
|---|
| | 1212 | id o_window = [self window]; \ |
|---|
| | 1213 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1214 | vlc_value_t val; \ |
|---|
| | 1215 | \ |
|---|
| | 1216 | switch( [o_event type] ) \ |
|---|
| | 1217 | { \ |
|---|
| | 1218 | case NSOtherMouseDown: \ |
|---|
| | 1219 | { \ |
|---|
| | 1220 | var_Get( vout, "mouse-button-down", &val ); \ |
|---|
| | 1221 | val.i_int |= 2; \ |
|---|
| | 1222 | var_Set( vout, "mouse-button-down", val ); \ |
|---|
| | 1223 | } \ |
|---|
| | 1224 | break; \ |
|---|
| | 1225 | \ |
|---|
| | 1226 | default: \ |
|---|
| | 1227 | [super mouseDown: o_event]; \ |
|---|
| | 1228 | break; \ |
|---|
| | 1229 | } \ |
|---|
| | 1230 | } \ |
|---|
| | 1231 | \ |
|---|
| | 1232 | - (void)rightMouseDown:(NSEvent *)o_event \ |
|---|
| | 1233 | { \ |
|---|
| | 1234 | vout_thread_t * vout; \ |
|---|
| | 1235 | id o_window = [self window]; \ |
|---|
| | 1236 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1237 | vlc_value_t val; \ |
|---|
| | 1238 | \ |
|---|
| | 1239 | switch( [o_event type] ) \ |
|---|
| | 1240 | { \ |
|---|
| | 1241 | case NSRightMouseDown: \ |
|---|
| | 1242 | { \ |
|---|
| | 1243 | var_Get( vout, "mouse-button-down", &val ); \ |
|---|
| | 1244 | val.i_int |= 4; \ |
|---|
| | 1245 | var_Set( vout, "mouse-button-down", val ); \ |
|---|
| | 1246 | } \ |
|---|
| | 1247 | break; \ |
|---|
| | 1248 | \ |
|---|
| | 1249 | default: \ |
|---|
| | 1250 | [super mouseDown: o_event]; \ |
|---|
| | 1251 | break; \ |
|---|
| | 1252 | } \ |
|---|
| | 1253 | } \ |
|---|
| | 1254 | \ |
|---|
| | 1255 | - (void)mouseUp:(NSEvent *)o_event \ |
|---|
| | 1256 | { \ |
|---|
| | 1257 | vout_thread_t * vout; \ |
|---|
| | 1258 | id o_window = [self window]; \ |
|---|
| | 1259 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1260 | vlc_value_t val; \ |
|---|
| | 1261 | \ |
|---|
| | 1262 | switch( [o_event type] ) \ |
|---|
| | 1263 | { \ |
|---|
| | 1264 | case NSLeftMouseUp: \ |
|---|
| | 1265 | { \ |
|---|
| | 1266 | vlc_value_t b_val; \ |
|---|
| | 1267 | b_val.b_bool = VLC_TRUE; \ |
|---|
| | 1268 | var_Set( vout, "mouse-clicked", b_val ); \ |
|---|
| | 1269 | \ |
|---|
| | 1270 | var_Get( vout, "mouse-button-down", &val ); \ |
|---|
| | 1271 | val.i_int &= ~1; \ |
|---|
| | 1272 | var_Set( vout, "mouse-button-down", val ); \ |
|---|
| | 1273 | } \ |
|---|
| | 1274 | break; \ |
|---|
| | 1275 | \ |
|---|
| | 1276 | default: \ |
|---|
| | 1277 | [super mouseUp: o_event]; \ |
|---|
| | 1278 | break; \ |
|---|
| | 1279 | } \ |
|---|
| | 1280 | } \ |
|---|
| | 1281 | \ |
|---|
| | 1282 | - (void)otherMouseUp:(NSEvent *)o_event \ |
|---|
| | 1283 | { \ |
|---|
| | 1284 | vout_thread_t * vout; \ |
|---|
| | 1285 | id o_window = [self window]; \ |
|---|
| | 1286 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1287 | vlc_value_t val; \ |
|---|
| | 1288 | \ |
|---|
| | 1289 | switch( [o_event type] ) \ |
|---|
| | 1290 | { \ |
|---|
| | 1291 | case NSOtherMouseUp: \ |
|---|
| | 1292 | { \ |
|---|
| | 1293 | var_Get( vout, "mouse-button-down", &val ); \ |
|---|
| | 1294 | val.i_int &= ~2; \ |
|---|
| | 1295 | var_Set( vout, "mouse-button-down", val ); \ |
|---|
| | 1296 | } \ |
|---|
| | 1297 | break; \ |
|---|
| | 1298 | \ |
|---|
| | 1299 | default: \ |
|---|
| | 1300 | [super mouseUp: o_event]; \ |
|---|
| | 1301 | break; \ |
|---|
| | 1302 | } \ |
|---|
| | 1303 | } \ |
|---|
| | 1304 | \ |
|---|
| | 1305 | - (void)rightMouseUp:(NSEvent *)o_event \ |
|---|
| | 1306 | { \ |
|---|
| | 1307 | vout_thread_t * vout; \ |
|---|
| | 1308 | id o_window = [self window]; \ |
|---|
| | 1309 | vout = (vout_thread_t *)[o_window getVout]; \ |
|---|
| | 1310 | vlc_value_t val; \ |
|---|
| | 1311 | \ |
|---|
| | 1312 | switch( [o_event type] ) \ |
|---|
| | 1313 | { \ |
|---|
| | 1314 | case NSRightMouseUp: \ |
|---|
| | 1315 | { \ |
|---|
| | 1316 | var_Get( vout, "mouse-button-down", &val ); \ |
|---|
| | 1317 | val.i_int &= ~4; \ |
|---|
| | 1318 | var_Set( vout, "mouse-button-down", val ); \ |
|---|
| | 1319 | } \ |
|---|
| | 1320 | break; \ |
|---|
| | 1321 | \ |
|---|
| | 1322 | default: \ |
|---|
| | 1323 | [super mouseUp: o_event]; \ |
|---|
| | 1324 | break; \ |
|---|
| | 1325 | } \ |
|---|
| | 1326 | } \ |
|---|
| | 1327 | \ |
|---|
| | 1328 | - (void)mouseDragged:(NSEvent *)o_event \ |
|---|
| | 1329 | { \ |
|---|
| | 1330 | [self mouseMoved:o_event]; \ |
|---|
| | 1331 | } \ |
|---|
| | 1332 | \ |
|---|
| | 1333 | - (void)otherMouseDragged:(NSEvent *)o_event \ |
|---|
| | 1334 | { \ |
|---|
| | 1335 | [self mouseMoved:o_event]; \ |
|---|
| | 1336 | } \ |
|---|
| | 1337 | \ |
|---|
| | 1338 | - (void)rightMouseDragged:(NSEvent *)o_event \ |
|---|
| | 1339 | { \ |
|---|
| | 1340 | [self mouseMoved:o_event]; \ |
|---|
| | 1341 | } |
|---|
| | 1342 | |
|---|
| 1178 | | - (BOOL)acceptsFirstResponder |
|---|
| 1179 | | { |
|---|
| 1180 | | return( YES ); |
|---|
| 1181 | | } |
|---|
| 1182 | | |
|---|
| 1183 | | - (BOOL)becomeFirstResponder |
|---|
| 1184 | | { |
|---|
| 1185 | | vout_thread_t * p_vout; |
|---|
| 1186 | | id o_window = [self window]; |
|---|
| 1187 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1188 | | |
|---|
| 1189 | | [o_window setAcceptsMouseMovedEvents: YES]; |
|---|
| 1190 | | return( YES ); |
|---|
| 1191 | | } |
|---|
| 1192 | | |
|---|
| 1193 | | - (BOOL)resignFirstResponder |
|---|
| 1194 | | { |
|---|
| 1195 | | vout_thread_t * p_vout; |
|---|
| 1196 | | id o_window = [self window]; |
|---|
| 1197 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1198 | | |
|---|
| 1199 | | [o_window setAcceptsMouseMovedEvents: NO]; |
|---|
| 1200 | | VLCHideMouse( p_vout, NO ); |
|---|
| 1201 | | return( YES ); |
|---|
| 1202 | | } |
|---|
| 1203 | | |
|---|
| 1204 | | - (void)mouseDown:(NSEvent *)o_event |
|---|
| 1205 | | { |
|---|
| 1206 | | vout_thread_t * p_vout; |
|---|
| 1207 | | id o_window = [self window]; |
|---|
| 1208 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1209 | | vlc_value_t val; |
|---|
| 1210 | | |
|---|
| 1211 | | switch( [o_event type] ) |
|---|
| 1212 | | { |
|---|
| 1213 | | case NSLeftMouseDown: |
|---|
| 1214 | | { |
|---|
| 1215 | | var_Get( p_vout, "mouse-button-down", &val ); |
|---|
| 1216 | | val.i_int |= 1; |
|---|
| 1217 | | var_Set( p_vout, "mouse-button-down", val ); |
|---|
| 1218 | | } |
|---|
| 1219 | | break; |
|---|
| 1220 | | |
|---|
| 1221 | | default: |
|---|
| 1222 | | [super mouseDown: o_event]; |
|---|
| 1223 | | break; |
|---|
| 1224 | | } |
|---|
| 1225 | | } |
|---|
| 1226 | | |
|---|
| 1227 | | - (void)otherMouseDown:(NSEvent *)o_event |
|---|
| 1228 | | { |
|---|
| 1229 | | /* This is not the the wheel button. you need to poll the |
|---|
| 1230 | | * mouseWheel event for that. other is a third, forth or fifth button */ |
|---|
| 1231 | | vout_thread_t * p_vout; |
|---|
| 1232 | | id o_window = [self window]; |
|---|
| 1233 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1234 | | vlc_value_t val; |
|---|
| 1235 | | |
|---|
| 1236 | | switch( [o_event type] ) |
|---|
| 1237 | | { |
|---|
| 1238 | | case NSOtherMouseDown: |
|---|
| 1239 | | { |
|---|
| 1240 | | var_Get( p_vout, "mouse-button-down", &val ); |
|---|
| 1241 | | val.i_int |= 2; |
|---|
| 1242 | | var_Set( p_vout, "mouse-button-down", val ); |
|---|
| 1243 | | } |
|---|
| 1244 | | break; |
|---|
| 1245 | | |
|---|
| 1246 | | default: |
|---|
| 1247 | | [super mouseDown: o_event]; |
|---|
| 1248 | | break; |
|---|
| 1249 | | } |
|---|
| 1250 | | } |
|---|
| 1251 | | |
|---|
| 1252 | | - (void)rightMouseDown:(NSEvent *)o_event |
|---|
| 1253 | | { |
|---|
| 1254 | | vout_thread_t * p_vout; |
|---|
| 1255 | | id o_window = [self window]; |
|---|
| 1256 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1257 | | vlc_value_t val; |
|---|
| 1258 | | |
|---|
| 1259 | | switch( [o_event type] ) |
|---|
| 1260 | | { |
|---|
| 1261 | | case NSRightMouseDown: |
|---|
| 1262 | | { |
|---|
| 1263 | | var_Get( p_vout, "mouse-button-down", &val ); |
|---|
| 1264 | | val.i_int |= 4; |
|---|
| 1265 | | var_Set( p_vout, "mouse-button-down", val ); |
|---|
| 1266 | | } |
|---|
| 1267 | | break; |
|---|
| 1268 | | |
|---|
| 1269 | | default: |
|---|
| 1270 | | [super mouseDown: o_event]; |
|---|
| 1271 | | break; |
|---|
| 1272 | | } |
|---|
| 1273 | | } |
|---|
| 1274 | | |
|---|
| 1275 | | - (void)mouseUp:(NSEvent *)o_event |
|---|
| 1276 | | { |
|---|
| 1277 | | vout_thread_t * p_vout; |
|---|
| 1278 | | id o_window = [self window]; |
|---|
| 1279 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1280 | | vlc_value_t val; |
|---|
| 1281 | | |
|---|
| 1282 | | switch( [o_event type] ) |
|---|
| 1283 | | { |
|---|
| 1284 | | case NSLeftMouseUp: |
|---|
| 1285 | | { |
|---|
| 1286 | | vlc_value_t b_val; |
|---|
| 1287 | | b_val.b_bool = VLC_TRUE; |
|---|
| 1288 | | var_Set( p_vout, "mouse-clicked", b_val ); |
|---|
| 1289 | | |
|---|
| 1290 | | var_Get( p_vout, "mouse-button-down", &val ); |
|---|
| 1291 | | val.i_int &= ~1; |
|---|
| 1292 | | var_Set( p_vout, "mouse-button-down", val ); |
|---|
| 1293 | | } |
|---|
| 1294 | | break; |
|---|
| 1295 | | |
|---|
| 1296 | | default: |
|---|
| 1297 | | [super mouseUp: o_event]; |
|---|
| 1298 | | break; |
|---|
| 1299 | | } |
|---|
| 1300 | | } |
|---|
| 1301 | | |
|---|
| 1302 | | - (void)otherMouseUp:(NSEvent *)o_event |
|---|
| 1303 | | { |
|---|
| 1304 | | vout_thread_t * p_vout; |
|---|
| 1305 | | id o_window = [self window]; |
|---|
| 1306 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1307 | | vlc_value_t val; |
|---|
| 1308 | | |
|---|
| 1309 | | switch( [o_event type] ) |
|---|
| 1310 | | { |
|---|
| 1311 | | case NSOtherMouseUp: |
|---|
| 1312 | | { |
|---|
| 1313 | | var_Get( p_vout, "mouse-button-down", &val ); |
|---|
| 1314 | | val.i_int &= ~2; |
|---|
| 1315 | | var_Set( p_vout, "mouse-button-down", val ); |
|---|
| 1316 | | } |
|---|
| 1317 | | break; |
|---|
| 1318 | | |
|---|
| 1319 | | default: |
|---|
| 1320 | | [super mouseUp: o_event]; |
|---|
| 1321 | | break; |
|---|
| 1322 | | } |
|---|
| 1323 | | } |
|---|
| 1324 | | |
|---|
| 1325 | | - (void)rightMouseUp:(NSEvent *)o_event |
|---|
| 1326 | | { |
|---|
| 1327 | | vout_thread_t * p_vout; |
|---|
| 1328 | | id o_window = [self window]; |
|---|
| 1329 | | p_vout = (vout_thread_t *)[o_window getVout]; |
|---|
| 1330 | | vlc_value_t val; |
|---|
| 1331 | | |
|---|
| 1332 | | switch( [o_event type] ) |
|---|
| 1333 | | { |
|---|
| 1334 | | case NSRightMouseUp: |
|---|
| 1335 | | { |
|---|
| 1336 | | var_Get( p_vout, "mouse-button-down", &val ); |
|---|
| 1337 | | val.i_int &= ~4; |
|---|
| 1338 | | var_Set( p_vout, "mouse-button-down", val ); |
|---|
| 1339 | | } |
|---|
| 1340 | | break; |
|---|
| 1341 | | |
|---|
| 1342 | | default: |
|---|
| 1343 | | [super mouseUp: o_event]; |
|---|
| 1344 | | break; |
|---|
| 1345 | | } |
|---|
| 1346 | | } |
|---|
| 1347 | | |
|---|
| 1348 | | - (void)mouseDragged:(NSEvent *)o_event |
|---|
| 1349 | | { |
|---|
| 1350 | | [self mouseMoved:o_event]; |
|---|
| 1351 | | } |
|---|
| 1352 | | |
|---|
| 1353 | | - (void)otherMouseDragged:(NSEvent *)o_event |
|---|
| 1354 | | { |
|---|
| 1355 | | [self mouseMoved:o_event]; |
|---|
| 1356 | | } |
|---|
| 1357 | | |
|---|
| 1358 | | - (void)rightMouseDragged:(NSEvent *)o_event |
|---|
| 1359 | | { |
|---|
| 1360 | | [self mouseMoved:o_event]; |
|---|
| 1361 | | } |
|---|
| | 1361 | CATCH_MOUSE_EVENTS |
|---|
| | 1837 | CATCH_MOUSE_EVENTS |
|---|
| | 1838 | |
|---|
| | 1839 | - (void)mouseMoved:(NSEvent *)o_event |
|---|
| | 1840 | { |
|---|
| | 1841 | NSPoint ml; |
|---|
| | 1842 | NSRect s_rect; |
|---|
| | 1843 | BOOL b_inside; |
|---|
| | 1844 | |
|---|
| | 1845 | s_rect = [self bounds]; |
|---|
| | 1846 | ml = [self convertPoint: [o_event locationInWindow] fromView: nil]; |
|---|
| | 1847 | b_inside = [self mouse: ml inRect: s_rect]; |
|---|
| | 1848 | |
|---|
| | 1849 | if( isFullScreen ) |
|---|
| | 1850 | { |
|---|
| | 1851 | /* TODO */ |
|---|
| | 1852 | /* Grmbl, mouseDown events aren't sent in fullscreen mode */ |
|---|
| | 1853 | } |
|---|
| | 1854 | else if( b_inside ) |
|---|
| | 1855 | { |
|---|
| | 1856 | vlc_value_t val; |
|---|
| | 1857 | int i_width, i_height, i_x, i_y; |
|---|
| | 1858 | |
|---|
| | 1859 | vout_PlacePicture( p_vout, (unsigned int)s_rect.size.width, |
|---|
| | 1860 | (unsigned int)s_rect.size.height, |
|---|
| | 1861 | &i_x, &i_y, &i_width, &i_height ); |
|---|
| | 1862 | |
|---|
| | 1863 | val.i_int = ( (int)ml.x - i_x ) * |
|---|
| | 1864 | p_vout->render.i_width / i_width; |
|---|
| | 1865 | var_Set( p_vout, "mouse-x", val ); |
|---|
| | 1866 | |
|---|
| | 1867 | /* Y coordinate is inverted in OpenGL */ |
|---|
| | 1868 | val.i_int = ( ((int)(s_rect.size.height - ml.y)) - i_y ) * |
|---|
| | 1869 | p_vout->render.i_height / i_height; |
|---|
| | 1870 | var_Set( p_vout, "mouse-y", val ); |
|---|
| | 1871 | |
|---|
| | 1872 | val.b_bool = VLC_TRUE; |
|---|
| | 1873 | var_Set( p_vout, "mouse-moved", val ); |
|---|
| | 1874 | p_vout->p_sys->i_time_mouse_last_moved = mdate(); |
|---|
| | 1875 | p_vout->p_sys->b_mouse_moved = YES; |
|---|
| | 1876 | } |
|---|
| | 1877 | |
|---|
| | 1878 | [super mouseMoved: o_event]; |
|---|
| | 1879 | } |
|---|
| | 1880 | |
|---|