4d0edc46b7c0a6b1e2ebf104592c6043a8247082
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / pixfader.h
1 /*
2     Copyright (C) 2006 Paul Davis 
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18     $Id: fastmeter.h 570 2006-06-07 21:21:21Z sampo $
19 */
20
21 #ifndef __gtkmm2ext_pixfader_h__
22 #define __gtkmm2ext_pixfader_h__
23
24 #include <cmath>
25
26 #include <gtkmm/drawingarea.h>
27 #include <gtkmm/adjustment.h>
28 #include <gdkmm/pixbuf.h>
29
30 namespace Gtkmm2ext {
31
32 class PixFader : public Gtk::DrawingArea {
33   public:
34         PixFader (Glib::RefPtr<Gdk::Pixbuf> base, 
35                   Glib::RefPtr<Gdk::Pixbuf> handle,
36                   Gtk::Adjustment& adjustment);
37         virtual ~PixFader ();
38         
39   protected:
40         Gtk::Adjustment& adjustment;
41
42         void on_size_request (GtkRequisition*);
43
44         bool on_expose_event (GdkEventExpose*);
45         bool on_button_press_event (GdkEventButton*);
46         bool on_button_release_event (GdkEventButton*);
47         bool on_motion_notify_event (GdkEventMotion*);
48         bool on_scroll_event (GdkEventScroll* ev);
49
50   private:  
51         Glib::RefPtr<Gdk::Pixbuf> base_pixbuf;
52         Glib::RefPtr<Gdk::Pixbuf> handle_pixbuf;
53         gint pixheight;
54
55         GdkRectangle pixrect;
56
57         GdkWindow* grab_window;
58         double grab_y;
59         double grab_start;
60         int last_drawn;
61         bool dragging;
62         float default_value;
63         int unity_y;
64
65         void adjustment_changed ();
66
67         int display_height () {
68                 return (int) floor (pixheight * (1.0 - (adjustment.get_upper() - adjustment.get_value ()) / ((adjustment.get_upper() - adjustment.get_lower()))));
69         }
70 };
71
72
73 } /* namespace */
74
75  #endif /* __gtkmm2ext_pixfader_h__ */