Implement Selection Marker class and events

This commit is contained in:
Robin Gareus 2023-05-17 01:44:26 +02:00
parent cfba965db3
commit 1ee2675716
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
8 changed files with 30 additions and 0 deletions

View File

@ -1728,6 +1728,7 @@ private:
bool canvas_ruler_event (GdkEvent* event, ArdourCanvas::Item*, ItemType);
bool canvas_ruler_bar_event (GdkEvent* event, ArdourCanvas::Item*, ItemType, std::string const&);
bool canvas_selection_marker_event (GdkEvent* event, ArdourCanvas::Item*);
bool canvas_videotl_bar_event (GdkEvent* event, ArdourCanvas::Item*);
void update_video_timeline (bool flush = false);

View File

@ -1480,6 +1480,7 @@ Editor::which_canvas_cursor(ItemType type) const
case MinsecRulerItem:
case BBTRulerItem:
case SamplesRulerItem:
case SelectionMarkerItem:
cursor = _cursors->timebar;
break;

View File

@ -978,6 +978,12 @@ Editor::canvas_marker_event (GdkEvent *event, ArdourCanvas::Item* item, ArdourMa
return typed_event (item, event, MarkerItem);
}
bool
Editor::canvas_selection_marker_event (GdkEvent *event, ArdourCanvas::Item* item)
{
return typed_event (item, event, SelectionMarkerItem);
}
bool
Editor::canvas_videotl_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{

View File

@ -66,6 +66,7 @@ enum ItemType {
MinsecRulerItem,
BBTRulerItem,
SamplesRulerItem,
SelectionMarkerItem,
DropZoneItem,
/* don't remove this */

View File

@ -849,6 +849,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case SamplesRulerItem:
case MinsecRulerItem:
case MarkerBarItem:
case SelectionMarkerItem:
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)
&& !ArdourKeyboard::indicates_constraint (event->button.state)) {
_drags->set (new CursorDrag (this, *_playhead_cursor, false), event);
@ -1698,6 +1699,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case SamplesRulerItem:
case MinsecRulerItem:
case BBTRulerItem:
case SelectionMarkerItem:
popup_ruler_menu (where, item_type);
break;
@ -1839,6 +1841,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case SamplesRulerItem:
case MinsecRulerItem:
case BBTRulerItem:
case SelectionMarkerItem:
return true;
break;

View File

@ -716,6 +716,17 @@ MetricMarker::MetricMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
{
}
/***********************************************************************/
SelectionMarker::SelectionMarker (PublicEditor& editor, ArdourCanvas::Item& parent, guint32 rgba, Type type)
: ArdourMarker (editor, parent, rgba, "", type, timepos_t(0), false)
{
assert (type == SelectionStart || type == SelectionEnd);
#ifdef CANVAS_DEBUG
group->name = string_compose ("Marker::group for %1", type == SelectionStart ? "SelectionStart" : "SelectionEnd");
#endif
group->Event.connect (sigc::bind (sigc::mem_fun (editor, &PublicEditor::canvas_selection_marker_event), group));
}
/***********************************************************************/
TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Item& parent, ArdourCanvas::Item& text_parent, guint32 rgba, const string& text, Temporal::TempoPoint const & temp, samplepos_t sample, uint32_t curve_color)

View File

@ -171,6 +171,12 @@ private:
ArdourMarker & operator= (ArdourMarker const &);
};
class SelectionMarker : public ArdourMarker
{
public:
SelectionMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint32 rgba, Type);
};
class MetricMarker : public ArdourMarker
{
public:

View File

@ -469,6 +469,7 @@ public:
virtual bool canvas_stream_view_event (GdkEvent* event, ArdourCanvas::Item*, RouteTimeAxisView*) = 0;
virtual bool canvas_marker_event (GdkEvent* event, ArdourCanvas::Item*, ArdourMarker*) = 0;
virtual bool canvas_videotl_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
virtual bool canvas_selection_marker_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
virtual bool canvas_tempo_marker_event (GdkEvent* event, ArdourCanvas::Item*, TempoMarker*) = 0;
virtual bool canvas_tempo_curve_event (GdkEvent* event, ArdourCanvas::Item*, TempoCurve*) = 0;
virtual bool canvas_meter_marker_event (GdkEvent* event, ArdourCanvas::Item*, MeterMarker*) = 0;