File indexing completed on 2025-02-23 04:09:03

0001 /*
0002  *  SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KisSnapPointStrategy.h"
0008 
0009 #include <QPainterPath>
0010 #include "kis_global.h"
0011 
0012 struct KisSnapPointStrategy::Private
0013 {
0014     QList<QPointF> points;
0015 };
0016 
0017 KisSnapPointStrategy::KisSnapPointStrategy(KoSnapGuide::Strategy type)
0018     : KoSnapStrategy(type),
0019       m_d(new Private)
0020 {
0021 }
0022 
0023 KisSnapPointStrategy::~KisSnapPointStrategy()
0024 {
0025 }
0026 
0027 bool KisSnapPointStrategy::snap(const QPointF &mousePosition, KoSnapProxy *proxy, qreal maxSnapDistance)
0028 {
0029     Q_UNUSED(proxy);
0030 
0031     QPointF snappedPoint = mousePosition;
0032     qreal minDistance = std::numeric_limits<qreal>::max();
0033 
0034     Q_FOREACH (const QPointF &pt, m_d->points) {
0035         const qreal dist = kisDistance(mousePosition, pt);
0036 
0037         if (dist < maxSnapDistance && dist < minDistance) {
0038             minDistance = dist;
0039             snappedPoint = pt;
0040         }
0041     }
0042 
0043     setSnappedPosition(snappedPoint);
0044     return minDistance < std::numeric_limits<qreal>::max();
0045 }
0046 
0047 QPainterPath KisSnapPointStrategy::decoration(const KoViewConverter &converter) const
0048 {
0049     Q_UNUSED(converter);
0050     return QPainterPath();
0051 }
0052 
0053 void KisSnapPointStrategy::addPoint(const QPointF &pt)
0054 {
0055     m_d->points << pt;
0056 }
0057