provide C API for rounded rectangle cairo utility
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / pixfader.h
index bb4176240a678193acb8189df7aa6866ebb791d9..43df8e555e340a6c1c27238eb5c9d8fc0a830669 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: fastmeter.h 570 2006-06-07 21:21:21Z sampo $
 */
 
 #ifndef __gtkmm2ext_pixfader_h__
 #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);
+
+       void set_default_value (float);
+
   protected:
        Gtk::Adjustment& adjustment;
 
@@ -44,24 +50,44 @@ 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 *);
+       void update_unity_position ();
 
-       int display_height ();
+       static int fine_scale_modifier;
+       static int extra_fine_scale_modifier;
 };