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);
170 switch (event->type()) {
171 case QEvent::NativeGesture: {
172 QNativeGestureEvent *gevent =
static_cast<QNativeGestureEvent*
>(event);
176 const float angle = gevent->value();
180 adjustedStillPoint.second = widgetPos;
182 controller->
rotateCanvas(angle, adjustedStillPoint,
true);
185 case QEvent::TouchUpdate: {
186 QTouchEvent *touchEvent =
static_cast<QTouchEvent*
>(event);
188 if (touchEvent->touchPoints().count() != 2)
191 QTouchEvent::TouchPoint tp0 = touchEvent->touchPoints().at(0);
192 QTouchEvent::TouchPoint tp1 = touchEvent->touchPoints().at(1);
194 if (tp0.state() == Qt::TouchPointReleased ||
195 tp1.state() == Qt::TouchPointReleased)
204 QPointF
p0 = tp0.pos();
205 QPointF
p1 = tp1.pos();
207 if ((
p0-
p1).manhattanLength() < 10)
218 QPointF slope =
p1 -
p0;
219 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