X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fcairo_widget.h;h=d3eac0bb0227c10f6a1fbbff3098c16ba568b6a3;hb=5b45dc04dfba73846893a8c591c4175c20b3415f;hp=8665f66198981e03ed39a2fd932ede6025979beb;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/gtk2_ardour/cairo_widget.h b/gtk2_ardour/cairo_widget.h index 8665f66198..d3eac0bb02 100644 --- a/gtk2_ardour/cairo_widget.h +++ b/gtk2_ardour/cairo_widget.h @@ -21,10 +21,9 @@ #define __gtk2_ardour_cairo_widget_h__ #include +#include "gtkmm2ext/widget_state.h" -/** A parent class for widgets that are made up of a pixmap rendered using Cairo. - * The pixmap is painted to screen on GTK expose events, but the rendering - * is only done after set_dirty() has been called. +/** A parent class for widgets that are rendered using Cairo. */ class CairoWidget : public Gtk::EventBox @@ -35,17 +34,29 @@ public: void set_dirty (); + Gtkmm2ext::ActiveState active_state() const { return _active_state; } + Gtkmm2ext::VisualState visual_state() const { return _visual_state; } + virtual void set_active_state (Gtkmm2ext::ActiveState); + virtual void set_visual_state (Gtkmm2ext::VisualState); + virtual void unset_active_state () { set_active_state (Gtkmm2ext::ActiveState (0)); } + virtual void unset_visual_state () { set_visual_state (Gtkmm2ext::VisualState (0)); } + + sigc::signal StateChanged; + protected: /** Render the widget to the given Cairo context */ virtual void render (cairo_t *) = 0; virtual bool on_expose_event (GdkEventExpose *); void on_size_allocate (Gtk::Allocation &); + void on_state_changed (Gtk::StateType); + Gdk::Color get_parent_bg (); int _width; ///< pixmap width int _height; ///< pixmap height + Gtkmm2ext::ActiveState _active_state; + Gtkmm2ext::VisualState _visual_state; private: - bool _dirty; ///< true if the pixmap requires re-rendering GdkPixmap* _pixmap; ///< our pixmap };