Use the same logic to decide on step size when scroll-wheeling faders in the mixer...
[ardour.git] / libs / gtkmm2ext / motionfeedback.cc
index c3152d7616297e251438b1ad35b2f7a1506fbd2f..b5bdd82aa52d2427d2f0a817f28825d791c32362 100644 (file)
@@ -39,6 +39,8 @@ using namespace Gtk;
 using namespace Gtkmm2ext;
 using namespace sigc;
 
+Gdk::Color* MotionFeedback::base_color;
+
 MotionFeedback::MotionFeedback (Glib::RefPtr<Gdk::Pixbuf> pix,
                                Type t,
                                boost::shared_ptr<PBD::Controllable> c,
@@ -60,6 +62,10 @@ MotionFeedback::MotionFeedback (Glib::RefPtr<Gdk::Pixbuf> pix,
         , subwidth (subw)
         , subheight (subh)
 {
+       if (!base_color) {
+               base_color = new Gdk::Color ("#1a5274");
+       }
+
        char value_name[1024];
 
        print_func = default_printer;
@@ -253,14 +259,14 @@ MotionFeedback::pixwin_motion_notify_event (GdkEventMotion *ev)
 }
 
 bool
-MotionFeedback::pixwin_enter_notify_event (GdkEventCrossing *ev
+MotionFeedback::pixwin_enter_notify_event (GdkEventCrossing*
 {
        pixwin.grab_focus();
        return false;
 }
 
 bool
-MotionFeedback::pixwin_leave_notify_event (GdkEventCrossing *ev
+MotionFeedback::pixwin_leave_notify_event (GdkEventCrossing*
 {
        pixwin.unset_flags (HAS_FOCUS);
        return false;
@@ -316,7 +322,7 @@ MotionFeedback::pixwin_key_press_event (GdkEventKey *ev)
 }
 
 bool
-MotionFeedback::pixwin_expose_event (GdkEventExpose* ev)
+MotionFeedback::pixwin_expose_event (GdkEventExpose*)
 {
        if (!_controllable) {
                return true;
@@ -375,23 +381,25 @@ MotionFeedback::pixwin_scroll_event (GdkEventScroll* ev)
                return false;
        }
 
-       if ((ev->state & (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) == (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
-               scale = 0.01;
-       } else if (ev->state & Keyboard::PrimaryModifier) {
-               scale = 0.1;
+       if (ev->state & Keyboard::GainFineScaleModifier) {
+               if (ev->state & Keyboard::GainExtraFineScaleModifier) {
+                       scale = 0.01;
+               } else {
+                       scale = 0.05;
+               }
        } else {
-               scale = 1.0;
+               scale = 0.25;
        }
 
        switch (ev->direction) {
        case GDK_SCROLL_UP:
        case GDK_SCROLL_RIGHT:
-               _controllable->set_value (adjust (scale * step_inc));
+               _controllable->set_value (adjust (scale * page_inc));
                break;
 
        case GDK_SCROLL_DOWN:
        case GDK_SCROLL_LEFT:
-               _controllable->set_value (adjust (-scale * step_inc));
+               _controllable->set_value (adjust (-scale * page_inc));
                break;
        }
 
@@ -467,12 +475,11 @@ MotionFeedback::render_pixbuf (int size)
         
        GdkColor col2 = {0,0,0,0};
        GdkColor col3 = {0,0,0,0};
-        Gdk::Color base ("#b9feff");
         GdkColor dark;
         GdkColor bright;
         ProlooksHSV* hsv;
 
-       hsv = prolooks_hsv_new_for_gdk_color (base.gobj());
+       hsv = prolooks_hsv_new_for_gdk_color (base_color->gobj());
        bright = (prolooks_hsv_to_gdk_color (hsv, &col2), col2);
        prolooks_hsv_set_saturation (hsv, 0.66);
        prolooks_hsv_set_value (hsv, 0.67);
@@ -729,3 +736,13 @@ MotionFeedback::core_draw (cairo_t* cr, int phase, double size, double progress_
 
        cairo_pattern_destroy (knob_ripples);
 }
+
+void
+MotionFeedback::set_lamp_color (const std::string& str)
+{
+       if (base_color) {
+               *base_color = Gdk::Color (str);
+       } else {
+               base_color = new Gdk::Color (str);
+       }
+}