From 7d4ce9ed0a3e30c59d6b767455bf51009e353a3e Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Mon, 4 Feb 2013 22:16:57 -0800 Subject: [PATCH] Change mousewheel behavior of Fl_Slider and Fl_Dial. --- src/Fl_Dial.cxx | 42 +++++++++++++----------------------------- src/Fl_Slider.cxx | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/Fl_Dial.cxx b/src/Fl_Dial.cxx index e8c5eaf..fdef33d 100644 --- a/src/Fl_Dial.cxx +++ b/src/Fl_Dial.cxx @@ -110,36 +110,20 @@ Fl_Dial::handle ( int m ) { if ( this != Fl::belowmouse() ) return 0; - - int steps = 16; - - if ( Fl::event_ctrl() ) - steps = 128; - - float step = fabs( maximum() - minimum() ) / (float)steps; - - float d = ((float)Fl::event_dy()) * step; - - double v = value() + d; - + if (Fl::e_dy==0) + return 0; + + const int steps = Fl::event_ctrl() ? 128 : 16; + + const float step = fabs( maximum() - minimum() ) / (float)steps; + + int dy = Fl::e_dy; + + /* slider is in 'upside down' configuration, invert meaning of mousewheel */ if ( maximum() > minimum() ) - { - if ( v < minimum() ) - v = minimum(); - else if ( v > maximum() ) - v = maximum(); - } - else - { - if ( v > minimum() ) - v = minimum(); - else if ( v < maximum() ) - v = maximum(); - } - - value( v ); - do_callback(); - + dy = 0 - dy; + + handle_drag(clamp(value() + step * dy)); return 1; } } diff --git a/src/Fl_Slider.cxx b/src/Fl_Slider.cxx index 160e8c5..862a0da 100644 --- a/src/Fl_Slider.cxx +++ b/src/Fl_Slider.cxx @@ -350,6 +350,26 @@ int Fl_Slider::handle(int event, int X, int Y, int W, int H) { case FL_ENTER : case FL_LEAVE : return 1; + case FL_MOUSEWHEEL : + { + if ( this != Fl::belowmouse() ) + return 0; + if (Fl::e_dy==0) + return 0; + + const int steps = Fl::event_ctrl() ? 128 : 16; + + const float step = fabs( maximum() - minimum() ) / (float)steps; + + int dy = Fl::e_dy; + + /* slider is in 'upside down' configuration, invert meaning of mousewheel */ + if ( minimum() > maximum() ) + dy = 0 - dy; + + handle_drag(clamp(value() + step * dy)); + return 1; + } default: return 0; }