X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_region_view.h;h=3fd6625ce90c18c4103788ac5b7fb2e946657324;hb=45fd3593eba84e2d89290f5112f4541bb9399209;hp=219d07f37615cf482900cbfb4294b2ba1fa734c7;hpb=fb45fdc052b23f4b2210c71a03a14bdb5986098a;p=ardour.git diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 219d07f376..3fd6625ce9 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -21,13 +21,7 @@ #include #include - -#ifdef interface -#undef interface -#endif - -#include -#include +#include #include "pbd/signals.h" @@ -40,12 +34,6 @@ #include "time_axis_view_item.h" #include "automation_line.h" #include "enums.h" -#include "canvas.h" -#include "canvas-hit.h" -#include "canvas-note.h" -#include "canvas-note-event.h" -#include "canvas_patch_change.h" -#include "canvas-sysex.h" namespace ARDOUR { class MidiRegion; @@ -59,6 +47,10 @@ namespace MIDI { }; }; +class SysEx; +class NoteBase; +class Note; +class Hit; class MidiTimeAxisView; class GhostRegion; class AutomationTimeAxisView; @@ -67,6 +59,7 @@ class MidiCutBuffer; class MidiListEditor; class EditNoteDialog; class NotePlayer; +class PatchChange; class MidiRegionView : public RegionView { @@ -74,18 +67,18 @@ public: typedef Evoral::Note NoteType; typedef Evoral::Sequence::Notes Notes; - MidiRegionView (ArdourCanvas::Group *, + MidiRegionView (ArdourCanvas::Container *, RouteTimeAxisView&, boost::shared_ptr, - double initial_samples_per_unit, - Gdk::Color const & basic_color); + double initial_samples_per_pixel, + uint32_t base_color); MidiRegionView (const MidiRegionView& other); MidiRegionView (const MidiRegionView& other, boost::shared_ptr); ~MidiRegionView (); - virtual void init (Gdk::Color const & basic_color, bool wfd); + void init (bool wfd); const boost::shared_ptr midi_region() const; @@ -139,26 +132,26 @@ public: * @param old_patch the canvas patch change which is to be altered * @param new_patch new patch */ - void change_patch_change (ArdourCanvas::CanvasPatchChange& old_patch, const MIDI::Name::PatchPrimaryKey& new_patch); + void change_patch_change (PatchChange& old_patch, const MIDI::Name::PatchPrimaryKey& new_patch); void change_patch_change (ARDOUR::MidiModel::PatchChangePtr, Evoral::PatchChange const &); void add_patch_change (framecnt_t, Evoral::PatchChange const &); - void move_patch_change (ArdourCanvas::CanvasPatchChange &, Evoral::MusicalTime); - void delete_patch_change (ArdourCanvas::CanvasPatchChange *); - void edit_patch_change (ArdourCanvas::CanvasPatchChange *); + void move_patch_change (PatchChange &, Evoral::MusicalTime); + void delete_patch_change (PatchChange *); + void edit_patch_change (PatchChange *); - void delete_sysex (ArdourCanvas::CanvasSysEx*); + void delete_sysex (SysEx*); /** Alter a given patch to be its predecessor in the MIDNAM file. */ - void previous_patch (ArdourCanvas::CanvasPatchChange &); + void previous_patch (PatchChange &); /** Alters a given patch to be its successor in the MIDNAM file. */ - void next_patch (ArdourCanvas::CanvasPatchChange &); + void next_patch (PatchChange &); - void previous_bank (ArdourCanvas::CanvasPatchChange &); - void next_bank (ArdourCanvas::CanvasPatchChange &); + void previous_bank (PatchChange &); + void next_bank (PatchChange &); /** Displays all patch change events in the region as flags on the canvas. */ @@ -175,24 +168,24 @@ public: void display_model(boost::shared_ptr model); void start_note_diff_command (std::string name = "midi edit"); - void note_diff_add_change (ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::MidiModel::NoteDiffCommand::Property, uint8_t val); - void note_diff_add_change (ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::MidiModel::NoteDiffCommand::Property, Evoral::MusicalTime val); + void note_diff_add_change (NoteBase* ev, ARDOUR::MidiModel::NoteDiffCommand::Property, uint8_t val); + void note_diff_add_change (NoteBase* ev, ARDOUR::MidiModel::NoteDiffCommand::Property, Evoral::MusicalTime val); void note_diff_add_note (const boost::shared_ptr note, bool selected, bool show_velocity = false); - void note_diff_remove_note (ArdourCanvas::CanvasNoteEvent* ev); + void note_diff_remove_note (NoteBase* ev); void apply_diff (bool as_subcommand = false); void abort_command(); - void note_entered(ArdourCanvas::CanvasNoteEvent* ev); - void note_left(ArdourCanvas::CanvasNoteEvent* ev); - void patch_entered (ArdourCanvas::CanvasPatchChange *); - void patch_left (ArdourCanvas::CanvasPatchChange *); - void sysex_entered (ArdourCanvas::CanvasSysEx* p); - void sysex_left (ArdourCanvas::CanvasSysEx* p); + void note_entered(NoteBase* ev); + void note_left(NoteBase* ev); + void patch_entered (PatchChange *); + void patch_left (PatchChange *); + void sysex_entered (SysEx* p); + void sysex_left (SysEx* p); void note_mouse_position (float xfraction, float yfraction, bool can_set_cursor=true); - void unique_select(ArdourCanvas::CanvasNoteEvent* ev); - void note_selected(ArdourCanvas::CanvasNoteEvent* ev, bool add, bool extend=false); - void note_deselected(ArdourCanvas::CanvasNoteEvent* ev); + void unique_select(NoteBase* ev); + void note_selected(NoteBase* ev, bool add, bool extend=false); + void note_deselected(NoteBase* ev); void delete_selection(); void delete_note (boost::shared_ptr); size_t selection_size() { return _selection.size(); } @@ -201,7 +194,7 @@ public: void invert_selection (); void move_selection(double dx, double dy, double cumulative_dy); - void note_dropped (ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::frameoffset_t, int8_t d_note); + void note_dropped (NoteBase* ev, ARDOUR::frameoffset_t, int8_t d_note); void select_matching_notes (uint8_t notenum, uint16_t channel_mask, bool add, bool extend); void toggle_matching_notes (uint8_t notenum, uint16_t channel_mask); @@ -223,8 +216,8 @@ public: */ void begin_resizing(bool at_front); - void update_resizing (ArdourCanvas::CanvasNoteEvent*, bool, double, bool); - void commit_resizing (ArdourCanvas::CanvasNoteEvent*, bool, double, bool); + void update_resizing (NoteBase*, bool, double, bool); + void commit_resizing (NoteBase*, bool, double, bool); void abort_resizing (); /** Change the channel of the selection. @@ -246,8 +239,8 @@ public: void note_button_release (); struct NoteResizeData { - ArdourCanvas::CanvasNote *canvas_note; - ArdourCanvas::SimpleRect *resize_rect; + Note *note; + ArdourCanvas::Rectangle *resize_rect; }; /** Snap a region relative pixel coordinate to pixel units. @@ -260,7 +253,7 @@ public: * @param x a pixel coordinate relative to region start * @return the snapped framepos_t coordinate relative to region start */ - framepos_t snap_pixel_to_frame(double x); + framepos_t snap_pixel_to_sample(double x); /** Convert a timestamp in beats into frames (both relative to region position) */ framepos_t region_beats_to_region_frames(double beats) const; @@ -291,7 +284,7 @@ public: void show_list_editor (); - typedef std::set Selection; + typedef std::set Selection; Selection selection () const { return _selection; } @@ -300,8 +293,8 @@ public: void enable_display (bool); - void set_channel_selector_scoped_note(ArdourCanvas::CanvasNoteEvent* note){ _channel_selection_scoped_note = note; } - ArdourCanvas::CanvasNoteEvent* channel_selector_scoped_note(){ return _channel_selection_scoped_note; } + void set_channel_selector_scoped_note(NoteBase* note){ _channel_selection_scoped_note = note; } + NoteBase* channel_selector_scoped_note(){ return _channel_selection_scoped_note; } void trim_front_starting (); void trim_front_ending (); @@ -316,11 +309,11 @@ protected: /** Allows derived types to specify their visibility requirements * to the TimeAxisViewItem parent class. */ - MidiRegionView (ArdourCanvas::Group *, + MidiRegionView (ArdourCanvas::Container *, RouteTimeAxisView&, boost::shared_ptr, - double samples_per_unit, - Gdk::Color& basic_color, + double samples_per_pixel, + uint32_t basic_color, TimeAxisViewItem::Visibility); void region_resized (const PBD::PropertyChange&); @@ -356,7 +349,7 @@ private: void clear_events (bool with_selection_signal = true); - bool canvas_event(GdkEvent* ev); + bool canvas_group_event(GdkEvent* ev); bool note_canvas_event(GdkEvent* ev); void midi_channel_mode_changed (); @@ -364,20 +357,20 @@ private: void instrument_settings_changed (); PBD::ScopedConnection _instrument_changed_connection; - void change_note_channel (ArdourCanvas::CanvasNoteEvent *, int8_t, bool relative=false); - void change_note_velocity(ArdourCanvas::CanvasNoteEvent* ev, int8_t vel, bool relative=false); - void change_note_note(ArdourCanvas::CanvasNoteEvent* ev, int8_t note, bool relative=false); - void change_note_time(ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::MidiModel::TimeType, bool relative=false); - void change_note_length (ArdourCanvas::CanvasNoteEvent *, ARDOUR::MidiModel::TimeType); - void trim_note(ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::MidiModel::TimeType start_delta, + void change_note_channel (NoteBase *, int8_t, bool relative=false); + void change_note_velocity(NoteBase* ev, int8_t vel, bool relative=false); + void change_note_note(NoteBase* ev, int8_t note, bool relative=false); + void change_note_time(NoteBase* ev, ARDOUR::MidiModel::TimeType, bool relative=false); + void change_note_length (NoteBase *, ARDOUR::MidiModel::TimeType); + void trim_note(NoteBase* ev, ARDOUR::MidiModel::TimeType start_delta, ARDOUR::MidiModel::TimeType end_delta); - void clear_selection_except (ArdourCanvas::CanvasNoteEvent* ev, bool signal = true); + void clear_selection_except (NoteBase* ev, bool signal = true); void update_drag_selection (double last_x, double x, double last_y, double y, bool extend); void update_vertical_drag_selection (double last_y, double y, bool extend); - void add_to_selection (ArdourCanvas::CanvasNoteEvent*); - void remove_from_selection (ArdourCanvas::CanvasNoteEvent*); + void add_to_selection (NoteBase*); + void remove_from_selection (NoteBase*); void show_verbose_cursor (std::string const &, double, double) const; void show_verbose_cursor (boost::shared_ptr) const; @@ -385,35 +378,35 @@ private: uint8_t _current_range_min; uint8_t _current_range_max; - typedef std::list Events; - typedef std::vector< boost::shared_ptr > PatchChanges; - typedef std::vector< boost::shared_ptr > SysExes; + typedef std::list Events; + typedef std::vector< boost::shared_ptr > PatchChanges; + typedef std::vector< boost::shared_ptr > SysExes; boost::shared_ptr _model; Events _events; PatchChanges _patch_changes; SysExes _sys_exes; - ArdourCanvas::CanvasNote** _active_notes; - ArdourCanvas::Group* _note_group; + Note** _active_notes; + ArdourCanvas::Container* _note_group; ARDOUR::MidiModel::NoteDiffCommand* _note_diff_command; - ArdourCanvas::CanvasNote* _ghost_note; + Note* _ghost_note; double _last_ghost_x; double _last_ghost_y; - ArdourCanvas::SimpleRect* _step_edit_cursor; + ArdourCanvas::Rectangle* _step_edit_cursor; Evoral::MusicalTime _step_edit_cursor_width; Evoral::MusicalTime _step_edit_cursor_position; - ArdourCanvas::CanvasNoteEvent* _channel_selection_scoped_note; + NoteBase* _channel_selection_scoped_note; /** A group used to temporarily reparent _note_group to during start trims, so * that the notes don't move with the parent region view. */ - ArdourCanvas::Group* _temporary_note_group; + ArdourCanvas::Container* _temporary_note_group; MouseState _mouse_state; int _pressed_button; - /** Currently selected CanvasNoteEvents */ + /** Currently selected NoteBase objects */ Selection _selection; bool _sort_needed; @@ -434,11 +427,11 @@ private: /** connection used to connect to model's ContentChanged signal */ PBD::ScopedConnection content_connection; - ArdourCanvas::CanvasNoteEvent* find_canvas_note (boost::shared_ptr); + NoteBase* find_canvas_note (boost::shared_ptr); Events::iterator _optimization_iterator; - void update_note (ArdourCanvas::CanvasNote *, bool update_ghost_regions = true); - double update_hit (ArdourCanvas::CanvasHit *); + void update_note (Note *, bool update_ghost_regions = true); + void update_hit (Hit *); void create_ghost_note (double, double); void update_ghost_note (double, double); @@ -446,7 +439,7 @@ private: bool _no_sound_notes; PBD::ScopedConnection note_delete_connection; - void maybe_remove_deleted_note_from_selection (ArdourCanvas::CanvasNoteEvent*); + void maybe_remove_deleted_note_from_selection (NoteBase*); void snap_changed (); PBD::ScopedConnection snap_changed_connection;