diff options
author | Carl Hetherington <carl@carlh.net> | 2011-12-26 14:05:19 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-12-26 14:05:19 +0000 |
commit | 6e79521e8b7709458b8ee093e2d0dc6440ffea2c (patch) | |
tree | f85f50dbf9ced89620bbe1667e1553675180d823 /gtk2_ardour/panner_interface.cc | |
parent | 0dbc0429a81bb10b558f83d66c5be098d287f293 (diff) |
Move some bits from MonoPanner and StereoPanner into a
common base class.
git-svn-id: svn://localhost/ardour2/branches/3.0@11071 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/panner_interface.cc')
-rw-r--r-- | gtk2_ardour/panner_interface.cc | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/gtk2_ardour/panner_interface.cc b/gtk2_ardour/panner_interface.cc new file mode 100644 index 0000000000..95e1e4e7ff --- /dev/null +++ b/gtk2_ardour/panner_interface.cc @@ -0,0 +1,109 @@ +/* + Copyright (C) 2011 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. + +*/ + +#include <gtkmm.h> +#include "gtkmm2ext/keyboard.h" +#include "panner_interface.h" +#include "global_signals.h" + +#include "i18n.h" + +using namespace Gtk; +using namespace ARDOUR; +using namespace Gtkmm2ext; + +PannerInterface::PannerInterface (boost::shared_ptr<Panner> p) + : _panner (p) + , _drag_data_window (0) + , _drag_data_label (0) +{ + set_flags (Gtk::CAN_FOCUS); + + add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK| + Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK| + Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK| + Gdk::SCROLL_MASK| + Gdk::POINTER_MOTION_MASK); + +} + +PannerInterface::~PannerInterface () +{ + delete _drag_data_window; +} + +void +PannerInterface::show_drag_data_window () +{ + if (!_drag_data_window) { + _drag_data_window = new Window (WINDOW_POPUP); + _drag_data_window->set_name (X_("ContrastingPopup")); + _drag_data_window->set_position (WIN_POS_MOUSE); + _drag_data_window->set_decorated (false); + + _drag_data_label = manage (new Label); + _drag_data_label->set_use_markup (true); + + _drag_data_window->set_border_width (6); + _drag_data_window->add (*_drag_data_label); + _drag_data_label->show (); + + Window* toplevel = dynamic_cast<Window*> (get_toplevel()); + if (toplevel) { + _drag_data_window->set_transient_for (*toplevel); + } + } + + if (!_drag_data_window->is_visible ()) { + /* move the window a little away from the mouse */ + int rx, ry; + get_window()->get_origin (rx, ry); + _drag_data_window->move (rx, ry + get_height()); + _drag_data_window->present (); + } +} + +bool +PannerInterface::on_enter_notify_event (GdkEventCrossing *) +{ + grab_focus (); + Keyboard::magic_widget_grab_focus (); + return false; +} + +bool +PannerInterface::on_leave_notify_event (GdkEventCrossing *) +{ + Keyboard::magic_widget_drop_focus (); + return false; +} + +bool +PannerInterface::on_key_release_event (GdkEventKey*) +{ + return false; +} + +void +PannerInterface::value_change () +{ + set_drag_data (); + queue_draw (); +} + |