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

Tool Invocation action of KisAbstractInputAction. More...

#include <kis_tool_invocation_action.h>

+ Inheritance diagram for KisToolInvocationAction:

Classes

class  Private
 

Public Types

enum  Shortcut {
  ActivateShortcut , ConfirmShortcut , CancelShortcut , LineToolShortcut ,
  EllipseToolShortcut , RectToolShortcut , MoveToolShortcut , FillToolShortcut ,
  GradientToolShortcut , MeasureToolShortcut , EllipseSelToolShortcut , RectSelToolShortcut ,
  ContigSelToolShortcut , FreehandSelToolShortcut , ActivateWithOtherColorShortcut
}
 

Public Member Functions

void activate (int shortcut) override
 
void begin (int shortcut, QEvent *event) override
 
bool canIgnoreModifiers () const override
 
void deactivate (int shortcut) override
 
void end (QEvent *event) override
 
KisInputActionGroup inputActionGroup (int shortcut) const override
 
void inputEvent (QEvent *event) override
 
bool isShortcutRequired (int shortcut) const override
 
 KisToolInvocationAction ()
 
int priority () const override
 
void processUnhandledEvent (QEvent *event)
 
bool supportsHiResInputEvents (int shortcut) const override
 
 ~KisToolInvocationAction () override
 
- Public Member Functions inherited from KisAbstractInputAction
virtual QString description () const
 
virtual QString id () const
 
virtual bool isAvailable () const
 
 KisAbstractInputAction (const QString &id)
 
virtual QString name () const
 
virtual QHash< QString, int > shortcutIndexes () const
 
virtual ~KisAbstractInputAction ()
 

Private Attributes

Private *const d
 

Additional Inherited Members

- Public Attributes inherited from KisAbstractInputAction
QString description
 
QString id
 
QHash< QString, int > indexes
 
QPointF lastCursorPosition
 
QString name
 
QPointF startCursorPosition
 
- Static Public Attributes inherited from KisAbstractInputAction
static KisInputManagerinputManager
 
- Protected Member Functions inherited from KisAbstractInputAction
virtual void cursorMoved (const QPointF &lastPos, const QPointF &pos)
 
virtual void cursorMovedAbsolute (const QPointF &startPos, const QPointF &pos)
 
QPoint eventPos (const QEvent *event)
 
QPointF eventPosF (const QEvent *event)
 
KisInputManagerinputManager () const
 
void setDescription (const QString &description)
 
void setName (const QString &name)
 
void setShortcutIndexes (const QHash< QString, int > &indexes)
 

Detailed Description

Tool Invocation action of KisAbstractInputAction.

The Tool Invocation action invokes the current tool, for example, using the brush tool, it will start painting.

Definition at line 18 of file kis_tool_invocation_action.h.

Member Enumeration Documentation

◆ Shortcut

Enumerator
ActivateShortcut 
ConfirmShortcut 
CancelShortcut 
LineToolShortcut 
EllipseToolShortcut 
RectToolShortcut 
MoveToolShortcut 
FillToolShortcut 
GradientToolShortcut 
MeasureToolShortcut 
EllipseSelToolShortcut 
RectSelToolShortcut 
ContigSelToolShortcut 
FreehandSelToolShortcut 
ActivateWithOtherColorShortcut 

Definition at line 21 of file kis_tool_invocation_action.h.

21 {
37 };

Constructor & Destructor Documentation

◆ KisToolInvocationAction()

KisToolInvocationAction::KisToolInvocationAction ( )
explicit

Definition at line 34 of file kis_tool_invocation_action.cpp.

35 : KisAbstractInputAction("Tool Invocation")
36 , d(new Private)
37{
38 setName(i18n("Tool Invocation"));
39 setDescription(i18n("The <i>Tool Invocation</i> action invokes the current tool, for example, using the brush tool, it will start painting."));
40
41 QHash<QString, int> indexes;
42 indexes.insert(i18n("Activate"), ActivateShortcut);
43 indexes.insert(i18n("Confirm"), ConfirmShortcut);
44 indexes.insert(i18n("Cancel"), CancelShortcut);
45 indexes.insert(i18n("Activate Line Tool"), LineToolShortcut);
46 indexes.insert(i18n("Activate Ellipse Tool"), EllipseToolShortcut);
47 indexes.insert(i18n("Activate Rectangle Tool"), RectToolShortcut);
48 indexes.insert(i18n("Activate Move Tool"), MoveToolShortcut);
49 indexes.insert(i18n("Activate Fill Tool"), FillToolShortcut);
50 indexes.insert(i18n("Activate Gradient Tool"), GradientToolShortcut);
51 indexes.insert(i18n("Activate Measure Tool"), MeasureToolShortcut);
52 indexes.insert(i18n("Activate Elliptical Selection Tool"), EllipseSelToolShortcut);
53 indexes.insert(i18n("Activate Rectangular Selection Tool"), RectSelToolShortcut);
54 indexes.insert(i18n("Activate Contiguous Selection Tool"), ContigSelToolShortcut);
55 indexes.insert(i18n("Activate Freehand Selection Tool"), FreehandSelToolShortcut);
56 indexes.insert(i18n("Activate with Other Color"), ActivateWithOtherColorShortcut);
57
59}
KisAbstractInputAction(const QString &id)
void setShortcutIndexes(const QHash< QString, int > &indexes)
void setName(const QString &name)
void setDescription(const QString &description)

