Krita Source Code Documentation
Loading...
Searching...
No Matches
KoSnapStrategy.h
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2008-2009 Jan Hambrecht <jaham@gmx.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#ifndef KOSNAPSTRATEGY_H
8#define KOSNAPSTRATEGY_H
9
10#include "KoSnapGuide.h"
11
12#include <QLineF>
13
14class TestSnapStrategy;
15class KoPathPoint;
16class KoSnapProxy;
17class KoViewConverter;
18
19class QTransform;
20class QPainterPath;
21
22class KRITAFLAKE_EXPORT KoSnapStrategy
23{
24public:
25 enum SnapType {
26 ToPoint = 0,
27 ToLine
28 };
29
30public:
32 virtual ~KoSnapStrategy() {};
33
34 virtual bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) = 0;
35
37 KoSnapGuide::Strategy type() const;
38
39 static qreal squareDistance(const QPointF &p1, const QPointF &p2);
40 static qreal scalarProduct(const QPointF &p1, const QPointF &p2);
41
43 QPointF snappedPosition() const;
44 SnapType snappedType() const;
45
47 virtual QPainterPath decoration(const KoViewConverter &converter) const = 0;
48
49protected:
51 void setSnappedPosition(const QPointF &position, SnapType snapType);
52
53private:
56 SnapType m_snappedType = ToPoint;
57};
58
60{
61 return int(lhs) < int(rhs);
62}
63
65class KRITAFLAKE_EXPORT OrthogonalSnapStrategy : public KoSnapStrategy
66{
67public:
69 bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) override;
70 QPainterPath decoration(const KoViewConverter &converter) const override;
71private:
72 QLineF m_hLine;
73 QLineF m_vLine;
74};
75
77class KRITAFLAKE_EXPORT NodeSnapStrategy : public KoSnapStrategy
78{
79public:
81 bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) override;
82 QPainterPath decoration(const KoViewConverter &converter) const override;
83};
84
86class KRITAFLAKE_EXPORT ExtensionSnapStrategy : public KoSnapStrategy
87{
88 friend class TestSnapStrategy;
89public:
91 bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) override;
92 QPainterPath decoration(const KoViewConverter &converter) const override;
93private:
94 qreal project(const QPointF &lineStart , const QPointF &lineEnd, const QPointF &point);
95 QPointF extensionDirection(KoPathPoint * point, const QTransform &matrix);
96 bool snapToExtension(QPointF &position, KoPathPoint * point, const QTransform &matrix);
98};
99
101class KRITAFLAKE_EXPORT IntersectionSnapStrategy : public KoSnapStrategy
102{
103public:
105 bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) override;
106 QPainterPath decoration(const KoViewConverter &converter) const override;
107};
108
110class KRITAFLAKE_EXPORT GridSnapStrategy : public KoSnapStrategy
111{
112public:
114 bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) override;
115 QPainterPath decoration(const KoViewConverter &converter) const override;
116};
117
119class KRITAFLAKE_EXPORT BoundingBoxSnapStrategy : public KoSnapStrategy
120{
121 friend class TestSnapStrategy;
122public:
124 bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance) override;
125 QPainterPath decoration(const KoViewConverter &converter) const override;
126private:
127 qreal squareDistanceToLine(const QPointF &lineA, const QPointF &lineB, const QPointF &point, QPointF &pointOnLine);
128 QPointF m_boxPoints[5];
129};
130
131// KoGuidesData has been moved into Krita. Please port this class!
132//
134// class KRITAFLAKE_EXPORT LineGuideSnapStrategy : public KoSnapStrategy
135// {
136// public:
137// LineGuideSnapStrategy();
138// virtual bool snap(const QPointF &mousePosition, KoSnapProxy * proxy, qreal maxSnapDistance);
139// virtual QPainterPath decoration(const KoViewConverter &converter) const;
140// private:
141// int m_orientation;
142// };
143
144#endif // KOSNAPSTRATEGY_H
QPointF p2
QPointF p1
qreal squareDistance(const QPointF &p1, const QPointF &p2)
bool operator<(KoSnapStrategy::SnapType lhs, KoSnapStrategy::SnapType rhs)
snaps to shape bounding boxes
snaps extension lines of path shapes
QList< QLineF > m_lines
snaps to the canvas grid
snaps to intersections of shapes
A KoPathPoint represents a point in a path.
Strategy
the different possible snap Strategies
Definition KoSnapGuide.h:49
QPointF m_snappedPosition
virtual QPainterPath decoration(const KoViewConverter &converter) const =0
returns the current snap strategy decoration
virtual ~KoSnapStrategy()
virtual bool snap(const QPointF &mousePosition, KoSnapProxy *proxy, qreal maxSnapDistance)=0
KoSnapGuide::Strategy m_snapStrategyType
snaps to path points
snaps to x- or y-coordinates of path points