change FastMeter drawing implementation to use Cairo instead of GDK; some subtle...
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / pixfader.h
index 519e1c9e1e6acf657d1f77a33c4b300d9657c26c..00a42769beeab7f1d65359f5dce9e94b55edd60b 100644 (file)
 #define __gtkmm2ext_pixfader_h__
 
 #include <cmath>
+#include <stdint.h>
 
 #include <gtkmm/drawingarea.h>
 #include <gtkmm/adjustment.h>
-#include <gdkmm/pixbuf.h>
+#include <gdkmm.h>
 
 namespace Gtkmm2ext {
 
-class PixFader : public Gtk::DrawingArea {
+class PixFader : public Gtk::DrawingArea
+{
   public:
-       PixFader (Glib::RefPtr<Gdk::Pixbuf> belt_image, Gtk::Adjustment& adjustment, int orientation);
+       PixFader (Glib::RefPtr<Gdk::Pixbuf> belt_image, Gtk::Adjustment& adjustment, int orientation, int);
        virtual ~PixFader ();
-       
+
+       void set_fader_length (int);
+        void set_border_colors (uint32_t rgba_left, uint32_t rgba_right);
+
   protected:
        Gtk::Adjustment& adjustment;
 
@@ -43,16 +48,26 @@ class PixFader : public Gtk::DrawingArea {
        bool on_button_release_event (GdkEventButton*);
        bool on_motion_notify_event (GdkEventMotion*);
        bool on_scroll_event (GdkEventScroll* ev);
+       bool on_enter_notify_event (GdkEventCrossing* ev);
+       bool on_leave_notify_event (GdkEventCrossing* ev);
 
        enum Orientation {
                VERT=1,
                HORIZ=2,
        };
 
-  private:
-       Glib::RefPtr<Gdk::Pixbuf> pixbuf;
+  private:     
+        Cairo::RefPtr<Cairo::Context> belt_context;
+        Cairo::RefPtr<Cairo::ImageSurface> belt_surface;
+        Glib::RefPtr<Gdk::Pixbuf> pixbuf;
        int span, girth;
        int _orien;
+        float left_r;
+        float left_g;
+        float left_b;
+        float right_r;
+        float right_g;
+        float right_b;
 
        GdkRectangle view;
 
@@ -65,8 +80,8 @@ class PixFader : public Gtk::DrawingArea {
        int unity_loc;
 
        void adjustment_changed ();
-
        int display_span ();
+       void set_adjustment_from_event (GdkEventButton *);
 
        static int fine_scale_modifier;
        static int extra_fine_scale_modifier;