# HG changeset patch # User Chris Cannam # Date 1553181740 0 # Node ID ec66055635440b86c34aef9d65b637b74825744b # Parent 70e93f996da6f737e89d4d31943e72e309195e69 Fix tendency of start position of measure rect to wander as you drag out the rec t (at certain zoom resolutions) diff -r 70e93f996da6 -r ec6605563544 layer/Layer.cpp --- a/layer/Layer.cpp Mon Feb 18 14:33:35 2019 +0000 +++ b/layer/Layer.cpp Thu Mar 21 15:22:20 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