# HG changeset patch # User Chris Cannam # Date 1553181905 0 # Node ID aa061611653718f52274a19aad4d50a37dbb6875 # Parent ec66055635440b86c34aef9d65b637b74825744b# Parent 6f51297a0250d22c320601c8e42d0860cde97d69 Merge diff -r 6f51297a0250 -r aa0616116537 layer/Layer.cpp --- a/layer/Layer.cpp Tue Mar 05 10:02:48 2019 +0000 +++ b/layer/Layer.cpp Thu Mar 21 15:25:05 2019 +0000 @@ -373,8 +373,24 @@ void Layer::measureStart(LayerGeometryProvider *v, QMouseEvent *e) { - setMeasureRectFromPixrect(v, m_draggingRect, - QRect(e->x(), e->y(), 0, 0)); + m_draggingRect.haveFrames = hasTimeXAxis(); + + // NB if haveFrames, then pixrect x and width will be rewritten on + // every paint according to the current locations of the + // definitive frame values. So we should set the start frame value + // once on measureStart, and then not modify it on drag (to avoid + // drift from repeated conversion back and forth). + + m_draggingRect.pixrect = QRect(e->x(), e->y(), 0, 0); + + if (m_draggingRect.haveFrames) { + m_draggingRect.startFrame = v->getFrameForX(e->x()); + m_draggingRect.endFrame = v->getFrameForX(e->x()); + } + + setMeasureRectYCoord(v, m_draggingRect, true, e->y()); + setMeasureRectYCoord(v, m_draggingRect, false, e->y()); + m_haveDraggingRect = true; } @@ -383,11 +399,15 @@ { if (!m_haveDraggingRect) return; - setMeasureRectFromPixrect(v, m_draggingRect, - QRect(m_draggingRect.pixrect.x(), - m_draggingRect.pixrect.y(), - e->x() - m_draggingRect.pixrect.x(), - e->y() - m_draggingRect.pixrect.y())); + m_draggingRect.pixrect.setHeight(e->y() - m_draggingRect.pixrect.y()); + + if (m_draggingRect.haveFrames) { + m_draggingRect.endFrame = v->getFrameForX(e->x()); + } else { + m_draggingRect.pixrect.setWidth(e->x() - m_draggingRect.pixrect.x()); + } + + setMeasureRectYCoord(v, m_draggingRect, false, e->y()); } void