diff options
author | Doug McLain <doug@nostar.net> | 2007-07-05 05:33:40 +0000 |
---|---|---|
committer | Doug McLain <doug@nostar.net> | 2007-07-05 05:33:40 +0000 |
commit | 291a186cba343ed705c60d15fa7db0b21eb8a1fd (patch) | |
tree | 683a299b237164b5a67d2d79e9b05dc2251b8f46 /gtk2_ardour/gain_meter.cc | |
parent | 0518b045c62ef764eced6fff0b64d4f71832a7b0 (diff) |
New theme manager from trunk, backported to 2.0-ongoing
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2110 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/gain_meter.cc')
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index c9ea6af242..6257e49fb9 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -83,6 +83,7 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s) ignore_toggle = false; meter_menu = 0; next_release_selects = false; + style_changed = true; gain_slider = manage (new VSliderController (slider, &gain_adjustment, @@ -202,6 +203,8 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s) ResetAllPeakDisplays.connect (mem_fun(*this, &GainMeter::reset_peak_display)); ResetGroupPeakDisplays.connect (mem_fun(*this, &GainMeter::reset_group_peak_display)); + + UI::instance()->theme_changed.connect (mem_fun(*this, &GainMeter::on_theme_changed)); } void @@ -264,9 +267,14 @@ GainMeter::render_metrics (Gtk::Widget& w) gint GainMeter::meter_metrics_expose (GdkEventExpose *ev) { + static Glib::RefPtr<Gtk::Style> meter_style; + + if (style_changed) { + meter_style = meter_metric_area.get_style(); + } Glib::RefPtr<Gdk::Window> win (meter_metric_area.get_window()); - Glib::RefPtr<Gdk::GC> fg_gc (meter_metric_area.get_style()->get_fg_gc (Gtk::STATE_NORMAL)); - Glib::RefPtr<Gdk::GC> bg_gc (meter_metric_area.get_style()->get_bg_gc (Gtk::STATE_NORMAL)); + Glib::RefPtr<Gdk::GC> fg_gc (meter_style->get_fg_gc (Gtk::STATE_NORMAL)); + Glib::RefPtr<Gdk::GC> bg_gc (meter_style->get_fg_gc (Gtk::STATE_NORMAL)); GdkRectangle base_rect; GdkRectangle draw_rect; gint width, height; @@ -281,7 +289,7 @@ GainMeter::meter_metrics_expose (GdkEventExpose *ev) Glib::RefPtr<Gdk::Pixmap> pixmap; std::map<string,Glib::RefPtr<Gdk::Pixmap> >::iterator i = metric_pixmaps.find (meter_metric_area.get_name()); - if (i == metric_pixmaps.end()) { + if (i == metric_pixmaps.end() || style_changed) { pixmap = render_metrics (meter_metric_area); } else { pixmap = i->second; @@ -289,11 +297,18 @@ GainMeter::meter_metrics_expose (GdkEventExpose *ev) gdk_rectangle_intersect (&ev->area, &base_rect, &draw_rect); win->draw_rectangle (bg_gc, true, draw_rect.x, draw_rect.y, draw_rect.width, draw_rect.height); - win->draw_drawable (bg_gc, pixmap, draw_rect.x, draw_rect.y, draw_rect.x, draw_rect.y, draw_rect.width, draw_rect.height); + win->draw_drawable (fg_gc, pixmap, draw_rect.x, draw_rect.y, draw_rect.x, draw_rect.y, draw_rect.width, draw_rect.height); + style_changed = false; return true; } +void +GainMeter::on_theme_changed() +{ + style_changed = true; +} + GainMeter::~GainMeter () { if (meter_menu) { |