fix merge conflict from master
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / pixfader.h
index 039a822bcdafb57c3b9950c4174385f8ff13092d..2953cc633340bfc065f0bc687008e61cf4764f54 100644 (file)
@@ -35,7 +35,6 @@ class PixFader : public Gtk::DrawingArea
         PixFader (Gtk::Adjustment& adjustment, int orientation, int span, int girth);
        virtual ~PixFader ();
 
-       void set_fader_length (int);
        void set_default_value (float);
        void set_text (const std::string&);
 
@@ -61,6 +60,7 @@ class PixFader : public Gtk::DrawingArea
        bool on_enter_notify_event (GdkEventCrossing* ev);
        bool on_leave_notify_event (GdkEventCrossing* ev);
         void on_state_changed (Gtk::StateType);
+        void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
 
        enum Orientation {
                VERT,
@@ -70,9 +70,52 @@ class PixFader : public Gtk::DrawingArea
   private:
        int span, girth;
        int _orien;
+        cairo_pattern_t* pattern;
+
+        struct FaderImage {
+           cairo_pattern_t* pattern;
+           double fr;
+           double fg;
+           double fb;
+           double br;
+           double bg;
+           double bb;
+           int width;
+           int height;
+
+           FaderImage (cairo_pattern_t* p, 
+                       double afr, double afg, double afb, 
+                       double abr, double abg, double abb,
+                       int w, int h) 
+                   : pattern (p)
+                   , fr (afr)
+                   , fg (afg)
+                   , fb (afb)
+                   , br (abr)
+                   , bg (abg)
+                   , bb (abb)
+                   , width (w)
+                   , height (h)
+           {}
+
+           bool matches (double afr, double afg, double afb, 
+                         double abr, double abg, double abb,
+                         int w, int h) {
+                   return width == w && 
+                           height == h &&
+                           afr == fr &&
+                           afg == fg && 
+                           afb == fb &&
+                           abr == br &&
+                           abg == bg && 
+                           abb == bb;
+           }
+       };
 
-       cairo_pattern_t* pattern;
-       cairo_pattern_t* texture_pattern;
+        static std::list<FaderImage*> _patterns;
+        static cairo_pattern_t* find_pattern (double afr, double afg, double afb, 
+                                             double abr, double abg, double abb, 
+                                             int w, int h);
 
        bool _hovering;
 
@@ -88,7 +131,6 @@ class PixFader : public Gtk::DrawingArea
        int display_span ();
        void set_adjustment_from_event (GdkEventButton *);
        void update_unity_position ();
-        void free_patterns ();
        void create_patterns();
 };