Better method for redrawing gain meter pixmaps upon theme change
authorDoug McLain <doug@nostar.net>
Sat, 26 May 2007 13:47:28 +0000 (13:47 +0000)
committerDoug McLain <doug@nostar.net>
Sat, 26 May 2007 13:47:28 +0000 (13:47 +0000)
git-svn-id: svn://localhost/ardour2/trunk@1921 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/gain_meter.cc
gtk2_ardour/gain_meter.h

index 7009e2521d26ab2f5a07735fc4d26f28ccbf5c72..9ad23bb80cefd33679b2a1e81532348edb35453e 100644 (file)
@@ -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) {
index b12f7eb31b71cd3810928f115092732053606c5c..c97ca80971b258bcf0dddf5d86f2431f35cb2b06 100644 (file)
@@ -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__ */