aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp')
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp48
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();
}