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

0001 /*
0002  *  SPDX-FileCopyrightText: 2019 Kuntal Majumder <hellozee@disroot.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KisSnapPixelStrategy.h"
0008 
0009 #include <QPainterPath>
0010 #include "kis_global.h"
0011 #include "kis_canvas2.h"
0012 #include "KoSnapProxy.h"
0013 
0014 KisSnapPixelStrategy::KisSnapPixelStrategy(KoSnapGuide::Strategy type):
0015     KoSnapStrategy(type)
0016 {
0017 }
0018 
0019 KisSnapPixelStrategy::~KisSnapPixelStrategy()
0020 {
0021 }
0022 
0023 bool KisSnapPixelStrategy::snap(const QPointF &mousePosition, KoSnapProxy *proxy, qreal maxSnapDistance)
0024 {
0025     Q_UNUSED(maxSnapDistance);
0026     KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2*>(proxy->canvas());
0027     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(canvas2, false);
0028 
0029     const QPointF imagePos = canvas2->coordinatesConverter()->documentToImage(mousePosition);
0030     const QPointF alignedDocPoint = canvas2->coordinatesConverter()->imageToDocument(imagePos.toPoint());
0031     setSnappedPosition(alignedDocPoint);
0032 
0033     return true;
0034 }
0035 
0036 QPainterPath KisSnapPixelStrategy::decoration(const KoViewConverter &converter) const
0037 {
0038     QSizeF unzoomedSize = converter.viewToDocument(QSizeF(5, 5));
0039     QPainterPath decoration;
0040     decoration.moveTo(snappedPosition() - QPointF(unzoomedSize.width(), 0));
0041     decoration.lineTo(snappedPosition() + QPointF(unzoomedSize.width(), 0));
0042     decoration.moveTo(snappedPosition() - QPointF(0, unzoomedSize.height()));
0043     decoration.lineTo(snappedPosition() + QPointF(0, unzoomedSize.height()));
0044     return decoration;
0045 }