summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/gtkmm2ext/gtkmm2ext/motionfeedback.h')
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/motionfeedback.h64
1 files changed, 38 insertions, 26 deletions
diff --git a/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h b/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h
index 84b2ae7154..0eaf78ed55 100644
--- a/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h
+++ b/libs/gtkmm2ext/gtkmm2ext/motionfeedback.h
@@ -20,6 +20,8 @@
#ifndef __gtkmm2ext_motion_feedback_h__
#define __gtkmm2ext_motion_feedback_h__
+#include "pbd/signals.h"
+
#include <gdkmm/pixbuf.h>
#include <gtkmm/box.h>
#include <gtkmm/eventbox.h>
@@ -45,33 +47,38 @@ class MotionFeedback : public Gtk::VBox
MotionFeedback (Glib::RefPtr<Gdk::Pixbuf>,
Type type,
+ boost::shared_ptr<PBD::Controllable>,
+ double default_value,
+ double step_increment,
+ double page_increment,
const char *widget_name = NULL,
- Gtk::Adjustment *adj = NULL,
bool with_numeric_display = true,
int sub_image_width = 40,
int sub_image_height = 40);
virtual ~MotionFeedback ();
- void set_adjustment (Gtk::Adjustment *adj);
- Gtk::Adjustment *get_adjustment () { return adjustment; }
-
- Gtk::Widget& eventwin () { return pixwin; }
- Gtk::SpinButton& spinner() const { return *value; }
+ Gtk::Widget& eventwin () { return pixwin; }
+ Gtk::Entry& value_display() const { return *value; }
- gfloat lower () { return _lower; }
- gfloat upper () { return _upper; }
- gfloat range () { return _range; }
-
boost::shared_ptr<PBD::Controllable> controllable() const;
virtual void set_controllable (boost::shared_ptr<PBD::Controllable> c);
+
void set_lamp_color (const Gdk::Color&);
static Glib::RefPtr<Gdk::Pixbuf> render_pixbuf (int size);
+ void set_print_func(void (*pf)(char buf[32], const boost::shared_ptr<PBD::Controllable>&, void *),
+ void *arg) {
+ print_func = pf;
+ print_arg = arg;
+ };
+
protected:
- gfloat _range;
- gfloat _lower;
- gfloat _upper;
+ boost::shared_ptr<PBD::Controllable> _controllable;
+ Gtk::Entry* value;
+ double default_value;
+ double step_inc;
+ double page_inc;
void pixwin_size_request (GtkRequisition *);
@@ -85,32 +92,37 @@ class MotionFeedback : public Gtk::VBox
bool pixwin_focus_out_event (GdkEventFocus *);
bool pixwin_expose_event (GdkEventExpose*);
bool pixwin_scroll_event (GdkEventScroll*);
- void pixwin_realized ();
+
+ /* map a display value (0.0 .. 1.0) to a control
+ value (controllable->lower() .. controllable()->upper)
+ */
+ virtual double to_control_value (double) = 0;
+
+ /* map a control value (controllable->lower() .. controllable()->upper)
+ to a display value (0.0 .. 1.0)
+ */
+ virtual double to_display_value (double) = 0;
+
+ double adjust (double control_value, double display_delta);
private:
Type type;
Gtk::EventBox pixwin;
Gtk::HBox* value_packer;
- Gtk::SpinButton* value;
- Gtk::Adjustment* adjustment;
Glib::RefPtr<Gdk::Pixbuf> pixbuf;
BindingProxy binding_proxy;
- double default_value;
- double step_inc;
- double page_inc;
+ void (*print_func) (char buf[32], const boost::shared_ptr<PBD::Controllable>&, void *);
+ void *print_arg;
+ static void default_printer (char buf[32], const boost::shared_ptr<PBD::Controllable>&, void *);
+
bool grab_is_fine;
double grabbed_y;
double grabbed_x;
- bool i_own_my_adjustment;
int subwidth;
int subheight;
- void adjustment_changed ();
-
- ProlooksHSV* lamp_hsv;
- Gdk::Color _lamp_color;
- GdkColor lamp_bright;
- GdkColor lamp_dark;
+ void controllable_value_changed ();
+ PBD::ScopedConnection controller_connection;
static void core_draw (cairo_t*, int, double, double, double, double, const GdkColor* bright, const GdkColor* dark);
};