Use correct default value for MIDI faders, and put the
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / pixfader.h
index 4d0edc46b7c0a6b1e2ebf104592c6043a8247082..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> base, 
-                 Glib::RefPtr<Gdk::Pixbuf> handle,
-                 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;
 
@@ -46,27 +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> base_pixbuf;
-       Glib::RefPtr<Gdk::Pixbuf> handle_pixbuf;
-       gint pixheight;
-
-       GdkRectangle pixrect;
+       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 () {
-               return (int) floor (pixheight * (1.0 - (adjustment.get_upper() - adjustment.get_value ()) / ((adjustment.get_upper() - adjustment.get_lower()))));
-       }
+       static int fine_scale_modifier;
+       static int extra_fine_scale_modifier;
 };