From 0180909a386edefb84a7fb54bea7379641e58154 Mon Sep 17 00:00:00 2001 From: VKamyshniy Date: Tue, 26 Aug 2014 17:05:50 +0300 Subject: [PATCH] [Summary] Implementing touch cursor for faders. --- gtk2_ardour/icons/fader_touch_cursor.png | Bin 0 -> 3258 bytes gtk2_ardour/ui/inspector_gain_meter.xml | 1 + gtk2_ardour/ui/meter_strip_gain_meter.xml | 1 + gtk2_ardour/ui/mixer_gain_meter.xml | 1 + gtk2_ardour/waves_ui.cc | 8 ++++++ libs/gtkmm2ext/fader.cc | 30 ++++++++++++++++++++++ libs/gtkmm2ext/gtkmm2ext/fader.h | 4 ++- 7 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 gtk2_ardour/icons/fader_touch_cursor.png diff --git a/gtk2_ardour/icons/fader_touch_cursor.png b/gtk2_ardour/icons/fader_touch_cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..1fbe812659908f50337c333e494b046261221644 GIT binary patch literal 3258 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 (visible_window); } + Gtkmm2ext::Fader* fader = dynamic_cast (&widget); + if (fader) { + property = xml_property (definition, "touchcursor", styles, ""); + if (!property.empty ()) { + fader->set_touch_cursor (property); + } + } + Gtk::Label* label = dynamic_cast (&widget); if (label) { property = xml_property (definition, "justify", styles, "left"); diff --git a/libs/gtkmm2ext/fader.cc b/libs/gtkmm2ext/fader.cc index 84adfd259f..b1c1fe5a7c 100755 --- a/libs/gtkmm2ext/fader.cc +++ b/libs/gtkmm2ext/fader.cc @@ -140,6 +140,8 @@ Fader::Fader (Gtk::Adjustment& adj, , _default_value (adjustment.get_value()) , _dragging (false) , _read_only (read_only) + , _grab_window (0) + , _touch_cursor (0) { PBD::Searchpath spath(ARDOUR::ardour_data_search_path()); @@ -262,6 +264,10 @@ Fader::on_button_press_event (GdkEventButton* ev) return false; } + if (_touch_cursor) { + get_window()->set_cursor (*_touch_cursor); + } + double hx; double hy; get_handle_position (hx, hy); @@ -313,6 +319,10 @@ Fader::on_button_release_event (GdkEventButton* ev) return false; } + if (_touch_cursor) { + get_window()->set_cursor (); + } + if (_dragging) { //temp remove_modal_grab(); _dragging = false; @@ -458,6 +468,26 @@ Fader::set_default_value (float d) update_unity_position (); } +void +Fader::set_touch_cursor (const std::string& icon_name) +{ + PBD::Searchpath spath(ARDOUR::ardour_data_search_path()); + + spath.add_subdirectory_to_paths ("icons"); + + std::string icon_file_path; + + if (PBD::find_file_in_search_path (spath, icon_name, icon_file_path)) { + _touch_cursor = new Gdk::Cursor (Gdk::Display::get_default(), + Gdk::Pixbuf::create_from_file (icon_file_path), + 12, + 12); + } else { + throw failed_constructor(); + } +} + + void Fader::update_unity_position () { diff --git a/libs/gtkmm2ext/gtkmm2ext/fader.h b/libs/gtkmm2ext/gtkmm2ext/fader.h index ea8e73768b..9ca64b7269 100755 --- a/libs/gtkmm2ext/gtkmm2ext/fader.h +++ b/libs/gtkmm2ext/gtkmm2ext/fader.h @@ -52,8 +52,8 @@ class LIBGTKMM2EXT_API Fader : public CairoWidget virtual ~Fader (); void set_controllable (boost::shared_ptr c) { binding_proxy.set_controllable (c); } - void set_default_value (float); + void set_touch_cursor (const std::string& icon_name); protected: void get_handle_position (double& x, double& y); @@ -88,6 +88,8 @@ class LIBGTKMM2EXT_API Fader : public CairoWidget bool _hovering; GdkWindow* _grab_window; + Gdk::Cursor *_touch_cursor; + double _grab_loc_x; double _grab_loc_y; double _grab_start_x;