References ActivateShortcut, ActivateWithOtherColorShortcut, CancelShortcut, ConfirmShortcut, ContigSelToolShortcut, EllipseSelToolShortcut, EllipseToolShortcut, FillToolShortcut, FreehandSelToolShortcut, GradientToolShortcut, KisAbstractInputAction::indexes, LineToolShortcut, MeasureToolShortcut, MoveToolShortcut, RectSelToolShortcut, RectToolShortcut, KisAbstractInputAction::setDescription(), KisAbstractInputAction::setName(), and KisAbstractInputAction::setShortcutIndexes().

◆ ~KisToolInvocationAction()

KisToolInvocationAction::~KisToolInvocationAction ( )
override

Definition at line 61 of file kis_tool_invocation_action.cpp.

62{
63 delete d;
64}

References d.

Member Function Documentation

◆ activate()

void KisToolInvocationAction::activate ( int shortcut)
overridevirtual

The method is called when the action is yet to be started, that is, e.g. the user has pressed all the modifiers for the action but hasn't started painting yet. This method is a right place to show the user what is going to happen, e.g. change the cursor.

Reimplemented from KisAbstractInputAction.

Definition at line 66 of file kis_tool_invocation_action.cpp.

67{
68 Q_UNUSED(shortcut);
69 if (!inputManager()) return;
70
71 QString temporaryToolId;
72 switch(shortcut) {
74 temporaryToolId = "KritaShape/KisToolLine";
75 break;
77 temporaryToolId = "KritaShape/KisToolEllipse";
78 break;
80 temporaryToolId = "KritaShape/KisToolRectangle";
81 break;
83 temporaryToolId = "KritaTransform/KisToolMove";
84 break;
86 temporaryToolId = "KritaFill/KisToolFill";
87 break;
89 temporaryToolId = "KritaFill/KisToolGradient";
90 break;
92 temporaryToolId = "KritaShape/KisToolMeasure";
93 break;
95 temporaryToolId = "KisToolSelectElliptical";
96 break;
98 temporaryToolId = "KisToolSelectRectangular";
99 break;
101 temporaryToolId = "KisToolSelectContiguous";
102 break;
104 temporaryToolId = "KisToolSelectOutline";
105 break;
106 }
107
108 if (!temporaryToolId.isEmpty()) {
110 }
111
113
115
116 if (d->isUsingOtherColor) {
117 inputManager()->canvas()->resourceManager()->setUsingOtherColor(true);
118 }
119
120 d->activatedToolProxy->activateToolAction(KisTool::Primary);
121}
static KisInputManager * inputManager
KisCanvas2 * canvas() const
QPointer< KisToolProxy > toolProxy() const
QPointer< KoCanvasResourceProvider > resourceManager
void switchToolRequested(const QString &id)
static KoToolManager * instance()
Return the toolmanager singleton.
@ Primary
Definition kis_tool.h:118

References KisToolInvocationAction::Private::activatedToolProxy, ActivateWithOtherColorShortcut, KisInputManager::canvas(), ContigSelToolShortcut, d, EllipseSelToolShortcut, EllipseToolShortcut, FillToolShortcut, FreehandSelToolShortcut, GradientToolShortcut, KisAbstractInputAction::inputManager, KoToolManager::instance(), KisToolInvocationAction::Private::isUsingOtherColor, LineToolShortcut, MeasureToolShortcut, MoveToolShortcut, KisTool::Primary, RectSelToolShortcut, RectToolShortcut, KoCanvasBase::resourceManager, KoToolManager::switchToolRequested(), and KisInputManager::toolProxy().

◆ begin()

void KisToolInvocationAction::begin ( int shortcut,
QEvent * event )
overridevirtual

