From 6b4e263d85ecb054c5ffa80391f43e76f8e63865 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 3 Jul 2013 21:40:30 +0200 Subject: make meterbridge a normal window - border-colored overflow if maximized --- gtk2_ardour/ardour3_styles.rc.in | 1 + gtk2_ardour/meter_strip.cc | 40 +++++++++++++++++++++++++++------------- gtk2_ardour/meter_strip.h | 2 ++ gtk2_ardour/meterbridge.cc | 5 ----- 4 files changed, 30 insertions(+), 18 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour3_styles.rc.in b/gtk2_ardour/ardour3_styles.rc.in index da636eefd1..0257a8b11f 100644 --- a/gtk2_ardour/ardour3_styles.rc.in +++ b/gtk2_ardour/ardour3_styles.rc.in @@ -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" diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index ee4c692d6a..ea610f2550 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -55,6 +55,7 @@ PBD::Signal1 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 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 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 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 types) cairo_t* cr = cairo_create (surface); Glib::RefPtr 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 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::const_iterator i = types.begin(); i != types.end(); ++i) { @@ -591,7 +597,15 @@ MeterStrip::render_ticks (Gtk::Widget& w, vector 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::const_iterator i = types.begin(); i != types.end(); ++i) { diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index 682eedd79c..aee1168e47 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -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__ */ diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 0401b93896..c40b950d3f 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -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(); -- cgit v1.2.3