fix initial display of name/id on meterbridge
[ardour.git] / libs / gtkmm2ext / motionfeedback.cc
index c3152d7616297e251438b1ad35b2f7a1506fbd2f..44fb3e5f475accbb98b2a256fb0c8ff0b3e23f55 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;
@@ -88,6 +94,7 @@ MotionFeedback::MotionFeedback (Glib::RefPtr<Gdk::Pixbuf> pix,
                hpacker = manage (new HBox);
                hpacker->pack_start (*value_packer, true, false);
                hpacker->show ();
+               hpacker->set_border_width (6);
 
                pack_start (*hpacker, false, false);
 
@@ -178,7 +185,10 @@ MotionFeedback::pixwin_button_release_event (GdkEventButton *ev)
                         /* shift click back to the default */
                         _controllable->set_value (default_value);
                         return true;
-                }
+                } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+                       /* ctrl click back to the minimum value */
+                       _controllable->set_value (_controllable->lower ());
+               }
                break;
                
        case 3:
@@ -253,14 +263,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 +326,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 +385,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 +479,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 +740,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);
+       }
+}