diff options
author | Doug McLain <doug@nostar.net> | 2007-05-26 13:47:28 +0000 |
---|---|---|
committer | Doug McLain <doug@nostar.net> | 2007-05-26 13:47:28 +0000 |
commit | 800178bb666a9c31d4c12e50d653f12f42df6bed (patch) | |
tree | 76f051f12af7ccfd91cf040fe9f023af7a7aefcd /gtk2_ardour | |
parent | 989dbbb95d7abe70ac3d64451731234cc68b2223 (diff) |
Better method for redrawing gain meter pixmaps upon theme change
git-svn-id: svn://localhost/ardour2/trunk@1921 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 17 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.h | 2 |
2 files changed, 13 insertions, 6 deletions
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 7009e2521d..9ad23bb80c 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -86,6 +86,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, @@ -209,6 +210,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)); + + ThemeChanged.connect (mem_fun(*this, &GainMeter::redraw_pixmaps)); } void @@ -273,14 +276,9 @@ gint GainMeter::meter_metrics_expose (GdkEventExpose *ev) { static Glib::RefPtr<Gtk::Style> meter_style; - bool style_changed = false; - if (!meter_style || - meter_style->get_bg(Gtk::STATE_NORMAL).get_red() != meter_metric_area.get_style()->get_bg(Gtk::STATE_NORMAL).get_red() || - meter_style->get_bg(Gtk::STATE_NORMAL).get_green() != meter_metric_area.get_style()->get_bg(Gtk::STATE_NORMAL).get_green() || - meter_style->get_bg(Gtk::STATE_NORMAL).get_blue() != meter_metric_area.get_style()->get_bg(Gtk::STATE_NORMAL).get_blue()) { + if (style_changed) { meter_style = meter_metric_area.get_style(); - style_changed = true; } Glib::RefPtr<Gdk::Window> win (meter_metric_area.get_window()); @@ -311,9 +309,16 @@ GainMeter::meter_metrics_expose (GdkEventExpose *ev) win->draw_rectangle (bg_gc, true, 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; } +int +GainMeter::redraw_pixmaps(string blah) +{ + style_changed = true; +} + GainMeter::~GainMeter () { if (meter_menu) { diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index b12f7eb31b..c97ca80971 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -186,6 +186,8 @@ class GainMeter : public Gtk::VBox static Glib::RefPtr<Gdk::Pixbuf> slider; static Glib::RefPtr<Gdk::Pixbuf> rail; static int setup_slider_pix (); + int redraw_pixmaps(string); + bool style_changed; }; #endif /* __ardour_gtk_gain_meter_h__ */ |