Changeset 5cdfaf1d1ca3571c4b476532c04110c281e37dbf

Show
Ignore:
Timestamp:
04/05/04 13:35:18 (5 years ago)
Author:
Eric Petit <titer@videolan.org>
git-committer:
Eric Petit <titer@videolan.org> 1083670518 +0000
git-parent:

[684eac89640c5c962d9771622ea0cb3074d8fddc]

git-author:
Eric Petit <titer@videolan.org> 1083670518 +0000
Message:

+ macosx/vout.m : catch mouse events in OpenGL mode (still, only works

in window mode. I'm not sure how we can catch
mouseDown events in fullscreen GL mode)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/gui/macosx/vout.m

    r581f3e4 r5cdfaf1  
    11581158@end 
    11591159 
     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 
    11601343/***************************************************************************** 
    11611344 * VLCQTView implementation 
     
    11761359} 
    11771360 
    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 
     1361CATCH_MOUSE_EVENTS 
    13621362 
    13631363- (void)mouseMoved:(NSEvent *)o_event 
     
    18351835} 
    18361836 
     1837CATCH_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 
    18371881@end 
    18381882