From eb42318d3ef1ad9e48bbfc629f1dbcef7ad48c72 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 10 Dec 2022 05:45:16 +0100 Subject: [PATCH] Consolidate ruler prelight events This fixes various copy/edit bugs (e.g. transport ruler uses "range marker bar" colors, but only after a enter/leave event). --- gtk2_ardour/editor.h | 8 +- gtk2_ardour/editor_canvas.cc | 14 +-- gtk2_ardour/editor_canvas_events.cc | 136 ++-------------------------- gtk2_ardour/public_editor.h | 5 - 4 files changed, 14 insertions(+), 149 deletions(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 05c735f72d..cb1eaa578d 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1719,13 +1719,7 @@ private: bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item*); bool canvas_ruler_event (GdkEvent* event, ArdourCanvas::Item*, ItemType); - bool canvas_tempo_bar_event (GdkEvent* event, ArdourCanvas::Item*); - bool canvas_meter_bar_event (GdkEvent* event, ArdourCanvas::Item*); - bool canvas_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*); - bool canvas_range_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*); - bool canvas_transport_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*); - bool canvas_cd_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*); - bool canvas_cue_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*); + bool canvas_ruler_bar_event (GdkEvent* event, ArdourCanvas::Item*, ItemType, std::string const&); bool canvas_videotl_bar_event (GdkEvent* event, ArdourCanvas::Item*); void update_video_timeline (bool flush = false); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index d1a23e3385..a4d375b687 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -233,14 +233,14 @@ Editor::initialize_canvas () transport_punchout_line->set_y1 (ArdourCanvas::COORD_MAX); transport_punchout_line->hide(); - tempo_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_tempo_bar_event), tempo_bar)); - meter_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_meter_bar_event), meter_bar)); - marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_marker_bar_event), marker_bar)); - cd_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_cd_marker_bar_event), cd_marker_bar)); - cue_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_cue_marker_bar_event), cue_marker_bar)); + tempo_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), tempo_bar, TempoBarItem, "tempo bar")); + meter_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), meter_bar, MeterBarItem, "meter bar")); + marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), marker_bar, MarkerBarItem, "marker bar")); + cd_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), cd_marker_bar, CdMarkerBarItem, "cd marker bar")); + cue_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), cue_marker_bar, CueMarkerBarItem, "cd marker bar")); videotl_group->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_videotl_bar_event), videotl_group)); - range_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_range_marker_bar_event), range_marker_bar)); - transport_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_transport_marker_bar_event), transport_marker_bar)); + range_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), range_marker_bar, RangeMarkerBarItem, "range marker bar")); + transport_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), transport_marker_bar, TransportMarkerBarItem, "transport marker bar")); _playhead_cursor = new EditorCursor (*this, &Editor::canvas_playhead_cursor_event, X_("playhead")); diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 2debf3b861..4874a40fa7 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -978,111 +978,6 @@ Editor::canvas_marker_event (GdkEvent *event, ArdourCanvas::Item* item, ArdourMa return typed_event (item, event, MarkerItem); } -bool -Editor::canvas_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - marker_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("range marker bar", "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar")); - } - break; - default: - break; - }; - - return typed_event (item, event, MarkerBarItem); -} - -bool -Editor::canvas_range_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - range_marker_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("range marker bar", "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - range_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar")); - } - break; - default: - break; - }; - - return typed_event (item, event, RangeMarkerBarItem); -} - -bool -Editor::canvas_transport_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - transport_marker_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("range marker bar", "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - transport_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar")); - } - break; - default: - break; - }; - - return typed_event (item, event, TransportMarkerBarItem); -} - -bool -Editor::canvas_cd_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - cd_marker_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("range marker bar", "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - cd_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar")); - } - break; - default: - break; - }; - - return typed_event (item, event, CdMarkerBarItem); -} - -bool -Editor::canvas_cue_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - cue_marker_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("range marker bar", "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - cue_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar")); - } - break; - default: - break; - }; - - return typed_event (item, event, CueMarkerBarItem); -} - bool Editor::canvas_videotl_bar_event (GdkEvent *event, ArdourCanvas::Item* item) { @@ -1172,45 +1067,26 @@ Editor::canvas_ruler_event (GdkEvent *event, ArdourCanvas::Item* item, ItemType } bool -Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item) +Editor::canvas_ruler_bar_event (GdkEvent *event, ArdourCanvas::Item* item, ItemType type, std::string const& color_name) { + /* XXX consolidate with Editor::canvas_ruler_event ? */ + switch (event->type) { case GDK_ENTER_NOTIFY: if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - tempo_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("tempo bar", "marker bar")).lighter(0.20).color()); + item->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod (color_name, "marker bar")).lighter(0.20).color()); } break; case GDK_LEAVE_NOTIFY: if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - tempo_bar->set_fill_color (UIConfiguration::instance().color_mod ("tempo bar", "marker bar")); + item->set_fill_color (UIConfiguration::instance().color_mod (color_name, "marker bar")); } break; default: break; }; - return typed_event (item, event, TempoBarItem); -} - -bool -Editor::canvas_meter_bar_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - switch (event->type) { - case GDK_ENTER_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - meter_bar->set_fill_color (Gtkmm2ext::HSV(UIConfiguration::instance().color_mod ("meter bar", "marker bar")).lighter(0.20).color()); - } - break; - case GDK_LEAVE_NOTIFY: - if (event->crossing.detail != GDK_NOTIFY_INFERIOR) { - meter_bar->set_fill_color (UIConfiguration::instance().color_mod ("meter bar", "marker bar")); - } - break; - default: - break; - }; - - return typed_event (item, event, MeterBarItem); + return typed_event (item, event, type); } bool diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 855bf5a8d0..299f55c205 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -475,11 +475,6 @@ public: virtual bool canvas_bbt_marker_event (GdkEvent* event, ArdourCanvas::Item*, BBTMarker*) = 0; virtual bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*) = 0; - virtual bool canvas_tempo_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0; - virtual bool canvas_meter_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0; - virtual bool canvas_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0; - virtual bool canvas_range_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0; - virtual bool canvas_transport_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0; virtual bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item*) = 0; static const int window_border_width;