vlc | branch: master | David Fuhrmann <[email protected]> | Fri Sep 7 23:08:25 2012 +0200| [80c805395538a60e93e825745d1d3d3d094658f9] | committer: David Fuhrmann
macosx: cleanup generic scrollwheel implementation > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=80c805395538a60e93e825745d1d3d3d094658f9 --- modules/gui/macosx/VideoView.h | 3 ++ modules/gui/macosx/VideoView.m | 71 ++++++++++++++++++++++++++++++--- modules/gui/macosx/controls.h | 5 +-- modules/gui/macosx/controls.m | 84 ---------------------------------------- 4 files changed, 69 insertions(+), 94 deletions(-) diff --git a/modules/gui/macosx/VideoView.h b/modules/gui/macosx/VideoView.h index a10057b..51c599d 100644 --- a/modules/gui/macosx/VideoView.h +++ b/modules/gui/macosx/VideoView.h @@ -30,6 +30,9 @@ *****************************************************************************/ @interface VLCVoutView : NSView { + NSInteger i_lastScrollWheelDirection; + NSTimeInterval t_lastScrollEvent; + CGFloat f_cumulated_magnification; } @end diff --git a/modules/gui/macosx/VideoView.m b/modules/gui/macosx/VideoView.m index 78e08ea..b84debd 100644 --- a/modules/gui/macosx/VideoView.m +++ b/modules/gui/macosx/VideoView.m @@ -76,6 +76,7 @@ int DeviceCallback(vlc_object_t *p_this, const char *psz_variable, { [self registerForDraggedTypes:[NSArray arrayWithObject: NSFilenamesPboardType]]; + i_lastScrollWheelDirection = 0; f_cumulated_magnification = 0.0; } @@ -118,12 +119,6 @@ int DeviceCallback(vlc_object_t *p_this, const char *psz_variable, } } -- (void)scrollWheel:(NSEvent *)theEvent -{ - VLCControls * o_controls = (VLCControls *)[[NSApp delegate] controls]; - [o_controls scrollWheel: theEvent]; -} - - (void)keyDown:(NSEvent *)o_event { unichar key = 0; @@ -220,6 +215,70 @@ int DeviceCallback(vlc_object_t *p_this, const char *psz_variable, [super mouseMoved: o_event]; } +- (void)resetScrollWheelDirection +{ + /* release the scroll direction 0.8 secs after the last event */ + if (([NSDate timeIntervalSinceReferenceDate] - t_lastScrollEvent) >= 0.80) + i_lastScrollWheelDirection = 0; +} + +- (void)scrollWheel:(NSEvent *)theEvent +{ + intf_thread_t * p_intf = VLCIntf; + CGFloat f_deltaX = [theEvent deltaX]; + CGFloat f_deltaY = [theEvent deltaY]; + + if (!OSX_SNOW_LEOPARD && [theEvent isDirectionInvertedFromDevice]) { + f_deltaX = -f_deltaX; + f_deltaY = -f_deltaY; + } + + CGFloat f_yabsvalue = f_deltaY > 0.0f ? f_deltaY : -f_deltaY; + CGFloat f_xabsvalue = f_deltaX > 0.0f ? f_deltaX : -f_deltaX; + + int i_yvlckey, i_xvlckey = 0; + if (f_deltaY < 0.0f) + i_yvlckey = KEY_MOUSEWHEELDOWN; + else + i_yvlckey = KEY_MOUSEWHEELUP; + + if (f_deltaX < 0.0f) + i_xvlckey = KEY_MOUSEWHEELRIGHT; + else + i_xvlckey = KEY_MOUSEWHEELLEFT; + + /* in the following, we're forwarding either a x or a y event */ + /* Multiple key events are send depending on the intensity of the event */ + /* the opposite direction is being blocked for 0.8 secs */ + if (f_yabsvalue > 0.05) { + if (i_lastScrollWheelDirection < 0) // last was a X + return; + + i_lastScrollWheelDirection = 1; // Y + for (NSUInteger i = 0; i < (int)(f_yabsvalue/4.+1.); i++) + var_SetInteger(p_intf->p_libvlc, "key-pressed", i_yvlckey); + + t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate]; + [self performSelector:@selector(resetScrollWheelDirection) + withObject: NULL + afterDelay:1.00]; + return; + } + if (f_xabsvalue > 0.05) { + if (i_lastScrollWheelDirection > 0) // last was a Y + return; + + i_lastScrollWheelDirection = -1; // X + for (NSUInteger i = 0; i < (int)(f_xabsvalue/6.+1.); i++) + var_SetInteger(p_intf->p_libvlc, "key-pressed", i_xvlckey); + + t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate]; + [self performSelector:@selector(resetScrollWheelDirection) + withObject: NULL + afterDelay:1.00]; + } +} + - (BOOL)mouseDownCanMoveWindow { return YES; diff --git a/modules/gui/macosx/controls.h b/modules/gui/macosx/controls.h index 122e293..6f3b8aa 100644 --- a/modules/gui/macosx/controls.h +++ b/modules/gui/macosx/controls.h @@ -39,10 +39,8 @@ IBOutlet id o_specificTime_sec_lbl; IBOutlet id o_specificTime_stepper; IBOutlet id o_specificTime_mi; - - NSInteger i_lastScrollWheelDirection; - NSTimeInterval t_lastScrollEvent; } + - (IBAction)play:(id)sender; - (IBAction)stop:(id)sender; @@ -69,7 +67,6 @@ - (IBAction)addSubtitleFile:(id)sender; - (BOOL)keyEvent:(NSEvent *)o_event; -- (void)scrollWheel: (NSEvent *)theEvent; - (IBAction)goToSpecificTime:(id)sender; @end diff --git a/modules/gui/macosx/controls.m b/modules/gui/macosx/controls.m index fb20d9c..c39067e 100644 --- a/modules/gui/macosx/controls.m +++ b/modules/gui/macosx/controls.m @@ -54,8 +54,6 @@ [o_specificTime_ok_btn setTitle: _NS("OK")]; [o_specificTime_sec_lbl setStringValue: _NS("sec.")]; [o_specificTime_goTo_lbl setStringValue: _NS("Jump to time")]; - - i_lastScrollWheelDirection = 0; } @@ -252,88 +250,6 @@ vlc_object_release(p_input); } -- (void)resetScrollWheelDirection -{ - /* release the scroll direction 0.8 secs after the last event */ - if (([NSDate timeIntervalSinceReferenceDate] - t_lastScrollEvent) >= 0.80) - i_lastScrollWheelDirection = 0; -} - -- (void)scrollWheel:(NSEvent *)theEvent -{ - intf_thread_t * p_intf = VLCIntf; - BOOL b_invertedEventFromDevice = NO; - CGFloat f_deltaY, f_deltaX = .0; - - if (!OSX_SNOW_LEOPARD) { - if ([theEvent isDirectionInvertedFromDevice]) - b_invertedEventFromDevice = YES; - } - - f_deltaY = [theEvent deltaY]; - f_deltaX = [theEvent deltaX]; - - CGFloat f_yabsvalue = f_deltaY > 0.0f ? f_deltaY : -f_deltaY; - CGFloat f_xabsvalue = f_deltaX > 0.0f ? f_deltaX : -f_deltaX; - - int i_yvlckey, i_xvlckey = 0; - - if (b_invertedEventFromDevice) { - if (f_deltaY > 0.0f) - i_yvlckey = KEY_MOUSEWHEELDOWN; - else - i_yvlckey = KEY_MOUSEWHEELUP; - - if (f_deltaX > 0.0f) - i_xvlckey = KEY_MOUSEWHEELRIGHT; - else - i_xvlckey = KEY_MOUSEWHEELLEFT; - } else { - if (f_deltaY < 0.0f) - i_yvlckey = KEY_MOUSEWHEELDOWN; - else - i_yvlckey = KEY_MOUSEWHEELUP; - - if (f_deltaX < 0.0f) - i_xvlckey = KEY_MOUSEWHEELRIGHT; - else - i_xvlckey = KEY_MOUSEWHEELLEFT; - } - - /* in the following, we're forwarding either a x or a y event */ - /* Multiple key events are send depending on the intensity of the event */ - /* the opposite direction is being blocked for 0.8 secs */ - if (f_yabsvalue > 0.05) - { - if (i_lastScrollWheelDirection < 0) // last was a X - return; - - i_lastScrollWheelDirection = 1; // Y - for (NSUInteger i = 0; i < (int)(f_yabsvalue/4.+1.) && f_yabsvalue > 0.05 ; i++) - var_SetInteger(p_intf->p_libvlc, "key-pressed", i_yvlckey); - - t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate]; - [self performSelector:@selector(resetScrollWheelDirection) - withObject: NULL - afterDelay:1.00]; - return; - } - if (f_xabsvalue > 0.05) - { - if (i_lastScrollWheelDirection > 0) // last was a Y - return; - - i_lastScrollWheelDirection = -1; // X - for (NSUInteger i = 0; i < (int)(f_xabsvalue/6.+1.) && f_xabsvalue > 0.05; i++) - var_SetInteger(p_intf->p_libvlc, "key-pressed", i_xvlckey); - - t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate]; - [self performSelector:@selector(resetScrollWheelDirection) - withObject: NULL - afterDelay:1.00]; - } -} - - (BOOL)keyEvent:(NSEvent *)o_event { BOOL eventHandled = NO; _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
