X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fpanner2d.h;h=5825faf80a3ed9ca0c2f68b787fe1b7732b4cd77;hb=fef66431656638bebf6cdd40f49496369c21437b;hp=d1bbfb9add85a4b9b16fa67583cd613b29eda93a;hpb=a0663fbd278f4514ba26c4a4c0e2aa5ec2964dd9;p=ardour.git diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h index d1bbfb9add..5825faf80a 100644 --- a/gtk2_ardour/panner2d.h +++ b/gtk2_ardour/panner2d.h @@ -15,7 +15,6 @@ 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__ @@ -23,42 +22,50 @@ #include #include -#include -#include +#include -using std::map; -using std::string; +#include +#include +#include +#include +#include +#include +#include namespace ARDOUR { class Panner; } +namespace Gtk { + class Menu; + class CheckMenuItem; +} + +namespace Pango { + class Layout; +} + +class Panner2dWindow; + class Panner2d : public Gtk::DrawingArea { public: - Panner2d (ARDOUR::Panner&, int32_t width, int32_t height); + Panner2d (boost::shared_ptr, 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); + Gtk::Adjustment& azimuth (uint32_t which); + + boost::shared_ptr get_panner() const { return panner; } + sigc::signal PuckMoved; sigc::signal TargetMoved; @@ -67,29 +74,32 @@ class Panner2d : public Gtk::DrawingArea bool on_button_press_event (GdkEventButton *); bool on_button_release_event (GdkEventButton *); bool on_motion_notify_event (GdkEventMotion *); - void on_size_allocate (Gtk::Allocation alloc); + void on_size_allocate (Gtk::Allocation& alloc); private: struct Target { - float x; - float y; + Gtk::Adjustment x; + Gtk::Adjustment y; + Gtk::Adjustment azimuth; bool visible; char* text; - size_t textlen; Target (float xa, float ya, const char* txt = 0); ~Target (); + + void set_text (const char*); }; - ARDOUR::Panner& panner; - Gtk::Menu* context_menu; - Gtk::CheckMenuItem* bypass_menu_item; + boost::shared_ptr panner; + Glib::RefPtr layout; - typedef std::map Targets; + typedef std::vector Targets; Targets targets; Targets pucks; Target *drag_target; + int drag_x; + int drag_y; int drag_index; bool drag_is_puck; bool allow_x; @@ -99,7 +109,7 @@ class Panner2d : public Gtk::DrawingArea int height; bool bypassflag; - + gint compute_x (float); gint compute_y (float); @@ -108,8 +118,32 @@ class Panner2d : public Gtk::DrawingArea gint handle_motion (gint, gint, GdkModifierType); void toggle_bypass (); - void show_context_menu (); void handle_state_change (); + void handle_position_change (); + + PBD::ScopedConnection state_connection; + PBD::ScopedConnection change_connection; +}; + +class Panner2dWindow : public Gtk::Window +{ + public: + Panner2dWindow (boost::shared_ptr, int32_t height, uint32_t inputs); + + void reset (uint32_t n_inputs); + + private: + Panner2d widget; + + Gtk::HBox hpacker; + Gtk::VBox button_box; + Gtk::Button reset_button; + Gtk::ToggleButton bypass_button; + Gtk::ToggleButton mute_button; + Gtk::VBox spinner_box; + Gtk::VBox left_side; + + std::vector spinners; }; #endif /* __ardour_panner_2d_h__ */