Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_zoom_and_rotate_action.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the KDE project
3 * SPDX-FileCopyrightText: 2019 Sharaf Zaman <sharafzaz121@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#include <QApplication>
9#include <QTouchEvent>
10
11#include <klocalizedstring.h>
13#include <kis_canvas2.h>
14#include <KisViewManager.h>
15#include <kis_algebra_2d.h>
16
18#include "kis_input_manager.h"
20
23
25public:
27
28 std::unique_ptr<KisCanvasNavigationActionStrategy> actionStrategy;
29
30 static bool zoomIsDiscrete(int shortcutIndex) {
31 return shortcutIndex == PanAndDiscreteZoomAndRotateMode ||
33 shortcutIndex == DiscreteZoomAndRotateMode ||
34 shortcutIndex == DiscreteZoomAndDiscreteRotateMode;
35 }
36
37 static bool rotationIsDiscrete(int shortcutIndex) {
38 return shortcutIndex == PanAndZoomAndDiscreteRotateMode ||
40 shortcutIndex == ZoomAndDiscreteRotateMode ||
41 shortcutIndex == DiscreteZoomAndDiscreteRotateMode;
42 }
43
44 static bool hasPanAction(int shortcutIndex) {
45 return shortcutIndex == PanAndZoomAndRotateMode ||
46 shortcutIndex == PanAndZoomAndDiscreteRotateMode ||
47 shortcutIndex == PanAndDiscreteZoomAndRotateMode ||
49 }
50};
51
53 : KisAbstractInputAction ("Zoom and Rotate Canvas")
54 , d(new Private)
55{
56 setName(i18n("Zoom and Rotate Canvas"));
57 QHash<QString, int> shortcuts;
58 shortcuts.insert(i18n("Pan, Zoom, Rotate Mode"), PanAndZoomAndRotateMode);
59 shortcuts.insert(i18n("Pan, Zoom, Discrete Rotate Mode"), PanAndZoomAndDiscreteRotateMode);
60 shortcuts.insert(i18n("Pan, Discrete Zoom, Rotate Mode"), PanAndDiscreteZoomAndRotateMode);
61 shortcuts.insert(i18n("Pan, Discrete Zoom, Discrete Rotate Mode"), PanAndDiscreteZoomAndDiscreteRotateMode);
62 shortcuts.insert(i18n("Zoom, Rotate Mode"), ZoomAndRotateMode);
63 shortcuts.insert(i18n("Zoom, Discrete Rotate Mode"), ZoomAndDiscreteRotateMode);
64 shortcuts.insert(i18n("Discrete Zoom, Rotate Mode"), DiscreteZoomAndRotateMode);
65 shortcuts.insert(i18n("Discrete Zoom, Discrete Rotate Mode"), DiscreteZoomAndDiscreteRotateMode);
66 setShortcutIndexes(shortcuts);
67}
68
72
74{
75 return 5;
76}
77
79{
80 Q_UNUSED(shortcut);
81}
82
84{
85 Q_UNUSED(shortcut);
86}
87
88void KisZoomAndRotateAction::begin(int shortcut, QEvent *event)
89{
90 if (!event) return;
91
92 if (event->type() == QEvent::NativeGesture || event->type() == QEvent::TouchBegin
93 || event->type() == QEvent::TouchUpdate) {
94
96 using Flags = KisCanvasNavigationActionStrategy::Flags;
97
98 Flags flags;
99 flags.setFlag(Flag::PanEnabled, d->hasPanAction(shortcut));
100 flags.setFlag(Flag::RotationEnabled);
101 flags.setFlag(Flag::RotationDescrete, d->rotationIsDiscrete(shortcut));
102 flags.setFlag(Flag::ZoomEnabled);
103 flags.setFlag(Flag::ZoomDescrete, d->zoomIsDiscrete(shortcut));
104
105 if (event->type() == QEvent::NativeGesture) {
106 d->actionStrategy.reset(new KisCanvasNavigationActionStrategyNativeGesture(flags, eventPosF(event), inputManager()->canvas()));
107 } else {
108 const QTouchEvent *tevent = static_cast<const QTouchEvent*>(event);
109 d->actionStrategy.reset(new KisCanvasNavigationActionStrategyTouch(flags, tevent, inputManager()->canvas()));
110 }
111 }
112}
113
115{
116 d->actionStrategy.reset();
118}
119
120void KisZoomAndRotateAction::cursorMovedAbsolute(const QPointF &, const QPointF &)
121{
122}
123
124
126{
127 if (d->actionStrategy && d->actionStrategy->supportsEvent(event)) {
128 d->actionStrategy->inputEvent(event);
129 } else {
131 }
132}
133
135{
136 Q_UNUSED(shortcut);
138}
KisInputActionGroup
@ ViewTransformActionGroup
Abstract base class for input actions.
virtual void inputEvent(QEvent *event)
static KisInputManager * inputManager
void setShortcutIndexes(const QHash< QString, int > &indexes)
QPointF eventPosF(const QEvent *event)
void setName(const QString &name)
virtual void end(QEvent *event)
std::unique_ptr< KisCanvasNavigationActionStrategy > actionStrategy
static bool zoomIsDiscrete(int shortcutIndex)
static bool hasPanAction(int shortcutIndex)
static bool rotationIsDiscrete(int shortcutIndex)
void cursorMovedAbsolute(const QPointF &lastPos, const QPointF &pos) override
void deactivate(int shortcut) override
KisInputActionGroup inputActionGroup(int shortcut) const override
void begin(int shortcut, QEvent *event) override
void activate(int shortcut) override
void end(QEvent *event) override
const QScopedPointer< Private > d
void inputEvent(QEvent *event) override
KisCanvas2 * canvas