diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index b1d9eddac1..bae3556074 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1660,6 +1660,7 @@ private: bool canvas_tempo_marker_event (GdkEvent* event,ArdourCanvas::Item*, TempoMarker*); bool canvas_tempo_curve_event (GdkEvent* event,ArdourCanvas::Item*, TempoCurve*); bool canvas_meter_marker_event (GdkEvent* event,ArdourCanvas::Item*, MeterMarker*); + bool canvas_bbt_marker_event (GdkEvent* event,ArdourCanvas::Item*, BBTMarker*); bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*); bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item*); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 9c1415cc90..23980fe505 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -1435,6 +1435,7 @@ Editor::which_canvas_cursor(ItemType type) const /* These items use the grabber cursor at all times */ case MeterMarkerItem: + case BBTMarkerItem: case TempoMarkerItem: case MeterBarItem: case TempoBarItem: diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index af718df394..606bddd526 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -1026,6 +1026,12 @@ Editor::canvas_meter_marker_event (GdkEvent *event, ArdourCanvas::Item* item, Me return typed_event (item, event, MeterMarkerItem); } +bool +Editor::canvas_bbt_marker_event (GdkEvent *event, ArdourCanvas::Item* item, BBTMarker* /*marker*/) +{ + return typed_event (item, event, BBTMarkerItem); +} + bool Editor::canvas_ruler_event (GdkEvent *event, ArdourCanvas::Item* item, ItemType type) { diff --git a/gtk2_ardour/editor_items.h b/gtk2_ardour/editor_items.h index 52fdeb5f64..d58fcd1748 100644 --- a/gtk2_ardour/editor_items.h +++ b/gtk2_ardour/editor_items.h @@ -37,6 +37,7 @@ enum ItemType { GainLineItem, AutomationLineItem, MeterMarkerItem, + BBTMarkerItem, TempoCurveItem, TempoMarkerItem, MeterBarItem, diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc index 7b31c3ae5e..5ddfb2cdf7 100644 --- a/gtk2_ardour/marker.cc +++ b/gtk2_ardour/marker.cc @@ -688,3 +688,22 @@ MeterMarker::reset_meter (Temporal::MeterPoint & m) { _meter = m; } + +/***********************************************************************/ + +BBTMarker::BBTMarker (PublicEditor& editor, ArdourCanvas::Container& parent, guint32 rgba, const string& text, Temporal::MusicTimePoint& p) + : ArdourMarker (editor, parent, rgba, text, BBTPosition, p.time(), false) + , _point (p) +{ + group->Event.connect (sigc::bind (sigc::mem_fun (editor, &PublicEditor::canvas_bbt_marker_event), group, this)); +} + +BBTMarker::~BBTMarker () +{ +} + +void +BBTMarker::reset_point (Temporal::MusicTimePoint & p) +{ + _point = p; +} diff --git a/gtk2_ardour/marker.h b/gtk2_ardour/marker.h index fff407d617..cd5f183f63 100644 --- a/gtk2_ardour/marker.h +++ b/gtk2_ardour/marker.h @@ -38,6 +38,7 @@ namespace Temporal { class TempoPoint; class MeterPoint; + class MusicTimePoint; } class PublicEditor; @@ -54,6 +55,7 @@ public: Mark, Tempo, Meter, + BBTPosition, SessionStart, ///< session start SessionEnd, ///< session end RangeStart, @@ -183,4 +185,18 @@ class MeterMarker : public ArdourMarker Temporal::MeterPoint& _meter; }; +class BBTMarker : public ArdourMarker +{ + public: + BBTMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, Temporal::MusicTimePoint&); + ~BBTMarker (); + + void reset_point (Temporal::MusicTimePoint &); + + Temporal::MusicTimePoint& point() const { return _point; } + + private: + Temporal::MusicTimePoint& _point; +}; + #endif /* __gtk_ardour_marker_h__ */ diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index bdc88369e1..bc48c75f28 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -441,6 +441,7 @@ public: 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; + 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;