From 4023a2fb019fe4dcd1f78563bed336250635cf9a Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Tue, 30 Jun 2026 01:18:07 +0200 Subject: [PATCH] fix(strokecanvasitem): use qreal instead of float to suppress -Wdouble-promotion --- Plugins/ZShell/Internal/strokecanvasitem.cpp | 82 +++++++++----------- 1 file changed, 37 insertions(+), 45 deletions(-) diff --git a/Plugins/ZShell/Internal/strokecanvasitem.cpp b/Plugins/ZShell/Internal/strokecanvasitem.cpp index 41295c8..81f246f 100644 --- a/Plugins/ZShell/Internal/strokecanvasitem.cpp +++ b/Plugins/ZShell/Internal/strokecanvasitem.cpp @@ -6,55 +6,52 @@ namespace ZShell::internal { -StrokeCanvasItem::StrokeCanvasItem(QQuickItem *parent) : QCanvasPainterItem(parent) { +StrokeCanvasItem::StrokeCanvasItem(QQuickItem* parent) + : QCanvasPainterItem(parent) { setFillColor(Qt::transparent); setAlphaBlending(true); } -QCanvasPainterItemRenderer *StrokeCanvasItem::createItemRenderer() const { +QCanvasPainterItemRenderer* StrokeCanvasItem::createItemRenderer() const { return new StrokeCanvasRenderer; } static bool shouldAddPoint( - const QVector &points, - const QPointF &p, - qreal minDistance) -{ - if (points.isEmpty()) - return true; + const QVector& points, const QPointF& p, qreal minDistance) { + if (points.isEmpty()) return true; const QPointF delta = p - points.last(); - return QPointF::dotProduct(delta, delta) - >= minDistance * minDistance; + return QPointF::dotProduct(delta, delta) >= minDistance * minDistance; } -static QCanvasPath buildStrokePath(const QVector &points, float width) { +static QCanvasPath buildStrokePath(const QVector& points, qreal width) { QCanvasPath path; if (points.size() == 1) { - path.circle(points[0], width * 0.5f); + path.circle(points[0], width * 0.5); return path; } - auto catmullToBezier = []( - const QPointF &p0, const QPointF &p1, - const QPointF &p2, const QPointF &p3, - float tension, - QPointF &cp1, QPointF &cp2) - { - cp1 = p1 + (p2 - p0) * tension / 3.0f; - cp2 = p2 - (p3 - p1) * tension / 3.0f; - }; + auto catmullToBezier = [](const QPointF& p0, + const QPointF& p1, + const QPointF& p2, + const QPointF& p3, + qreal tension, + QPointF& cp1, + QPointF& cp2) { + cp1 = p1 + (p2 - p0) * tension / 3.0; + cp2 = p2 - (p3 - p1) * tension / 3.0; + }; - const float tension = 0.5f; + const qreal tension = 0.5; path.moveTo(points[0]); for (int i = 0; i < points.size() - 1; ++i) { - const QPointF &p0 = points[qMax(i - 1, 0)]; - const QPointF &p1 = points[i]; - const QPointF &p2 = points[i + 1]; - const QPointF &p3 = points[qMin(i + 2, points.size() - 1)]; + const QPointF& p0 = points[qMax(i - 1, 0)]; + const QPointF& p1 = points[i]; + const QPointF& p2 = points[i + 1]; + const QPointF& p3 = points[qMin(i + 2, points.size() - 1)]; QPointF cp1, cp2; catmullToBezier(p0, p1, p2, p3, tension, cp1, cp2); @@ -64,9 +61,8 @@ static QCanvasPath buildStrokePath(const QVector &points, float width) return path; } -void StrokeCanvasItem::setPenColor(const QColor &color) { - if (m_penColor == color) - return; +void StrokeCanvasItem::setPenColor(const QColor& color) { + if (m_penColor == color) return; m_penColor = color; update(); @@ -75,8 +71,7 @@ void StrokeCanvasItem::setPenColor(const QColor &color) { } void StrokeCanvasItem::setHoverVisible(bool visible) { - if (m_hoverVisible == visible) - return; + if (m_hoverVisible == visible) return; m_hoverVisible = visible; update(); @@ -84,9 +79,8 @@ void StrokeCanvasItem::setHoverVisible(bool visible) { emit hoverVisibleChanged(); } -void StrokeCanvasItem::setHoverPoint(const QPointF &point) { - if (m_hoverPoint == point) - return; +void StrokeCanvasItem::setHoverPoint(const QPointF& point) { + if (m_hoverPoint == point) return; m_hoverPoint = point; update(); @@ -110,8 +104,7 @@ void StrokeCanvasItem::showHover(qreal x, qreal y) { } void StrokeCanvasItem::hideHover() { - if (!m_hoverVisible) - return; + if (!m_hoverVisible) return; m_hoverVisible = false; update(); @@ -120,8 +113,7 @@ void StrokeCanvasItem::hideHover() { } void StrokeCanvasItem::setPenWidth(float width) { - if (qFuzzyCompare(m_penWidth, width)) - return; + if (qFuzzyCompare(m_penWidth, width)) return; m_penWidth = width; update(); @@ -143,8 +135,7 @@ void StrokeCanvasItem::beginStroke(qreal x, qreal y) { void StrokeCanvasItem::appendPoint(qreal x, qreal y) { const QPointF incoming{x, y}; - if (!shouldAddPoint(m_currentStroke.points, incoming, 2.0)) - return; + if (!shouldAddPoint(m_currentStroke.points, incoming, 2.0)) return; QPointF smoothed; if (m_currentStroke.points.isEmpty()) { @@ -159,7 +150,8 @@ void StrokeCanvasItem::appendPoint(qreal x, qreal y) { constexpr qreal minAlpha = 0.1; constexpr qreal maxAlpha = 0.3; - const qreal t = std::clamp((dist - minDist) / (maxDist - minDist), 0.0, 1.0); + const qreal t = + std::clamp((dist - minDist) / (maxDist - minDist), 0.0, 1.0); const qreal alpha = minAlpha + t * (maxAlpha - minAlpha); smoothed = last * (1.0 - alpha) + incoming * alpha; @@ -171,11 +163,11 @@ void StrokeCanvasItem::appendPoint(qreal x, qreal y) { void StrokeCanvasItem::endStroke() { m_isDrawing = false; - if (m_currentStroke.points.isEmpty()) - return; + if (m_currentStroke.points.isEmpty()) return; m_currentStroke.isSinglePoint = (m_currentStroke.points.size() == 1); - m_currentStroke.path = buildStrokePath(m_currentStroke.points, m_currentStroke.width); + m_currentStroke.path = + buildStrokePath(m_currentStroke.points, m_currentStroke.width); m_currentStroke.groupId = m_nextGroupId++; m_currentStroke.points.clear(); m_strokes.append(m_currentStroke); @@ -190,4 +182,4 @@ void StrokeCanvasItem::clear() { update(); } -}; +}; // namespace ZShell::internal