+ queue_draw ();
+}
+
+void
+PixFader::on_style_changed (const Glib::RefPtr<Gtk::Style>&)
+{
+ if (_layout) {
+ std::string txt = _layout->get_text();
+ _layout.clear (); // drop reference to existing layout
+ _text = "";
+ set_text (txt, _centered_text, false);
+ }
+ /* patterns are cached and re-created as needed
+ * during 'expose' in the GUI thread */
+ _pattern = 0;
+ queue_draw ();
+}
+
+Gdk::Color
+PixFader::get_parent_bg ()
+{
+ Widget* parent = get_parent ();
+
+ while (parent) {
+ if (parent->get_has_window()) {
+ break;
+ }
+ parent = parent->get_parent();
+ }
+
+ if (parent && parent->get_has_window()) {
+ if (_current_parent != parent) {
+ if (_parent_style_change) _parent_style_change.disconnect();
+ _current_parent = parent;
+ _parent_style_change = parent->signal_style_changed().connect (mem_fun (*this, &PixFader::on_style_changed));
+ }
+ return parent->get_style ()->get_bg (parent->get_state());
+ }
+
+ return get_style ()->get_bg (get_state());