Begin the action.

Parameters
shortcutThe index of the behaviour to trigger.
eventThe mouse event that has triggered this action. Is null for keyboard-activated actions.

All the tools now have a KisTool::requestStrokeEnd() method, so they should use this instead of direct filtering Enter key press. Until all the tools support it, we just duplicate the key event and the method call

Some tools would like to distinguish automated requestStrokeEnd() calls from explicit user actions. Just let them do it!

Please note that this call should happen after requestStrokeEnd(). Some of the tools will switch to another tool on this request, and this (next) tool does not expect to get requestStrokeEnd() right after switching in.

The tools now have a KisTool::requestStrokeCancellation() method, so just request it.

Reimplemented from KisAbstractInputAction.

Definition at line 160 of file kis_tool_invocation_action.cpp.

161{
162 if (shortcut != ConfirmShortcut && shortcut != CancelShortcut ) {
164 d->active =
165 d->runningToolProxy->forwardEvent(
167 }
168 else if (shortcut == ConfirmShortcut) {
169 QKeyEvent pressEvent(QEvent::KeyPress, Qt::Key_Return, QFlags<Qt::KeyboardModifier>());
170 inputManager()->toolProxy()->keyPressEvent(&pressEvent);
171 QKeyEvent releaseEvent(QEvent::KeyRelease, Qt::Key_Return, QFlags<Qt::KeyboardModifier>());
172 inputManager()->toolProxy()->keyReleaseEvent(&releaseEvent);
173
181
191 inputManager()->toolProxy()->explicitUserStrokeEndRequest();
192
193 } else if (shortcut == CancelShortcut) {
200 }
201}
KisImageWSP image() const
void requestStrokeCancellation()
void requestStrokeEnd()

References KisToolInvocationAction::Private::active, KisToolProxy::BEGIN, CancelShortcut, KisInputManager::canvas(), ConfirmShortcut, d, KisCanvas2::image(), KisAbstractInputAction::inputManager, KisTool::Primary, KisImage::requestStrokeCancellation(), KisImage::requestStrokeEnd(), KisToolInvocationAction::Private::runningToolProxy, and KisInputManager::toolProxy().

◆ canIgnoreModifiers()

bool KisToolInvocationAction::canIgnoreModifiers ( ) const
overridevirtual

Returns true if an action can run with any modifiers pressed (the shortcut's modifiers list must be empty for that). That is used for making one type of actions default one.

Reimplemented from KisAbstractInputAction.

Definition at line 155 of file kis_tool_invocation_action.cpp.

156{
157 return true;
158}

◆ deactivate()

void KisToolInvocationAction::deactivate ( int shortcut)
overridevirtual

The method is called when the action is not a candidate for the starting anymore. The action should revert everything that was done in activate() method.

See also
activate()

Activate call might have come before actual input manager or tool proxy was attached. So we may end up with null activatedToolProxy.

Reimplemented from KisAbstractInputAction.

Definition at line 123 of file kis_tool_invocation_action.cpp.

124{
125 Q_UNUSED(shortcut);
126 if (!inputManager()) return;
127
128 // Revert UsingOtherColor
129 if (d->isUsingOtherColor) {
130 inputManager()->canvas()->resourceManager()->setUsingOtherColor(false);
131 }
132
137 if (d->activatedToolProxy) {
138 d->activatedToolProxy->deactivateToolAction(KisTool::Primary);
139 d->activatedToolProxy.clear();
140 }
141
142 if (shortcut != ActivateShortcut && shortcut != ConfirmShortcut && shortcut != CancelShortcut && shortcut != ActivateWithOtherColorShortcut && !d->deactivating) {
143 // Switching tool will force deactivation and will re-enter
144 d->deactivating = true;
146 d->deactivating = false;
147 }
148}
void switchBackRequested()

References KisToolInvocationAction::Private::activatedToolProxy, ActivateShortcut, ActivateWithOtherColorShortcut, CancelShortcut, KisInputManager::canvas(), ConfirmShortcut, d, KisToolInvocationAction::Private::deactivating, KisAbstractInputAction::inputManager, KoToolManager::instance(), KisToolInvocationAction::Private::isUsingOtherColor, KisTool::Primary, KoCanvasBase::resourceManager, and KoToolManager::switchBackRequested().

◆ end()

void KisToolInvocationAction::end ( QEvent * event)
overridevirtual

End the action.

Parameters
eventThe mouse event that has finished this action. Is null for keyboard-activated actions.

Reimplemented from KisAbstractInputAction.

Definition at line 203 of file kis_tool_invocation_action.cpp.

204{
205 if (d->active) {
206 // It might happen that the action is still running, while the
207 // canvas has been removed, which kills the toolProxy.
209 if (d->runningToolProxy) {
211 forwardEvent(KisToolProxy::END, KisTool::Primary, event, event);
212 d->runningToolProxy.clear();
213 }
214 d->active = false;
215 }
216
218}
virtual void end(QEvent *event)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References KisToolInvocationAction::Private::active, d, KisToolProxy::END, KisAbstractInputAction::end(), KIS_SAFE_ASSERT_RECOVER_NOOP, KisTool::Primary, and KisToolInvocationAction::Private::runningToolProxy.

◆ inputActionGroup()

KisInputActionGroup KisToolInvocationAction::inputActionGroup ( int shortcut) const
overridevirtual
Returns
the group of the action the specified shortcut belongs to

Reimplemented from KisAbstractInputAction.

Definition at line 255 of file kis_tool_invocation_action.cpp.

256{
257 Q_UNUSED(shortcut);
259}
@ ToolInvoactionActionGroup

References ToolInvoactionActionGroup.

◆ inputEvent()

void KisToolInvocationAction::inputEvent ( QEvent * event)
overridevirtual

Process an input event.

By default handles MouseMove events and passes the data to a convenience cursorMoved() method

Parameters
eventAn event to process.

Reimplemented from KisAbstractInputAction.

Definition at line 220 of file kis_tool_invocation_action.cpp.

221{
222 if (!d->active) return;
223 if (!d->runningToolProxy) return;
224
226 forwardEvent(KisToolProxy::CONTINUE, KisTool::Primary, event, event);
227}

References KisToolInvocationAction::Private::active, KisToolProxy::CONTINUE, d, KisTool::Primary, and KisToolInvocationAction::Private::runningToolProxy.

◆ isShortcutRequired()

bool KisToolInvocationAction::isShortcutRequired ( int shortcut) const
overridevirtual

Return true when the specified shortcut is required for basic user interaction. This is used by the configuration system to prevent basic actions like painting from being removed.

Parameters
shortcutThe shortcut index to check.
Returns
True if the shortcut is required, false if not.

Reimplemented from KisAbstractInputAction.

Definition at line 248 of file kis_tool_invocation_action.cpp.

249{
250 // These three shortcuts are pretty important for basic user interaction,
251 // so they should always exist.
252 return (shortcut == ActivateShortcut || shortcut == ConfirmShortcut || shortcut == CancelShortcut);
253}

References ActivateShortcut, CancelShortcut, and ConfirmShortcut.

◆ priority()

int KisToolInvocationAction::priority ( ) const
overridevirtual

The priority for this action.

Priority determines how "important" the action is and is used to resolve conflicts when multiple actions can be activated.

Reimplemented from KisAbstractInputAction.

Definition at line 150 of file kis_tool_invocation_action.cpp.

151{
152 return 0;
153}

◆ processUnhandledEvent()

void KisToolInvocationAction::processUnhandledEvent ( QEvent * event)

Definition at line 229 of file kis_tool_invocation_action.cpp.

230{
231 bool savedState = d->active;
232 KisToolProxy *savedToolProxy = d->runningToolProxy;
233 if (!d->runningToolProxy) {
235 }
236 d->active = true;
237 inputEvent(event);
238 d->active = savedState;
239 d->runningToolProxy = savedToolProxy;
240}
void inputEvent(QEvent *event) override

References KisToolInvocationAction::Private::active, d, inputEvent(), KisAbstractInputAction::inputManager, KisToolInvocationAction::Private::runningToolProxy, and KisInputManager::toolProxy().

◆ supportsHiResInputEvents()

bool KisToolInvocationAction::supportsHiResInputEvents ( int shortcut) const
overridevirtual

Returns true if the action can handle HiRes flow of move events which is generated by the tablet. If the function returns false, some of the events will be dropped or postponed. For most of the actions in Krita (except of real painting) it is perfectly acceptable, so 'false' is the default value.

Reimplemented from KisAbstractInputAction.

Definition at line 242 of file kis_tool_invocation_action.cpp.

243{
244 Q_UNUSED(shortcut);
245 return inputManager()->toolProxy()->primaryActionSupportsHiResEvents();
246}

References KisAbstractInputAction::inputManager, and KisInputManager::toolProxy().

Member Data Documentation

◆ d

Private* const KisToolInvocationAction::d
private

Definition at line 63 of file kis_tool_invocation_action.h.


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