diff options
Diffstat (limited to 'src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp')
-rw-r--r-- | src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp index ef844badcd..60aa706042 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "graphicsview.h" +#include "axis.h" #include "curveeditormodel.h" #include "curveitem.h" #include "treeitem.h" @@ -35,6 +36,8 @@ #include <QScrollBar> #include <cmath> +#include <iomanip> +#include <sstream> namespace DesignTools { @@ -175,8 +178,15 @@ void GraphicsView::setStyle(const CurveEditorStyle &style) void GraphicsView::setLocked(PropertyTreeItem *item) { - if (CurveItem *curve = m_scene->findCurve(item->id())) - curve->setLocked(item->locked()); + if (CurveItem *curve = m_scene->findCurve(item->id())) { + if (item->locked()) { + curve->setLocked(true); + m_scene->moveToBottom(curve); + } else { + curve->setLocked(false); + m_scene->moveToTop(curve); + } + } } void GraphicsView::setZoomX(double zoom, const QPoint &pivot) @@ -338,7 +348,7 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event) QAction *insertKeyframeAction = menu.addAction(tr("Insert Keyframe")); connect(insertKeyframeAction, &QAction::triggered, insertKeyframes); - auto deleteKeyframes = [this, event] { m_scene->deleteSelectedKeyframes(); }; + auto deleteKeyframes = [this] { m_scene->deleteSelectedKeyframes(); }; QAction *deleteKeyframeAction = menu.addAction(tr("Delete Selected Keyframes")); connect(deleteKeyframeAction, &QAction::triggered, deleteKeyframes); @@ -354,15 +364,15 @@ void GraphicsView::drawForeground(QPainter *painter, const QRectF &rect) if (abscissa.isValid()) drawTimeScale(painter, abscissa); + painter->fillRect(QRectF(rect.topLeft(), abscissa.bottomLeft()), + m_style.backgroundAlternateBrush); + auto ordinate = valueScaleRect(); if (ordinate.isValid()) drawValueScale(painter, ordinate); m_playhead.paint(painter, this); - painter->fillRect(QRectF(rect.topLeft(), abscissa.bottomLeft()), - m_style.backgroundAlternateBrush); - m_selector.paint(painter); } @@ -453,10 +463,11 @@ void GraphicsView::applyZoom(double x, double y, const QPoint &pivot) void GraphicsView::drawGrid(QPainter *painter, const QRectF &rect) { - QRectF gridRect = rect.adjusted(m_style.valueAxisWidth + m_style.canvasMargin, - m_style.timeAxisHeight + m_style.canvasMargin, - -m_style.canvasMargin, - -m_style.canvasMargin); + QRectF gridRect = rect.adjusted( + m_style.valueAxisWidth + m_style.canvasMargin, + m_style.timeAxisHeight + m_style.canvasMargin, + -m_style.canvasMargin, + -m_style.canvasMargin); if (!gridRect.isValid()) return; @@ -566,6 +577,8 @@ void GraphicsView::drawTimeScale(QPainter *painter, const QRectF &rect) for (double i = minimumTime(); i <= maximumTime(); i += timeIncrement) paintLabeledTick(i); + drawRangeBar(painter, rect); + painter->restore(); } @@ -577,17 +590,24 @@ void GraphicsView::drawValueScale(QPainter *painter, const QRectF &rect) QFontMetrics fm(painter->font()); auto paintLabeledTick = [this, painter, rect, fm](double value) { - QString valueText = QString("%1").arg(value); + std::stringstream sstr; + sstr << std::fixed << std::setprecision(10) << value; + sstr >> value; + QString valueText = QString("%1").arg(value); int position = mapValueToY(value); - QRect textRect = fm.boundingRect(valueText); textRect.moveCenter(QPoint(rect.center().x(), position)); + painter->drawText(textRect, Qt::AlignCenter, valueText); }; - paintLabeledTick(minimumValue()); - paintLabeledTick(maximumValue()); + double density = 1. / (static_cast<double>(fm.height()) * m_style.labelDensityY); + Axis axis = Axis::compute(minimumValue(), maximumValue(), rect.height(), density); + const double eps = 1.0e-10; + for (double i = axis.lmin; i <= axis.lmax + eps; i += axis.lstep) + paintLabeledTick(i); + painter->restore(); } |