Use the same logic to decide on step size when scroll-wheeling faders in the mixer...
[ardour.git] / libs / gtkmm2ext / pixfader.cc
index 6f8eb32e7832f572319a86736cd44c41e47856fc..e146f7aa6070719a89378411346707793325e850 100644 (file)
@@ -28,9 +28,6 @@ using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace std;
 
-int PixFader::fine_scale_modifier = Keyboard::PrimaryModifier;
-int PixFader::extra_fine_scale_modifier = Keyboard::SecondaryModifier;
-
 PixFader::PixFader (Glib::RefPtr<Gdk::Pixbuf> belt, Gtk::Adjustment& adj, int orientation, int fader_length)
 
        : adjustment (adj),
@@ -184,7 +181,7 @@ bool
 PixFader::on_button_press_event (GdkEventButton* ev)
 {
        if (ev->type != GDK_BUTTON_PRESS) {
-               return false;
+               return true;
        }
 
        if (ev->button != 1 && ev->button != 2) {
@@ -221,7 +218,7 @@ PixFader::on_button_release_event (GdkEventButton* ev)
 
                                if (ev->state & Keyboard::TertiaryModifier) {
                                        adjustment.set_value (default_value);
-                               } else if (ev->state & fine_scale_modifier) {
+                               } else if (ev->state & Keyboard::GainFineScaleModifier) {
                                        adjustment.set_value (adjustment.get_lower());
                                } else if ((_orien == VERT && ev_pos < span - display_span()) || (_orien == HORIZ && ev_pos > span - display_span())) {
                                        /* above the current display height, remember X Window coords */
@@ -255,8 +252,8 @@ PixFader::on_scroll_event (GdkEventScroll* ev)
        double scale;
        bool ret = false;
 
-       if (ev->state & fine_scale_modifier) {
-               if (ev->state & extra_fine_scale_modifier) {
+       if (ev->state & Keyboard::GainFineScaleModifier) {
+               if (ev->state & Keyboard::GainExtraFineScaleModifier) {
                        scale = 0.01;
                } else {
                        scale = 0.05;
@@ -320,8 +317,8 @@ PixFader::on_motion_notify_event (GdkEventMotion* ev)
                        return true;
                }
                
-               if (ev->state & fine_scale_modifier) {
-                       if (ev->state & extra_fine_scale_modifier) {
+               if (ev->state & Keyboard::GainFineScaleModifier) {
+                       if (ev->state & Keyboard::GainExtraFineScaleModifier) {
                                scale = 0.05;
                        } else {
                                scale = 0.1;
@@ -369,9 +366,21 @@ PixFader::set_fader_length (int l)
 {
        if (_orien == VERT) {
                view.height = span = l;
-               unity_loc = (int) rint (view.height - (default_value * view.height)) - 1;
        } else {
                view.width = span = l;
+       }
+
+       update_unity_position ();
+
+       queue_draw ();
+}
+
+void
+PixFader::update_unity_position ()
+{
+       if (_orien == VERT) {
+               unity_loc = (int) rint (view.height * (1 - (default_value / (adjustment.get_upper() - adjustment.get_lower())))) - 1;
+       } else {
                unity_loc = (int) rint (default_value * view.width);
        }
 
@@ -402,3 +411,10 @@ PixFader::set_adjustment_from_event (GdkEventButton* ev)
 
        adjustment.set_value (fract * (adjustment.get_upper () - adjustment.get_lower ()));
 }
+
+void
+PixFader::set_default_value (float d)
+{
+       default_value = d;
+       update_unity_position ();
+}