region gain line freehand draw: ensure drawn line is above waveform
This commit is contained in:
parent
cda1f12845
commit
764ed125a4
|
@ -278,6 +278,7 @@ AudioRegionView::init (bool wfd)
|
|||
setup_waveform_visibility ();
|
||||
|
||||
get_canvas_frame()->set_data ("linemerger", (LineMerger*) this);
|
||||
gain_line->canvas_group().raise_to_top ();
|
||||
|
||||
/* XXX sync mark drag? */
|
||||
}
|
||||
|
|
|
@ -7265,8 +7265,9 @@ LollipopDrag::setup_pointer_offset ()
|
|||
/********/
|
||||
|
||||
template<typename OrderedPointList, typename OrderedPoint>
|
||||
FreehandLineDrag<OrderedPointList,OrderedPoint>::FreehandLineDrag (Editor* editor, ArdourCanvas::Rectangle& r, Temporal::TimeDomain time_domain)
|
||||
FreehandLineDrag<OrderedPointList,OrderedPoint>::FreehandLineDrag (Editor* editor, ArdourCanvas::Item* p, ArdourCanvas::Rectangle& r, Temporal::TimeDomain time_domain)
|
||||
: Drag (editor, &r, time_domain)
|
||||
, parent (p)
|
||||
, base_rect (r)
|
||||
, dragging_line (nullptr)
|
||||
, direction (0)
|
||||
|
@ -7288,10 +7289,11 @@ void
|
|||
FreehandLineDrag<OrderedPointList,OrderedPoint>::motion (GdkEvent* ev, bool first_move)
|
||||
{
|
||||
if (first_move) {
|
||||
dragging_line = new ArdourCanvas::PolyLine (item());
|
||||
dragging_line = new ArdourCanvas::PolyLine (parent ? parent : item());
|
||||
dragging_line->set_ignore_events (true);
|
||||
dragging_line->set_outline_width (2.0);
|
||||
dragging_line->set_outline_color (UIConfiguration::instance().color ("automation line"));
|
||||
dragging_line->raise_to_top ();
|
||||
|
||||
/* for freehand drawing, we only support left->right direction, for now. */
|
||||
direction = 1;
|
||||
|
@ -7447,8 +7449,8 @@ FreehandLineDrag<OrderedPointList,OrderedPoint>::mid_drag_key_event (GdkEventKey
|
|||
|
||||
/**********************/
|
||||
|
||||
AutomationDrawDrag::AutomationDrawDrag (Editor* editor, ArdourCanvas::Rectangle& r, Temporal::TimeDomain time_domain)
|
||||
: FreehandLineDrag<Evoral::ControlList::OrderedPoints,Evoral::ControlList::OrderedPoint> (editor, r, time_domain)
|
||||
AutomationDrawDrag::AutomationDrawDrag (Editor* editor, ArdourCanvas::Item* p, ArdourCanvas::Rectangle& r, Temporal::TimeDomain time_domain)
|
||||
: FreehandLineDrag<Evoral::ControlList::OrderedPoints,Evoral::ControlList::OrderedPoint> (editor, p, r, time_domain)
|
||||
{
|
||||
DEBUG_TRACE (DEBUG::Drags, "New AutomationDrawDrag\n");
|
||||
}
|
||||
|
@ -7487,7 +7489,7 @@ AutomationDrawDrag::finished (GdkEvent* event, bool motion_occured)
|
|||
/*****************/
|
||||
|
||||
VelocityLineDrag::VelocityLineDrag (Editor* editor, ArdourCanvas::Rectangle& r, Temporal::TimeDomain time_domain)
|
||||
: FreehandLineDrag<Evoral::ControlList::OrderedPoints,Evoral::ControlList::OrderedPoint> (editor, r, time_domain)
|
||||
: FreehandLineDrag<Evoral::ControlList::OrderedPoints,Evoral::ControlList::OrderedPoint> (editor, nullptr, r, time_domain)
|
||||
, grv (static_cast<VelocityGhostRegion*> (r.get_data ("ghostregionview")))
|
||||
, drag_did_change (false)
|
||||
{
|
||||
|
|
|
@ -1587,7 +1587,7 @@ template<typename OrderedPointList, typename OrderedPoint>
|
|||
class FreehandLineDrag : public Drag
|
||||
{
|
||||
public:
|
||||
FreehandLineDrag (Editor*, ArdourCanvas::Rectangle&, Temporal::TimeDomain);
|
||||
FreehandLineDrag (Editor*, ArdourCanvas::Item*, ArdourCanvas::Rectangle&, Temporal::TimeDomain);
|
||||
~FreehandLineDrag ();
|
||||
|
||||
void motion (GdkEvent*, bool);
|
||||
|
@ -1596,6 +1596,7 @@ class FreehandLineDrag : public Drag
|
|||
virtual void point_added (ArdourCanvas::Duple const & d, ArdourCanvas::Rectangle const & r, double last_x) {}
|
||||
|
||||
protected:
|
||||
ArdourCanvas::Item* parent; /* we do not own this. If null, use base_rect as the parent */
|
||||
ArdourCanvas::Rectangle& base_rect; /* we do not own this */
|
||||
ArdourCanvas::PolyLine* dragging_line;
|
||||
int direction;
|
||||
|
@ -1610,7 +1611,7 @@ class FreehandLineDrag : public Drag
|
|||
class AutomationDrawDrag : public FreehandLineDrag<Evoral::ControlList::OrderedPoints, Evoral::ControlList::OrderedPoint>
|
||||
{
|
||||
public:
|
||||
AutomationDrawDrag (Editor*, ArdourCanvas::Rectangle&, Temporal::TimeDomain);
|
||||
AutomationDrawDrag (Editor*, ArdourCanvas::Item*, ArdourCanvas::Rectangle&, Temporal::TimeDomain);
|
||||
~AutomationDrawDrag ();
|
||||
|
||||
void finished (GdkEvent*, bool);
|
||||
|
|
|
@ -1362,7 +1362,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
{
|
||||
AutomationTimeAxisView* atv = static_cast<AutomationTimeAxisView*> (item->get_data ("trackview"));
|
||||
if (atv) {
|
||||
_drags->set (new AutomationDrawDrag (this, atv->base_item(), Temporal::AudioTime), event);
|
||||
_drags->set (new AutomationDrawDrag (this, nullptr, atv->base_item(), Temporal::AudioTime), event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1389,7 +1389,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
RegionView* rv;
|
||||
if ((rv = dynamic_cast<RegionView*> (clicked_regionview))) {
|
||||
ArdourCanvas::Rectangle* r = dynamic_cast<ArdourCanvas::Rectangle*> (rv->get_canvas_frame());
|
||||
_drags->set (new AutomationDrawDrag (this, *r, Temporal::AudioTime), event);
|
||||
_drags->set (new AutomationDrawDrag (this, rv->get_canvas_group(), *r, Temporal::AudioTime), event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue