rework narrow mode metric (again)
[ardour.git] / gtk2_ardour / meterbridge.cc
index 35df88e76a192da46f742171f5782a5bced34ee3..74c13f45eb6c859bc0e941c6b0e259a31dbac019 100644 (file)
@@ -118,7 +118,9 @@ Meterbridge::Meterbridge ()
        Gdk::Geometry geom;
        geom.max_width = 1<<16;
        geom.max_height = max_height;
-       set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MAX_SIZE);
+       geom.height_inc = 16;
+       geom.width_inc = 1;
+       set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MAX_SIZE | Gdk::HINT_RESIZE_INC);
 
        set_keep_above (true);
        set_border_width (0);
@@ -331,7 +333,9 @@ Meterbridge::on_size_request (Gtk::Requisition* r)
 
        if (cur_max_width != geom.max_width) {
                cur_max_width = geom.max_width;
-               set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MAX_SIZE);
+               geom.height_inc = 16;
+               geom.width_inc = 1;
+               set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MAX_SIZE | Gdk::HINT_RESIZE_INC);
        }
 }
 
@@ -363,6 +367,9 @@ Meterbridge::set_session (Session* s)
                return;
        }
 
+       metrics_left.set_session(s);
+       metrics_right.set_session(s);
+
        XMLNode* node = _session->instant_xml(X_("Meterbridge"));
        if (node) {
                set_state (*node);
@@ -468,26 +475,24 @@ Meterbridge::set_state (const XMLNode& node)
 XMLNode&
 Meterbridge::get_state (void)
 {
+       char buf[32];
        XMLNode* node = new XMLNode ("Meterbridge");
 
-       if (is_realized()) {
-               Glib::RefPtr<Gdk::Window> win = get_window();
-
+       if (is_realized() && _visible) {
                get_window_pos_and_size ();
-
-               XMLNode* geometry = new XMLNode ("geometry");
-               char buf[32];
-               snprintf(buf, sizeof(buf), "%d", m_width);
-               geometry->add_property(X_("x_size"), string(buf));
-               snprintf(buf, sizeof(buf), "%d", m_height);
-               geometry->add_property(X_("y_size"), string(buf));
-               snprintf(buf, sizeof(buf), "%d", m_root_x);
-               geometry->add_property(X_("x_pos"), string(buf));
-               snprintf(buf, sizeof(buf), "%d", m_root_y);
-               geometry->add_property(X_("y_pos"), string(buf));
-               node->add_child_nocopy (*geometry);
        }
 
+       XMLNode* geometry = new XMLNode ("geometry");
+       snprintf(buf, sizeof(buf), "%d", m_width);
+       geometry->add_property(X_("x_size"), string(buf));
+       snprintf(buf, sizeof(buf), "%d", m_height);
+       geometry->add_property(X_("y_size"), string(buf));
+       snprintf(buf, sizeof(buf), "%d", m_root_x);
+       geometry->add_property(X_("x_pos"), string(buf));
+       snprintf(buf, sizeof(buf), "%d", m_root_y);
+       geometry->add_property(X_("y_pos"), string(buf));
+       node->add_child_nocopy (*geometry);
+
        node->add_property ("show-meterbridge", _visible ? "yes" : "no");
        return *node;
 }
@@ -666,6 +671,18 @@ Meterbridge::parameter_changed (std::string const & p)
                meter_clear_pattern_cache();
                update_metrics();
        }
+       else if (p == "show-rec-on-meterbridge") {
+               scroller.queue_resize();
+       }
+       else if (p == "show-mute-on-meterbridge") {
+               scroller.queue_resize();
+       }
+       else if (p == "show-solo-on-meterbridge") {
+               scroller.queue_resize();
+       }
+       else if (p == "show-name-on-meterbridge") {
+               scroller.queue_resize();
+       }
 }
 
 void