make meterbridge a normal window - border-colored overflow if maximized
authorRobin Gareus <robin@gareus.org>
Wed, 3 Jul 2013 19:40:30 +0000 (21:40 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 10 Jul 2013 13:27:07 +0000 (15:27 +0200)
gtk2_ardour/ardour3_styles.rc.in
gtk2_ardour/meter_strip.cc
gtk2_ardour/meter_strip.h
gtk2_ardour/meterbridge.cc

index da636eefd14e1c01e34d91fad3d37f30d7a53504..0257a8b11f8acb183994e552d5bb3880cd798a79 100644 (file)
@@ -679,6 +679,7 @@ style "audio_bus_base" = "very_small_text"
 {
   fg[NORMAL] = @@COLPREFIX@_fg
   bg[NORMAL] = @@COLPREFIX@_audio_bus
+  bg[ACTIVE] = @@COLPREFIX@_bg
 }
 
 style "send_strip_base" = "default"
index ee4c692d6a5b77e6a4d152a7a02562b097720493..ea610f25506ef3ae36536616fde367362c58b540 100644 (file)
@@ -55,6 +55,7 @@ PBD::Signal1<void,MeterStrip*> MeterStrip::CatchDeletion;
 
 MeterStrip::MetricPatterns MeterStrip::metric_patterns;
 MeterStrip::TickPatterns MeterStrip::ticks_patterns;
+int MeterStrip::max_pattern_metric_size = 1024;
 
 MeterStrip::MeterStrip (int metricmode)
        : AxisView(0)
@@ -130,12 +131,11 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
        level_meter->clear_meters();
        level_meter->setup_meters (220, meter_width, 6);
 
-       Gtk::Alignment *meter_align = Gtk::manage (new Gtk::Alignment());
-       meter_align->set(0.5, 0.5, 0.0, 1.0);
-       meter_align->add(*level_meter);
+       meter_align.set(0.5, 0.5, 0.0, 1.0);
+       meter_align.add(*level_meter);
 
        meterbox.pack_start(meter_ticks1_area, true, false);
-       meterbox.pack_start(*meter_align, true, true);
+       meterbox.pack_start(meter_align, true, true);
        meterbox.pack_start(meter_ticks2_area, true, false);
 
        // peak display
@@ -146,10 +146,9 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
        peak_display.set_size_request(12, 8);
        peak_display.set_corner_radius(2);
 
-       Gtk::Alignment *peak_align = Gtk::manage (new Gtk::Alignment());
-       peak_align->set(0.5, 1.0, 1.0, 0.8);
-       peak_align->add(peak_display);
-       peakbx.pack_start(*peak_align, true, true, 3);
+       peak_align.set(0.5, 1.0, 1.0, 0.8);
+       peak_align.add(peak_display);
+       peakbx.pack_start(peak_align, true, true, 3);
        peakbx.set_size_request(-1, 14);
 
        // add track-name label
@@ -180,8 +179,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
        meter_ticks2_area.show();
        meterbox.show();
        level_meter->show();
-       meter_align->show();
-       peak_align->show();
+       meter_align.show();
+       peak_align.show();
        btnbox.show();
        name_label.show();
        namebx.show();
@@ -349,7 +348,6 @@ MeterStrip::render_metrics (Gtk::Widget& w, vector<DataType> types)
        cairo_t* cr = cairo_create (surface);
        Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create(w.get_pango_context());
 
-
        Pango::AttrList audio_font_attributes;
        Pango::AttrList midi_font_attributes;
        Pango::AttrList unit_font_attributes;
@@ -387,7 +385,15 @@ MeterStrip::render_metrics (Gtk::Widget& w, vector<DataType> types)
        }
        cairo_fill (cr);
 
-       height = min(1024, height); // XXX see FastMeter::max_pattern_metric_size
+       if (height > max_pattern_metric_size) {
+               cairo_move_to (cr, 0, max_pattern_metric_size);
+               cairo_rectangle (cr, 0, max_pattern_metric_size, width, height);
+               Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE);
+               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
+               cairo_fill (cr);
+       }
+
+       height = min(max_pattern_metric_size, height);
        uint32_t peakcolor = ARDOUR_UI::config()->color_by_name ("meterbridge peaklabel");
 
        for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {
@@ -591,7 +597,15 @@ MeterStrip::render_ticks (Gtk::Widget& w, vector<DataType> types)
        }
        cairo_fill (cr);
 
-       height = min(1024, height); // XXX see FastMeter::max_pattern_metric_size
+       if (height > max_pattern_metric_size) {
+               cairo_move_to (cr, 0, max_pattern_metric_size);
+               cairo_rectangle (cr, 0, max_pattern_metric_size, width, height);
+               Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE);
+               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
+               cairo_fill (cr);
+       }
+
+       height = min(max_pattern_metric_size, height);
        uint32_t peakcolor = ARDOUR_UI::config()->color_by_name ("meterbridge peaklabel");
 
        for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {
index 682eedd79c49e3e90babbd71da0a9e37fd019c8c..aee1168e478fe54202952c02fe07de00f20bef13 100644 (file)
@@ -94,6 +94,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI
        Gtk::DrawingArea meter_ticks2_area;
 
        Gtk::Alignment meter_align;
+       Gtk::Alignment peak_align;
        Gtk::HBox peakbx;
        Gtk::HBox btnbox;
        ArdourButton peak_display;
@@ -111,6 +112,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI
        void strip_property_changed (const PBD::PropertyChange&);
        void meter_configuration_changed (ARDOUR::ChanCount);
 
+       static int max_pattern_metric_size; // == FastMeter::max_pattern_metric_size
 };
 
 #endif /* __ardour_mixer_strip__ */
index 0401b938965550d90658a02e97571a46897182aa..c40b950d3f28252e11454c3bad0b629f485f199f 100644 (file)
@@ -130,11 +130,6 @@ Meterbridge::Meterbridge ()
        geom.max_height = 1024 + 52 + 16 + 12 ; // XXX see FastMeter::max_pattern_metric_size + meter-strip widgets
        set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MAX_SIZE);
 
-       /* disable "maximize" button because it overrides size hint from above,
-        * this also keeps window on top..
-        */
-       set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
-
        metrics_left = manage(new MeterStrip (2));
        global_hpacker.pack_start (*metrics_left, false, false);
        metrics_left->show();