diff options
author | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
---|---|---|
committer | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
commit | 209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch) | |
tree | 9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/panner2d.h | |
parent | e4b9aed743fc765219ac775905a221c017c88fba (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.h | 115 |
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__ */ |