10#include <QNativeGestureEvent>
11#include <klocalizedstring.h>
44 setDescription(i18n(
"The <i>Rotate Canvas</i> action rotates the canvas."));
46 QHash<QString, int> shortcuts;
77 QApplication::restoreOverrideCursor();
144 const QPointF startPoint = startPos - centerPoint;
145 const QPointF newPoint = pos - centerPoint;
147 const qreal oldAngle = atan2(startPoint.y(), startPoint.x());
148 const qreal newAngle = atan2(newPoint.y(), newPoint.x());
150 qreal newRotation = (180 /
M_PI) * (newAngle - oldAngle);
174 switch (event->type()) {
175 case QEvent::NativeGesture: {
176 QNativeGestureEvent *gevent =
static_cast<QNativeGestureEvent*
>(event);
180 const float angle = gevent->value();
184 adjustedStillPoint.second = widgetPos;
186 controller->
rotateCanvas(angle, adjustedStillPoint,
true);
189 case QEvent::TouchUpdate: {
190 QTouchEvent *touchEvent =
static_cast<QTouchEvent*
>(event);
192 if (touchEvent->touchPoints().count() != 2)
195 QTouchEvent::TouchPoint tp0 = touchEvent->touchPoints().at(0);
196 QTouchEvent::TouchPoint tp1 = touchEvent->touchPoints().at(1);
198 if (tp0.state() == Qt::TouchPointReleased ||
199 tp1.state() == Qt::TouchPointReleased)
208 QPointF
p0 = tp0.pos();
209 QPointF
p1 = tp1.pos();
211 if ((
p0-
p1).manhattanLength() < 10)
222 QPointF slope =
p1 -
p0;
223 qreal newAngle = atan2(slope.y(), slope.x());
qreal rotationAngle() const
canvas rotation in degrees
KisCoordinatesConverter * coordinatesConverter
KisAbstractCanvasWidget * canvasWidget
void resetCanvasRotation()
void rotateCanvasLeft15()
void beginCanvasRotation()
void rotateCanvasRight15()
void rotateCanvas(qreal angle, const std::optional< KoViewTransformStillPoint > &stillPoint, bool isNativeGesture=false)
_Private::Traits< T >::Result flakeToWidget(const T &obj) const
QPointF flakeCenterPoint() const
KoViewTransformStillPoint makeWidgetStillPoint(const QPointF &viewPoint) const override
Creates a still point that links the viewPoint of the widget to the corresponding point of the image.
static QCursor rotateCanvasDiscreteCursor()
static QCursor rotateCanvasSmoothCursor()
KoViewTransformStillPoint actionStillPoint
KisInputActionGroup inputActionGroup(int shortcut) const override
void deactivate(int shortcut) override
void inputEvent(QEvent *event) override
~KisRotateCanvasAction() override
int priority() const override
@ RotateLeftShortcut
Rotate left by a fixed amount.
@ RotateResetShortcut
Reset the rotation to 0.
@ DiscreteRotateModeShortcut
Toggle Discrete Rotate mode.
@ RotateRightShortcut
Rotate right by a fixed amount.
@ RotateModeShortcut
Toggle Rotate mode.
bool supportsHiResInputEvents(int shortcut) const override
void cursorMovedAbsolute(const QPointF &startPos, const QPointF &pos) override
void activate(int shortcut) override
void end(QEvent *event) override
void begin(int shortcut, QEvent *event) override
KoCanvasController * canvasController() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
constexpr qreal DISCRETE_ANGLE_STEP