Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSnapLineStrategy Class Reference

#include <kis_snap_line_strategy.h>

+ Inheritance diagram for KisSnapLineStrategy:

Classes

struct  Private
 

Public Member Functions

void addLine (Qt::Orientation orientation, qreal pos)
 
QPainterPath decoration (const KoViewConverter &converter) const override
 returns the current snap strategy decoration
 
 KisSnapLineStrategy (KoSnapGuide::Strategy type=KoSnapGuide::CustomSnapping)
 
void setHorizontalLines (const QList< qreal > &lines)
 
void setVerticalLines (const QList< qreal > &lines)
 
bool snap (const QPointF &mousePosition, KoSnapProxy *proxy, qreal maxSnapDistance) override
 
 ~KisSnapLineStrategy () override
 
- Public Member Functions inherited from KoSnapStrategy
 KoSnapStrategy (KoSnapGuide::Strategy type)
 
QPointF snappedPosition () const
 returns the snapped position form the last call to snapToPoints
 
SnapType snappedType () const
 
KoSnapGuide::Strategy type () const
 returns the strategies type
 
virtual ~KoSnapStrategy ()
 

Private Attributes

const QScopedPointer< Privatem_d
 

Additional Inherited Members

- Public Types inherited from KoSnapStrategy
enum  SnapType { ToPoint = 0 , ToLine }
 
- Static Public Member Functions inherited from KoSnapStrategy
static qreal scalarProduct (const QPointF &p1, const QPointF &p2)
 
static qreal squareDistance (const QPointF &p1, const QPointF &p2)
 
- Protected Member Functions inherited from KoSnapStrategy
void setSnappedPosition (const QPointF &position, SnapType snapType)
 sets the current snapped position
 

Detailed Description

Definition at line 15 of file kis_snap_line_strategy.h.

Constructor & Destructor Documentation

◆ KisSnapLineStrategy()

KisSnapLineStrategy::KisSnapLineStrategy ( KoSnapGuide::Strategy type = KoSnapGuide::CustomSnapping)

Definition at line 19 of file kis_snap_line_strategy.cpp.

21 m_d(new Private)
22{
23}
const QScopedPointer< Private > m_d
KoSnapGuide::Strategy type() const
returns the strategies type
KoSnapStrategy(KoSnapGuide::Strategy type)

◆ ~KisSnapLineStrategy()

KisSnapLineStrategy::~KisSnapLineStrategy ( )
override

Definition at line 25 of file kis_snap_line_strategy.cpp.

26{
27}

Member Function Documentation

◆ addLine()

void KisSnapLineStrategy::addLine ( Qt::Orientation orientation,
qreal pos )

Definition at line 83 of file kis_snap_line_strategy.cpp.

84{
85 if (orientation == Qt::Horizontal) {
86 m_d->horizontalLines << pos;
87 } else {
88 m_d->verticalLines << pos;
89 }
90}

References m_d.

◆ decoration()

QPainterPath KisSnapLineStrategy::decoration ( const KoViewConverter & converter) const
overridevirtual

returns the current snap strategy decoration

Implements KoSnapStrategy.

Definition at line 72 of file kis_snap_line_strategy.cpp.

73{
74 QSizeF unzoomedSize = converter.viewToDocument(QSizeF(5, 5));
75 QPainterPath decoration;
76 decoration.moveTo(snappedPosition() - QPointF(unzoomedSize.width(), 0));
77 decoration.lineTo(snappedPosition() + QPointF(unzoomedSize.width(), 0));
78 decoration.moveTo(snappedPosition() - QPointF(0, unzoomedSize.height()));
79 decoration.lineTo(snappedPosition() + QPointF(0, unzoomedSize.height()));
80 return decoration;
81}
QPainterPath decoration(const KoViewConverter &converter) const override
returns the current snap strategy decoration
QPointF snappedPosition() const
returns the snapped position form the last call to snapToPoints
virtual QPointF viewToDocument(const QPointF &viewPoint) const

References decoration(), KoSnapStrategy::snappedPosition(), and KoViewConverter::viewToDocument().

◆ setHorizontalLines()

void KisSnapLineStrategy::setHorizontalLines ( const QList< qreal > & lines)

Definition at line 92 of file kis_snap_line_strategy.cpp.

93{
94 m_d->horizontalLines = lines;
95}

References m_d.

◆ setVerticalLines()

void KisSnapLineStrategy::setVerticalLines ( const QList< qreal > & lines)

Definition at line 97 of file kis_snap_line_strategy.cpp.

98{
99 m_d->verticalLines = lines;
100}

References m_d.

◆ snap()

bool KisSnapLineStrategy::snap ( const QPointF & mousePosition,
KoSnapProxy * proxy,
qreal maxSnapDistance )
overridevirtual

Implements KoSnapStrategy.

Definition at line 29 of file kis_snap_line_strategy.cpp.

30{
31 Q_UNUSED(proxy);
32
33 QPointF snappedPoint = mousePosition;
34 qreal minXDistance = std::numeric_limits<qreal>::max();
35 qreal minYDistance = std::numeric_limits<qreal>::max();
36
37 Q_FOREACH (qreal line, m_d->horizontalLines) {
38 const qreal dist = qAbs(mousePosition.y() - line);
39
40 if (dist < maxSnapDistance && dist < minYDistance) {
41 minYDistance = dist;
42 snappedPoint.ry() = line;
43 }
44 }
45
46 Q_FOREACH (qreal line, m_d->verticalLines) {
47 const qreal dist = qAbs(mousePosition.x() - line);
48
49 if (dist < maxSnapDistance && dist < minXDistance) {
50 minXDistance = dist;
51 snappedPoint.rx() = line;
52 }
53 }
54
55 if (kisDistance(snappedPoint, mousePosition) > maxSnapDistance) {
56 if (minXDistance < minYDistance) {
57 snappedPoint.ry() = mousePosition.y();
58 } else {
59 snappedPoint.rx() = mousePosition.x();
60 }
61 }
62
63 const SnapType snapType = minXDistance < std::numeric_limits<qreal>::max() &&
64 minYDistance < std::numeric_limits<qreal>::max() ? ToPoint : ToLine;
65
66 setSnappedPosition(snappedPoint, snapType);
67 return
68 minXDistance < std::numeric_limits<qreal>::max() ||
69 minYDistance < std::numeric_limits<qreal>::max();
70}
void setSnappedPosition(const QPointF &position, SnapType snapType)
sets the current snapped position
qreal kisDistance(const QPointF &pt1, const QPointF &pt2)
Definition kis_global.h:190

References kisDistance(), m_d, KoSnapStrategy::setSnappedPosition(), KoSnapStrategy::ToLine, and KoSnapStrategy::ToPoint.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisSnapLineStrategy::m_d
private

Definition at line 31 of file kis_snap_line_strategy.h.


The documentation for this class was generated from the following files: