X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_drag.h;h=bc30486b584094774f1d0c4c3a28416b07f958d3;hb=47d186d1a301c8cbc8ed8c3b6cbe0c84bb6b681f;hp=caee8ad6ba829e89de7fb368d778a42048f6dc28;hpb=a64e46a6b3a6eda0a75103dc81b2c369b8306c95;p=ardour.git diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index caee8ad6ba..bc30486b58 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -37,6 +37,7 @@ namespace ARDOUR { class Location; + class TempoSection; } namespace ArdourCanvas { @@ -247,7 +248,7 @@ protected: /* sets snap delta from unsnapped pos */ void setup_snap_delta (framepos_t pos); - boost::shared_ptr add_midi_region (MidiTimeAxisView*, bool commit); + boost::shared_ptr add_midi_region (MidiTimeAxisView*, bool commit, const int32_t sub_num); void show_verbose_cursor_time (framepos_t); void show_verbose_cursor_duration (framepos_t, framepos_t, double xoffset = 0); @@ -281,6 +282,7 @@ private: */ ARDOUR::frameoffset_t _snap_delta; CursorContext::Handle _cursor_ctx; ///< cursor change context + bool _constraint_pressed; ///< if the keyboard indicated constraint modifier was pressed on start_grab() }; class RegionDrag; @@ -325,6 +327,7 @@ protected: std::vector _time_axis_views; int find_time_axis_view (TimeAxisView *) const; int apply_track_delta (const int start, const int delta, const int skip, const bool distance_only = false) const; + int32_t current_music_divisor (framepos_t pos, int32_t button_state); int _visible_y_low; int _visible_y_high; @@ -406,13 +409,15 @@ private: void finished_no_copy ( bool const, bool const, - ARDOUR::framecnt_t const + ARDOUR::framecnt_t const, + int32_t const ev_state ); void finished_copy ( bool const, bool const, - ARDOUR::framecnt_t const + ARDOUR::framecnt_t const, + int32_t const ev_state ); RegionView* insert_region_into_playlist ( @@ -420,7 +425,8 @@ private: RouteTimeAxisView*, ARDOUR::layer_t, ARDOUR::framecnt_t, - PlaylistSet& + PlaylistSet&, + const int32_t sub_num ); void remove_region_from_playlist ( @@ -585,11 +591,47 @@ private: double y_to_region (double) const; ARDOUR::framecnt_t grid_frames (framepos_t) const; + /** @return minimum number of frames (in x) and pixels (in y) that should be considered a movement */ + virtual std::pair move_threshold () const { + return std::make_pair (0, 0); + } + MidiRegionView* _region_view; ArdourCanvas::Rectangle* _drag_rect; framepos_t _note[2]; }; +class HitCreateDrag : public Drag +{ +public: + HitCreateDrag (Editor *, ArdourCanvas::Item *, MidiRegionView *); + ~HitCreateDrag (); + + void start_grab (GdkEvent *, Gdk::Cursor* c = 0); + void motion (GdkEvent *, bool); + void finished (GdkEvent *, bool); + void aborted (bool); + + bool active (Editing::MouseMode mode) { + return mode == Editing::MouseDraw || mode == Editing::MouseContent; + } + + bool y_movement_matters () const { + return false; + } + +private: + double y_to_region (double) const; + ARDOUR::framecnt_t grid_frames (framepos_t) const; + + /** @return minimum number of frames (in x) and pixels (in y) that should be considered a movement */ + virtual std::pair move_threshold () const { + return std::make_pair (0, 0); + } + + MidiRegionView* _region_view; +}; + /** Drag to move MIDI patch changes */ class PatchChangeDrag : public Drag { @@ -708,6 +750,8 @@ private: ARDOUR::MeterSection* _real_section; bool _copy; + Editing::SnapType _old_snap_type; + Editing::SnapMode _old_snap_mode; XMLNode* before_state; }; @@ -738,9 +782,36 @@ private: bool _copy; bool _movable; + double _grab_bpm; XMLNode* before_state; }; +/** BBT Ruler drag */ +class BBTRulerDrag : public Drag +{ +public: + BBTRulerDrag (Editor *, ArdourCanvas::Item *); + + void start_grab (GdkEvent *, Gdk::Cursor* c = 0); + void motion (GdkEvent *, bool); + void finished (GdkEvent *, bool); + void aborted (bool); + + bool allow_vertical_autoscroll () const { + return false; + } + + bool y_movement_matters () const { + return false; + } + + void setup_pointer_frame_offset (); + +private: + double _grab_qn; + ARDOUR::TempoSection* _tempo; + XMLNode* before_state; +}; /** Drag of the playhead cursor */ class CursorDrag : public Drag @@ -1155,5 +1226,21 @@ class CrossfadeEdgeDrag : public Drag bool start; }; +class RulerZoomDrag : public Drag +{ +public: + RulerZoomDrag (Editor*, ArdourCanvas::Item*); + + void start_grab (GdkEvent*, Gdk::Cursor* c = 0); + void motion (GdkEvent *, bool); + void finished (GdkEvent*, bool); + void aborted (bool); + + virtual bool allow_vertical_autoscroll () const { + return false; + } + +}; + #endif /* __gtk2_ardour_editor_drag_h_ */