summaryrefslogtreecommitdiff
path: root/gtk2_ardour/panner2d.h
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/panner2d.h
parente4b9aed743fc765219ac775905a221c017c88fba (diff)
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/panner2d.h')
-rw-r--r--gtk2_ardour/panner2d.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h
new file mode 100644
index 0000000000..8161be29f2
--- /dev/null
+++ b/gtk2_ardour/panner2d.h
@@ -0,0 +1,115 @@
+/*
+ Copyright (C) 2002 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.
+
+ $Id$
+*/
+
+#ifndef __ardour_panner_2d_h__
+#define __ardour_panner_2d_h__
+
+#include <sys/types.h>
+#include <map>
+#include <string>
+#include <gtk--.h>
+
+using std::map;
+using std::string;
+
+namespace ARDOUR {
+ class Panner;
+}
+
+class Panner2d : public Gtk::DrawingArea
+{
+ public:
+ Panner2d (ARDOUR::Panner&, int32_t width, int32_t height);
+ ~Panner2d ();
+
+ int puck_position (int which_puck, float& x, float& y);
+ int target_position (int which_target, float& x, float& y);
+
+ void allow_x_motion(bool);
+ void allow_y_motion(bool);
+ void allow_target_motion (bool);
+
+ void hide_puck (int which);
+ void show_puck (int which);
+ int add_target (float x, float y);
+ int add_puck (const char* text, float x, float y);
+ void hide_target (int);
+ void show_target (int);
+ void remove_target (int);
+ void drop_targets ();
+ void drop_pucks ();
+ void move_target (int, float x, float y);
+ void move_puck (int, float x, float y);
+ void reset (uint32_t n_inputs);
+
+ SigC::Signal1<void,int> PuckMoved;
+ SigC::Signal1<void,int> TargetMoved;
+
+ protected:
+ gint expose_event_impl (GdkEventExpose *);
+ gint button_press_event_impl (GdkEventButton *);
+ gint button_release_event_impl (GdkEventButton *);
+ gint motion_notify_event_impl (GdkEventMotion *);
+ void size_allocate_impl (GtkAllocation* alloc);
+
+ private:
+ struct Target {
+ float x;
+ float y;
+ bool visible;
+ char* text;
+ size_t textlen;
+
+ Target (float xa, float ya, const char* txt = 0);
+ ~Target ();
+ };
+
+ ARDOUR::Panner& panner;
+ Gtk::Menu* context_menu;
+ Gtk::CheckMenuItem* bypass_menu_item;
+
+ typedef map<int,Target *> Targets;
+ Targets targets;
+ Targets pucks;
+
+ Target *drag_target;
+ int drag_index;
+ bool drag_is_puck;
+ bool allow_x;
+ bool allow_y;
+ bool allow_target;
+ int width;
+ int height;
+
+ bool bypassflag;
+
+ gint compute_x (float);
+ gint compute_y (float);
+
+ Target *find_closest_object (gdouble x, gdouble y, int& which, bool& is_puck) const;
+
+ gint handle_motion (gint, gint, GdkModifierType);
+
+ void toggle_bypass ();
+ void show_context_menu ();
+ void handle_state_change ();
+};
+
+#endif /* __ardour_panner_2d_h__ */