Krita Source Code Documentation
Loading...
Searching...
No Matches
KisCanvasNavigationActionStrategy Class Referenceabstract

#include <KisCanvasNavigationActionStrategy.h>

+ Inheritance diagram for KisCanvasNavigationActionStrategy:

Classes

struct  SnappedRotationData
 

Public Types

enum  Flag {
  None = 0x0 , PanEnabled = 0x1 , ZoomEnabled = 0x2 , RotationEnabled = 0x4 ,
  ZoomDescrete = 0x8 , RotationDescrete = 0x10
}
 

Public Member Functions

Flags flags () const
 
virtual void inputEvent (QEvent *event)=0
 
 KisCanvasNavigationActionStrategy (const Flags &flags)
 
virtual bool supportsEvent (QEvent *event) const =0
 
virtual ~KisCanvasNavigationActionStrategy ()=default
 

Static Public Member Functions

static qreal canvasRotationAngleContinuous (qreal currentRotationOffset, qreal currectCanvasRotation, SnappedRotationData &data)
 
static qreal canvasRotationAngleDescrete (qreal currentRotationOffset, SnappedRotationData &data)
 

Private Attributes

Flags m_flags {None}
 

Detailed Description

Definition at line 15 of file KisCanvasNavigationActionStrategy.h.

Member Enumeration Documentation

◆ Flag

Constructor & Destructor Documentation

◆ KisCanvasNavigationActionStrategy()

KisCanvasNavigationActionStrategy::KisCanvasNavigationActionStrategy ( const Flags & flags)

◆ ~KisCanvasNavigationActionStrategy()

virtual KisCanvasNavigationActionStrategy::~KisCanvasNavigationActionStrategy ( )
virtualdefault

Member Function Documentation

◆ canvasRotationAngleContinuous()

qreal KisCanvasNavigationActionStrategy::canvasRotationAngleContinuous ( qreal currentRotationOffset,
qreal currectCanvasRotation,
SnappedRotationData & data )
static

Definition at line 23 of file KisCanvasNavigationActionStrategy.cpp.

24{
25 if (!data.previousAngle) {
26 data.previousAngle = currentRelativeRotation;
27 return 0;
28 }
29 qreal rotationAngle = (180 / M_PI) * (currentRelativeRotation - data.previousAngle);
30 data.previousAngle = currentRelativeRotation;
31
32 const qreal canvasAnglePostRotation = currectCanvasRotation + rotationAngle;
33 const qreal snapDelta = angleForSnapping(canvasAnglePostRotation);
34 // we snap the canvas to an angle that is a multiple of 45
35 if (abs(snapDelta) <= 2 && abs(data.accumRotationAngle) <= 2) {
36 // accumulate the relative angle of finger from the point when we started snapping
37 data.accumRotationAngle += rotationAngle;
38 rotationAngle = rotationAngle - snapDelta;
39 } else {
40 // snap the canvas out using the accumulated angle
41 rotationAngle += data.accumRotationAngle;
42 data.accumRotationAngle = 0;
43 }
44
45 return rotationAngle;
46}
#define M_PI
Definition kis_global.h:111
Point abs(const Point &pt)

References KisCanvasNavigationActionStrategy::SnappedRotationData::accumRotationAngle, M_PI, and KisCanvasNavigationActionStrategy::SnappedRotationData::previousAngle.

◆ canvasRotationAngleDescrete()

qreal KisCanvasNavigationActionStrategy::canvasRotationAngleDescrete ( qreal currentRotationOffset,
SnappedRotationData & data )
static

Definition at line 48 of file KisCanvasNavigationActionStrategy.cpp.

49{
50 if (!data.initialReferenceAngle) {
51 data.initialReferenceAngle = currentRelativeRotation;
52 return 0;
53 }
54 qreal rotationAngle = 0;
55 const qreal relativeAngle = (180 / M_PI) * (currentRelativeRotation - data.initialReferenceAngle);
56 const qreal rotationThreshold = 15;
57
58 // if the canvas is moved in either direction with an angle greater than the threshold, we rotate the canvas in
59 // that direction by 15°.
60 if (std::abs(relativeAngle) >= rotationThreshold && std::abs(relativeAngle) <= (360 - rotationThreshold)) {
61 // set reference as currentAngle to check if we go beyond the threshold next time
62 data.initialReferenceAngle = currentRelativeRotation;
63
64 if (std::abs(relativeAngle) <= 180) {
65 rotationAngle = KisAlgebra2D::copysign(15.0, relativeAngle);
66 } else {
67 // if we're over 180, it means the canvas has to be rotated in the opposite direction of the current
68 // angle. E.g if the relative angle is +341° then we move the canvas by -15° (because the actual effect
69 // is 341 - 360 = -19° on the original theta).
70 rotationAngle = KisAlgebra2D::copysign(15.0, -relativeAngle);
71 }
72 }
73 return rotationAngle;
74}
T copysign(T x, T y)

References KisAlgebra2D::copysign(), KisCanvasNavigationActionStrategy::SnappedRotationData::initialReferenceAngle, and M_PI.

◆ flags()

KisCanvasNavigationActionStrategy::Flags KisCanvasNavigationActionStrategy::flags ( ) const

Definition at line 81 of file KisCanvasNavigationActionStrategy.cpp.

82{
83 return m_flags;
84}

References m_flags.

◆ inputEvent()

virtual void KisCanvasNavigationActionStrategy::inputEvent ( QEvent * event)
pure virtual

◆ supportsEvent()

virtual bool KisCanvasNavigationActionStrategy::supportsEvent ( QEvent * event) const
pure virtual

Member Data Documentation

◆ m_flags

Flags KisCanvasNavigationActionStrategy::m_flags {None}
private

Definition at line 47 of file KisCanvasNavigationActionStrategy.h.

47{None};

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