diff options
author | Robin Gareus <robin@gareus.org> | 2017-07-16 22:13:46 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-07-17 21:06:04 +0200 |
commit | f6e182b937efda6ed0ba50dbc02af98524beb61c (patch) | |
tree | c5304cbfc96a82f00582ef038e2a9223881a7489 /libs/widgets/widgets | |
parent | b6e4dfe37be32009ce7ffc58d4a6139923c12981 (diff) |
Move Gtkmm2ext widgets into libwidget
Diffstat (limited to 'libs/widgets/widgets')
-rw-r--r-- | libs/widgets/widgets/ardour_fader.h | 158 | ||||
-rw-r--r-- | libs/widgets/widgets/auto_spin.h | 76 | ||||
-rw-r--r-- | libs/widgets/widgets/barcontroller.h | 83 | ||||
-rw-r--r-- | libs/widgets/widgets/click_box.h | 81 | ||||
-rw-r--r-- | libs/widgets/widgets/fastmeter.h | 177 | ||||
-rw-r--r-- | libs/widgets/widgets/focus_entry.h | 43 | ||||
-rw-r--r-- | libs/widgets/widgets/searchbar.h | 40 | ||||
-rw-r--r-- | libs/widgets/widgets/slider_controller.h | 81 |
8 files changed, 739 insertions, 0 deletions
diff --git a/libs/widgets/widgets/ardour_fader.h b/libs/widgets/widgets/ardour_fader.h new file mode 100644 index 0000000000..b9270cae51 --- /dev/null +++ b/libs/widgets/widgets/ardour_fader.h @@ -0,0 +1,158 @@ +/* + Copyright (C) 2006 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_ARDOUR_FADER_H_ +#define _WIDGETS_ARDOUR_FADER_H_ + +#include <cmath> +#include <stdint.h> + +#include <gdkmm.h> +#include <gtkmm/adjustment.h> + +#include "gtkmm2ext/cairo_widget.h" +#include "widgets/visibility.h" + +namespace ArdourWidgets { + +class LIBWIDGETS_API ArdourFader : public CairoWidget +{ +public: + ArdourFader (Gtk::Adjustment& adjustment, int orientation, int span, int girth); + virtual ~ArdourFader (); + static void flush_pattern_cache(); + + sigc::signal<void> StartGesture; + sigc::signal<void> StopGesture; + sigc::signal<void> OnExpose; + + void set_default_value (float); + void set_text (const std::string&, bool centered = true, bool expose = true); + + enum Tweaks { + NoShowUnityLine = 0x1, + NoButtonForward = 0x2, + NoVerticalScroll = 0x4, + }; + + Tweaks tweaks() const { return _tweaks; } + void set_tweaks (Tweaks); + +protected: + void on_size_request (GtkRequisition*); + void on_size_allocate (Gtk::Allocation& alloc); + + void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*); + bool on_grab_broken_event (GdkEventGrabBroken*); + bool on_button_press_event (GdkEventButton*); + bool on_button_release_event (GdkEventButton*); + bool on_motion_notify_event (GdkEventMotion*); + bool on_scroll_event (GdkEventScroll* ev); + bool on_enter_notify_event (GdkEventCrossing* ev); + bool on_leave_notify_event (GdkEventCrossing* ev); + + void on_state_changed (Gtk::StateType); + void on_style_changed (const Glib::RefPtr<Gtk::Style>&); + + enum Orientation { + VERT, + HORIZ, + }; + +private: + Glib::RefPtr<Pango::Layout> _layout; + std::string _text; + Tweaks _tweaks; + Gtk::Adjustment& _adjustment; + int _text_width; + int _text_height; + + int _span, _girth; + int _min_span, _min_girth; + int _orien; + cairo_pattern_t* _pattern; + bool _hovering; + GdkWindow* _grab_window; + double _grab_loc; + double _grab_start; + bool _dragging; + float _default_value; + int _unity_loc; + bool _centered_text; + + sigc::connection _parent_style_change; + Widget * _current_parent; + Gdk::Color get_parent_bg (); + + void create_patterns(); + void adjustment_changed (); + void set_adjustment_from_event (GdkEventButton *); + void update_unity_position (); + int display_span (); + + struct FaderImage { + cairo_pattern_t* pattern; + double fr; + double fg; + double fb; + double br; + double bg; + double bb; + int width; + int height; + + FaderImage (cairo_pattern_t* p, + double afr, double afg, double afb, + double abr, double abg, double abb, + int w, int h) + : pattern (p) + , fr (afr) + , fg (afg) + , fb (afb) + , br (abr) + , bg (abg) + , bb (abb) + , width (w) + , height (h) + {} + + bool matches (double afr, double afg, double afb, + double abr, double abg, double abb, + int w, int h) { + return width == w && + height == h && + afr == fr && + afg == fg && + afb == fb && + abr == br && + abg == bg && + abb == bb; + } + }; + + static std::list<FaderImage*> _patterns; + static cairo_pattern_t* find_pattern (double afr, double afg, double afb, + double abr, double abg, double abb, + int w, int h); + +}; + +} /* namespace */ + +#endif /* __gtkmm2ext_pixfader_h__ */ diff --git a/libs/widgets/widgets/auto_spin.h b/libs/widgets/widgets/auto_spin.h new file mode 100644 index 0000000000..ecea31e7fe --- /dev/null +++ b/libs/widgets/widgets/auto_spin.h @@ -0,0 +1,76 @@ +/* + Copyright (C) 2000 Paul Barton-Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_AUTO_SPIN_H_ +#define _WIDGETS_AUTO_SPIN_H_ + +#ifdef interface +#undef interface +#endif + +#include <gtkmm.h> + +#include "widgets/visibility.h" + +namespace ArdourWidgets { + +class LIBWIDGETS_API AutoSpin +{ +public: + AutoSpin (Gtk::Adjustment &adj, gfloat cr = 0, bool round_to_steps_yn = false); + + Gtk::Adjustment &get_adjustment() { return adjustment; } + + void use_left_as_decrement (bool yn) { left_is_decrement = yn; } + void set_wrap (bool yn) { wrap = yn; } + void set_climb_rate (gfloat cr) { climb_rate = cr; } + void set_bounds (gfloat initial, gfloat low, gfloat high, bool with_reset = true); + + gint button_press (GdkEventButton *); + gint stop_spinning (GdkEventButton *ignored_but_here_for_clicked); + void start_spinning (bool decrementing, bool use_page); + gint scroll_event (GdkEventScroll *); + +private: + Gtk::Adjustment &adjustment; + gfloat climb_rate; + gfloat timer_increment; + gfloat initial; + unsigned int timer_calls; + bool have_timer; + bool need_timer; + bool wrap; + gint timeout_tag; + bool left_is_decrement; + bool round_to_steps; + + static const unsigned int initial_timer_interval; + static const unsigned int timer_interval; + static const unsigned int climb_timer_calls; + + void stop_timer (); + static gint _timer (void *arg); + gint timer (); + bool adjust_value (gfloat increment); + void set_value (gfloat value); +}; + +} /* namespace */ + +#endif diff --git a/libs/widgets/widgets/barcontroller.h b/libs/widgets/widgets/barcontroller.h new file mode 100644 index 0000000000..fc2ac358cc --- /dev/null +++ b/libs/widgets/widgets/barcontroller.h @@ -0,0 +1,83 @@ +/* + Copyright (C) 2004 Paul Davis + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_BAR_CONTROLLER_H_ +#define _WIDGETS_BAR_CONTROLLER_H_ + +#include <gtkmm/alignment.h> +#include <cairo.h> + +#include "gtkmm2ext/binding_proxy.h" +#include "widgets/slider_controller.h" +#include "widgets/visibility.h" + +namespace ArdourWidgets { + +class LIBWIDGETS_API BarController : public Gtk::Alignment +{ +public: + BarController (Gtk::Adjustment& adj, boost::shared_ptr<PBD::Controllable>); + + virtual ~BarController (); + + void set_sensitive (bool yn); + + ArdourFader::Tweaks tweaks() const { return _slider.tweaks (); } + void set_tweaks (ArdourFader::Tweaks t) { _slider.set_tweaks (t);} + + sigc::signal<void> StartGesture; + sigc::signal<void> StopGesture; + + /* export this to allow direct connection to button events */ + Gtk::Widget& event_widget() { return _slider; } + + /** Emitted when the adjustment spinner is activated or deactivated; + * the parameter is true on activation, false on deactivation. + */ + sigc::signal<void, bool> SpinnerActive; + +protected: + bool on_button_press_event (GdkEventButton*); + bool on_button_release_event (GdkEventButton*); + void on_style_changed (const Glib::RefPtr<Gtk::Style>&); + + virtual std::string get_label (double& /*x*/) { + return ""; + } + +private: + HSliderController _slider; + bool entry_focus_out (GdkEventFocus*); + void entry_activated (); + void before_expose (); + + gint switch_to_bar (); + gint switch_to_spinner (); + + bool _switching; + bool _switch_on_release; + + + void passtrhu_gesture_start() { StartGesture (); } + void passtrhu_gesture_stop() { StopGesture (); } +}; + + +}; /* namespace */ + +#endif // __gtkmm2ext_bar_controller_h__ diff --git a/libs/widgets/widgets/click_box.h b/libs/widgets/widgets/click_box.h new file mode 100644 index 0000000000..fa4868467f --- /dev/null +++ b/libs/widgets/widgets/click_box.h @@ -0,0 +1,81 @@ +/* + Copyright (C) 1999 Paul Barton-Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_CLICK_BOX_H_ +#define _WIDGETS_CLICK_BOX_H_ + +#ifdef interface +#undef interface +#endif + +#include <string> +#include <gtkmm.h> + +#include "gtkmm2ext/binding_proxy.h" + +#include "widgets/auto_spin.h" +#include "widgets/visibility.h" + +namespace PBD { + class Controllable; +} + +namespace ArdourWidgets { + +class LIBWIDGETS_API ClickBox : public Gtk::DrawingArea, public AutoSpin +{ + public: + ClickBox (Gtk::Adjustment *adj, const std::string &name, bool round_to_steps = false); + ~ClickBox (); + + /** Set a slot to `print' the value to put in the box. + * The slot should write the value of the Gtk::Adjustment + * into the char array, and should return true if it has done the printing, + * or false to use the ClickBox's default printing method. + */ + void set_printer (sigc::slot<bool, char *, Gtk::Adjustment &>); + + void set_controllable (boost::shared_ptr<PBD::Controllable> c) { + _binding_proxy.set_controllable (c); + } + + protected: + bool on_expose_event (GdkEventExpose*); + bool on_enter_notify_event (GdkEventCrossing* ev); + bool on_leave_notify_event (GdkEventCrossing* ev); + + BindingProxy _binding_proxy; + + private: + Glib::RefPtr<Pango::Layout> layout; + int twidth; + int theight; + + void set_label (); + void style_changed (const Glib::RefPtr<Gtk::Style> &); + bool button_press_handler (GdkEventButton *); + bool button_release_handler (GdkEventButton *); + bool on_scroll_event (GdkEventScroll*); + + sigc::slot<bool, char *, Gtk::Adjustment &> _printer; +}; + +} /* namespace */ + +#endif diff --git a/libs/widgets/widgets/fastmeter.h b/libs/widgets/widgets/fastmeter.h new file mode 100644 index 0000000000..b1d2f3f4f9 --- /dev/null +++ b/libs/widgets/widgets/fastmeter.h @@ -0,0 +1,177 @@ +/* + Copyright (C) 2003 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_FAST_METER_H_ +#define _WIDGETS_FAST_METER_H_ + +#include <map> +#include <boost/tuple/tuple.hpp> +#include <boost/tuple/tuple_comparison.hpp> +#include <cairomm/pattern.h> +#include "gtkmm2ext/cairo_widget.h" + +#include "widgets/visibility.h" + +namespace ArdourWidgets { + +class LIBWIDGETS_API FastMeter : public CairoWidget { +public: + enum Orientation { + Horizontal, + Vertical + }; + + FastMeter (long hold_cnt, unsigned long width, Orientation, int len=0, + int clr0=0x008800ff, int clr1=0x008800ff, + int clr2=0x00ff00ff, int clr3=0x00ff00ff, + int clr4=0xffaa00ff, int clr5=0xffaa00ff, + int clr6=0xffff00ff, int clr7=0xffff00ff, + int clr8=0xff0000ff, int clr9=0xff0000ff, + int bgc0=0x333333ff, int bgc1=0x444444ff, + int bgh0=0x991122ff, int bgh1=0x551111ff, + float stp0 = 55.0, // log_meter(-18); + float stp1 = 77.5, // log_meter(-9); + float stp2 = 92.5, // log_meter(-3); // 95.0, // log_meter(-2); + float stp3 = 100.0, + int styleflags = 3 + ); + virtual ~FastMeter (); + static void flush_pattern_cache(); + + void set (float level, float peak = -1); + void clear (); + + float get_level() { return current_level; } + float get_user_level() { return current_user_level; } + float get_peak() { return current_peak; } + + long hold_count() { return hold_cnt; } + void set_hold_count (long); + void set_highlight (bool); + bool get_highlight () { return highlight; } + void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*); + +protected: + void on_size_request (GtkRequisition*); + void on_size_allocate (Gtk::Allocation&); + +private: + Cairo::RefPtr<Cairo::Pattern> fgpattern; + Cairo::RefPtr<Cairo::Pattern> bgpattern; + gint pixheight; + gint pixwidth; + + float _stp[4]; + int _clr[10]; + int _bgc[2]; + int _bgh[2]; + int _styleflags; + + Orientation orientation; + GdkRectangle pixrect; + GdkRectangle last_peak_rect; + gint request_width; + gint request_height; + unsigned long hold_cnt; + unsigned long hold_state; + bool bright_hold; + float current_level; + float current_peak; + float current_user_level; + bool highlight; + + void vertical_expose (cairo_t*, cairo_rectangle_t*); + void vertical_size_request (GtkRequisition*); + void vertical_size_allocate (Gtk::Allocation&); + void queue_vertical_redraw (const Glib::RefPtr<Gdk::Window>&, float); + + void horizontal_expose (cairo_t*, cairo_rectangle_t*); + void horizontal_size_request (GtkRequisition*); + void horizontal_size_allocate (Gtk::Allocation&); + void queue_horizontal_redraw (const Glib::RefPtr<Gdk::Window>&, float); + + static bool no_rgba_overlay; + + static Cairo::RefPtr<Cairo::Pattern> generate_meter_pattern ( + int, int, int *, float *, int, bool); + static Cairo::RefPtr<Cairo::Pattern> request_vertical_meter ( + int, int, int *, float *, int); + static Cairo::RefPtr<Cairo::Pattern> request_horizontal_meter ( + int, int, int *, float *, int); + + static Cairo::RefPtr<Cairo::Pattern> generate_meter_background ( + int, int, int *, bool, bool); + static Cairo::RefPtr<Cairo::Pattern> request_vertical_background ( + int, int, int *, bool); + static Cairo::RefPtr<Cairo::Pattern> request_horizontal_background ( + int, int, int *, bool); + + struct Pattern10MapKey { + Pattern10MapKey ( + int w, int h, + float stp0, float stp1, float stp2, float stp3, + int c0, int c1, int c2, int c3, + int c4, int c5, int c6, int c7, + int c8, int c9, int st + ) + : dim(w, h) + , stp(stp0, stp1, stp2, stp3) + , cols(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9) + , style(st) + {} + inline bool operator<(const Pattern10MapKey& rhs) const { + return (dim < rhs.dim) + || (dim == rhs.dim && stp < rhs.stp) + || (dim == rhs.dim && stp == rhs.stp && cols < rhs.cols) + || (dim == rhs.dim && stp == rhs.stp && cols == rhs.cols && style < rhs.style); + } + boost::tuple<int, int> dim; + boost::tuple<float, float, float, float> stp; + boost::tuple<int, int, int, int, int, int, int, int, int, int> cols; + int style; + }; + typedef std::map<Pattern10MapKey, Cairo::RefPtr<Cairo::Pattern> > Pattern10Map; + + struct PatternBgMapKey { + PatternBgMapKey (int w, int h, int c0, int c1, bool shade) + : dim(w, h) + , cols(c0, c1) + , sh(shade) + {} + inline bool operator<(const PatternBgMapKey& rhs) const { + return (dim < rhs.dim) || (dim == rhs.dim && cols < rhs.cols) || (dim == rhs.dim && cols == rhs.cols && (sh && !rhs.sh)); + } + boost::tuple<int, int> dim; + boost::tuple<int, int> cols; + bool sh; + }; + typedef std::map<PatternBgMapKey, Cairo::RefPtr<Cairo::Pattern> > PatternBgMap; + + static Pattern10Map vm_pattern_cache; + static PatternBgMap vb_pattern_cache; + static Pattern10Map hm_pattern_cache; + static PatternBgMap hb_pattern_cache; + static int min_pattern_metric_size; // min dimension for axis that displays the meter level + static int max_pattern_metric_size; // max dimension for axis that displays the meter level +}; + + +} /* namespace */ + +#endif diff --git a/libs/widgets/widgets/focus_entry.h b/libs/widgets/widgets/focus_entry.h new file mode 100644 index 0000000000..f0fa22232b --- /dev/null +++ b/libs/widgets/widgets/focus_entry.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2000-2007 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_FOCUS_ENTRY_H_ +#define _WIDGETS_FOCUS_ENTRY_H_ + +#include <gtkmm/entry.h> + +#include "widgets/visibility.h" + +namespace ArdourWidgets { + +class LIBWIDGETS_API FocusEntry : public Gtk::Entry +{ +public: + FocusEntry (); + +protected: + bool on_button_press_event (GdkEventButton*); + bool on_button_release_event (GdkEventButton*); +private: + bool next_release_selects; +}; + +} /* end namespace */ + +#endif diff --git a/libs/widgets/widgets/searchbar.h b/libs/widgets/widgets/searchbar.h new file mode 100644 index 0000000000..2b3957f38f --- /dev/null +++ b/libs/widgets/widgets/searchbar.h @@ -0,0 +1,40 @@ +#pragma once + +#include <gtkmm/entry.h> +#include <string> + +#include "widgets/visibility.h" + +namespace ArdourWidgets { + +class LIBWIDGETS_API SearchBar : public Gtk::Entry +{ +public: + SearchBar ( + const std::string& placeholder_text = "Search...", + bool icon_click_resets = true); + + /** resets the searchbar to the initial state */ + void reset (); + + /* emitted when the filter has been updated */ + sigc::signal<void, const std::string&> signal_search_string_updated () { return sig_search_string_updated; } + +protected: + bool focus_in_event (GdkEventFocus*); + bool focus_out_event (GdkEventFocus*); + + bool key_press_event (GdkEventKey*); + void icon_clicked_event (Gtk::EntryIconPosition, const GdkEventButton*); + + const std::string placeholder_text; + sigc::signal<void, const std::string&> sig_search_string_updated; + +private: + void search_string_changed () const; + + Glib::RefPtr<Gdk::Pixbuf> icon; + bool icon_click_resets; +}; + +} /* end namespace */ diff --git a/libs/widgets/widgets/slider_controller.h b/libs/widgets/widgets/slider_controller.h new file mode 100644 index 0000000000..e80e76d7bc --- /dev/null +++ b/libs/widgets/widgets/slider_controller.h @@ -0,0 +1,81 @@ +/* + Copyright (C) 1998-2006 Paul Davis + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef _WIDGETS_SLIDER_CONTROLLER_H_ +#define _WIDGETS_SLIDER_CONTROLLER_H_ + +#ifdef interface +#undef interface +#endif + +#include <gtkmm.h> +#include <boost/shared_ptr.hpp> + +#include "gtkmm2ext/popup.h" +#include "gtkmm2ext/binding_proxy.h" + +#include "widgets/ardour_fader.h" +#include "widgets/visibility.h" + +namespace PBD { + class Controllable; +} + +namespace ArdourWidgets { + +class LIBWIDGETS_API SliderController : public ArdourWidgets::ArdourFader +{ +public: + SliderController (Gtk::Adjustment* adj, boost::shared_ptr<PBD::Controllable> mc, int orientation, int, int); + + virtual ~SliderController () {} + + Gtk::SpinButton& get_spin_button () { assert(_ctrl); return _spin; } + void set_controllable (boost::shared_ptr<PBD::Controllable> c) { _binding_proxy.set_controllable (c); } + +protected: + bool on_button_press_event (GdkEventButton *ev); + bool on_enter_notify_event (GdkEventCrossing* ev); + bool on_leave_notify_event (GdkEventCrossing* ev); + void ctrl_adjusted(); + void spin_adjusted(); + + BindingProxy _binding_proxy; + boost::shared_ptr<PBD::Controllable> _ctrl; + Gtk::Adjustment *_ctrl_adj; + Gtk::Adjustment _spin_adj; + Gtk::SpinButton _spin; + bool _ctrl_ignore; + bool _spin_ignore; +}; + +class LIBWIDGETS_API VSliderController : public SliderController +{ +public: + VSliderController (Gtk::Adjustment *adj, boost::shared_ptr<PBD::Controllable> mc, int, int); +}; + +class LIBWIDGETS_API HSliderController : public SliderController +{ +public: + HSliderController (Gtk::Adjustment *adj, boost::shared_ptr<PBD::Controllable> mc, int, int); +}; + +}; /* namespace */ + +#endif |