X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fpanner2d.h;h=881638856f9f8ee5279b88bc0d28a310905e0fd4;hb=c9c94ca1c247adfc1a78fda0eda185a9a7589696;hp=4c7bd1530cd717de2ca0535d7bba9f672554bf46;hpb=1b8e8303b25b6b013367741f2b47be3585b22cb3;p=ardour.git diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h index 4c7bd1530c..881638856f 100644 --- a/gtk2_ardour/panner2d.h +++ b/gtk2_ardour/panner2d.h @@ -34,10 +34,10 @@ #include "pbd/cartesian.h" -#include "ardour_dialog.h" +#include "ardour_window.h" namespace ARDOUR { - class Panner; + class PannerShell; } namespace Gtk { @@ -54,17 +54,17 @@ class Panner2dWindow; class Panner2d : public Gtk::DrawingArea { public: - Panner2d (boost::shared_ptr, int32_t height); + Panner2d (boost::shared_ptr, int32_t height); ~Panner2d (); void allow_target_motion (bool); - int add_target (const PBD::AngularVector&); - int add_puck (const char* text, const PBD::AngularVector&); - void move_puck (int which, const PBD::AngularVector&); + int add_speaker (const PBD::AngularVector&); + int add_signal (const char* text, const PBD::AngularVector&); + void move_signal (int which, const PBD::AngularVector&); void reset (uint32_t n_inputs); - boost::shared_ptr get_panner() const { return panner; } + boost::shared_ptr get_panner_shell() const { return panner_shell; } sigc::signal PuckMoved; sigc::signal TargetMoved; @@ -77,6 +77,7 @@ class Panner2d : public Gtk::DrawingArea bool on_button_press_event (GdkEventButton *); bool on_button_release_event (GdkEventButton *); bool on_motion_notify_event (GdkEventMotion *); + bool on_scroll_event (GdkEventScroll *); void on_size_allocate (Gtk::Allocation& alloc); private: @@ -85,53 +86,56 @@ class Panner2d : public Gtk::DrawingArea PBD::AngularVector position; bool visible; std::string text; - + Target (const PBD::AngularVector&, const char* txt = 0); ~Target (); - + void set_text (const char*); void set_selected (bool yn) { _selected = yn; } - bool selected() const { + bool selected() const { return _selected; } - + private: bool _selected; }; - boost::shared_ptr panner; + boost::shared_ptr panner_shell; Glib::RefPtr layout; typedef std::vector Targets; - Targets targets; - Targets pucks; + Targets speakers; + Targets signals; + Target position; Target *drag_target; int drag_x; int drag_y; - int drag_index; - bool allow_target; + bool allow_speaker_motion; int width; int height; - int dimen; - - bool bypassflag; + double radius; + double border; + double hoffset; + double voffset; + double last_width; + bool did_move; gint compute_x (float); gint compute_y (float); - Target *find_closest_object (gdouble x, gdouble y, int& which) const; + Target *find_closest_object (gdouble x, gdouble y, bool& is_signal); gint handle_motion (gint, gint, GdkModifierType); void toggle_bypass (); void handle_state_change (); void handle_position_change (); + void label_signals (); - PBD::ScopedConnection state_connection; - PBD::ScopedConnection change_connection; + PBD::ScopedConnectionList connections; /* cartesian coordinates in GTK units ; adjust to same but on a circle of radius 1.0 and centered in the middle of our area @@ -139,10 +143,10 @@ class Panner2d : public Gtk::DrawingArea void clamp_to_circle (double& x, double& y); }; -class Panner2dWindow : public ArdourDialog +class Panner2dWindow : public ArdourWindow { public: - Panner2dWindow (boost::shared_ptr, int32_t height, uint32_t inputs); + Panner2dWindow (boost::shared_ptr, int32_t height, uint32_t inputs); void reset (uint32_t n_inputs); @@ -151,13 +155,15 @@ class Panner2dWindow : public ArdourDialog 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; + + void bypass_toggled (); + bool on_key_press_event (GdkEventKey*); + bool on_key_release_event (GdkEventKey*); }; #endif /* __ardour_panner_2d_h__ */