tweaked panner appearance and consistency, panner line now distinct color from triang...
[ardour.git] / gtk2_ardour / panner_ui.cc
index 46d69b7a798ecbc4ecbdadefa5436d6ae53abd9e..72cd24bccee86f3184692100c5fb907e999ccb9d 100644 (file)
@@ -73,7 +73,7 @@ PannerUI::PannerUI (boost::shared_ptr<IO> io, Session& s)
        //set_size_request_to_display_given_text (pan_automation_style_button, X_("0"), 2, 2);
 
        pan_bar_packer.set_size_request (-1, 61);
-       panning_viewport.set_size_request (61, 61);
+       panning_viewport.set_size_request (64, 61);
 
        panning_viewport.set_name (X_("BaseFrame"));
 
@@ -133,7 +133,7 @@ PannerUI::PannerUI (boost::shared_ptr<IO> io, Session& s)
        panning_up_arrow.set_name (X_("PanScrollerArrow"));
        panning_down_arrow.set_name (X_("PanScrollerArrow"));
 
-       pan_vbox.set_spacing (4);
+       pan_vbox.set_spacing (2);
        pan_vbox.pack_start (panning_viewport, Gtk::PACK_SHRINK);
        pan_vbox.pack_start (panning_link_box, Gtk::PACK_SHRINK);
 
@@ -215,22 +215,22 @@ PannerUI::set_width (Width w)
 {
        switch (w) {
        case Wide:
-               panning_viewport.set_size_request (61, 61);
+               panning_viewport.set_size_request (64, 61);
                if (panner) {
-                       panner->set_size_request (61, 61);
+                       panner->set_size_request (63, 61);
                }
                for (vector<PannerBar*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
-                       (*i)->set_size_request (61, pan_bar_height);
+                       (*i)->set_size_request (63, pan_bar_height);
                }
                panning_link_button.set_label (_("link"));
                break;
        case Narrow:
-               panning_viewport.set_size_request (31, 61);
+               panning_viewport.set_size_request (34, 61);
                if (panner) {
-                       panner->set_size_request (31, 61);
+                       panner->set_size_request (33, 61);
                }
                for (vector<PannerBar*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
-                               (*i)->set_size_request (31, pan_bar_height);
+                       (*i)->set_size_request (33, pan_bar_height);
                }
                panning_link_button.set_label (_("L"));
                break;
@@ -303,19 +303,33 @@ PannerUI::setup_pan ()
 
                while ((asz = pan_adjustments.size()) < npans) {
 
-                       float x;
+                       float x, rx;
                        PannerBar* bc;
 
-                       /* initialize adjustment with current value of panner */
+                       /* initialize adjustment with 0.0 (L) or 1.0 (R) for the first and second panners,
+                          which serves as a default, otherwise use current value */
 
-                       _io->panner()[asz]->get_position (x);
+                       _io->panner()[asz]->get_position (rx);
+
+                       if (npans == 1) {
+                               x = 0.5;
+                       } else if (asz == 0) {
+                               x = 0.0;
+                       } else if (asz == 1) {
+                               x = 1.0;
+                       } else {
+                               x = rx;
+                       }
 
                        pan_adjustments.push_back (new Adjustment (x, 0, 1.0, 0.05, 0.1));
+                       bc = new PannerBar (*pan_adjustments[asz], _io->panner()[asz]->control());
+
+                       /* now set adjustment with current value of panner, then connect the signals */
+                       pan_adjustments.back()->set_value(rx);
                        pan_adjustments.back()->signal_value_changed().connect (bind (mem_fun(*this, &PannerUI::pan_adjustment_changed), (uint32_t) asz));
 
                        _io->panner()[asz]->Changed.connect (bind (mem_fun(*this, &PannerUI::pan_value_changed), (uint32_t) asz));
 
-                       bc = new PannerBar (*pan_adjustments[asz], _io->panner()[asz]->control());
                        
                        bc->set_name ("PanSlider");
                        bc->set_shadow_type (Gtk::SHADOW_NONE);
@@ -333,10 +347,10 @@ PannerUI::setup_pan ()
                        pan_bars.push_back (bc);
                        switch (_width) {
                        case Wide:
-                               bc->set_size_request (61, pan_bar_height);
+                               bc->set_size_request (63, pan_bar_height);
                                break;
                        case Narrow:
-                               bc->set_size_request (31, pan_bar_height);
+                               bc->set_size_request (33, pan_bar_height);
                                break;
                        }
 
@@ -360,10 +374,10 @@ PannerUI::setup_pan ()
 
                switch (_width) {
                case Wide:
-                       w = 61;
+                       w = 63;
                        break;
                case Narrow:
-                       w = 31;
+                       w = 33;
                        break;
                }