change FastMeter drawing implementation to use Cairo instead of GDK; some subtle...
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / pixfader.h
index d974f5d5bc64b153d7028ca5d51596c9039d0c75..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);
+       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,24 +48,43 @@ class PixFader : public Gtk::DrawingArea {
        bool on_button_release_event (GdkEventButton*);
        bool on_motion_notify_event (GdkEventMotion*);
        bool on_scroll_event (GdkEventScroll* ev);
-
-  private:  
-       Glib::RefPtr<Gdk::Pixbuf> pixbuf;
-       gint pixheight;
+       bool on_enter_notify_event (GdkEventCrossing* ev);
+       bool on_leave_notify_event (GdkEventCrossing* ev);
+
+       enum Orientation {
+               VERT=1,
+               HORIZ=2,
+       };
+
+  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;
 
        GdkWindow* grab_window;
-       double grab_y;
+       double grab_loc;
        double grab_start;
        int last_drawn;
        bool dragging;
        float default_value;
-       int unity_y;
+       int unity_loc;
 
        void adjustment_changed ();
+       int display_span ();
+       void set_adjustment_from_event (GdkEventButton *);
 
-       int display_height ();
+       static int fine_scale_modifier;
+       static int extra_fine_scale_modifier;
 };