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

Alternate Invocation implementation of KisAbstractInputAction. More...

#include <kis_alternate_invocation_action.h>

+ Inheritance diagram for KisAlternateInvocationAction:

Classes

struct  Private
 

Public Types

enum  Shortcut {
  PrimaryAlternateModeShortcut , SecondaryAlternateModeShortcut , SampleColorFgLayerModeShortcut , SampleColorBgLayerModeShortcut ,
  SampleColorFgImageModeShortcut , SampleColorBgImageModeShortcut , TertiaryAlternateModeShortcut
}
 

Public Member Functions

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

Private Member Functions

KisTool::ToolAction shortcutToToolAction (int shortcut) const
 

Private Attributes

const QScopedPointer< Privatem_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

Alternate Invocation implementation of KisAbstractInputAction.

The Alternate Invocation action performs an alternate action with the current tool. For example, using the brush tool it samples a color from the canvas.

Definition at line 21 of file kis_alternate_invocation_action.h.

Member Enumeration Documentation

◆ Shortcut

The different behaviours for this action.

Enumerator
PrimaryAlternateModeShortcut 

Toggle Primary mode.

SecondaryAlternateModeShortcut 

Toggle Secondary mode.

SampleColorFgLayerModeShortcut 
SampleColorBgLayerModeShortcut 
SampleColorFgImageModeShortcut 
SampleColorBgImageModeShortcut 
TertiaryAlternateModeShortcut 

Warning: don't reorder the items of this enum, it breaks user configs!

Definition at line 27 of file kis_alternate_invocation_action.h.

Constructor & Destructor Documentation

◆ KisAlternateInvocationAction()

KisAlternateInvocationAction::KisAlternateInvocationAction ( )
explicit

Definition at line 25 of file kis_alternate_invocation_action.cpp.

26 : KisAbstractInputAction("Alternate Invocation")
27 , m_d(new Private)
28{
29 setName(i18n("Alternate Invocation"));
30 setDescription(i18n("The <i>Alternate Invocation</i> action performs an alternate action with the current tool. For example, using the brush tool it samples a color from the canvas."));
31 QHash<QString, int> shortcuts;
32 shortcuts.insert(i18n("Primary Mode"), PrimaryAlternateModeShortcut);
33 shortcuts.insert(i18n("Secondary Mode"), SecondaryAlternateModeShortcut);
34 shortcuts.insert(i18n("Tertiary Mode"), TertiaryAlternateModeShortcut);
35
36
37 shortcuts.insert(i18n("Sample Foreground Color from Current Layer"), SampleColorFgLayerModeShortcut);
38 shortcuts.insert(i18n("Sample Background Color from Current Layer"), SampleColorBgLayerModeShortcut);
39
40 shortcuts.insert(i18n("Sample Foreground Color from Merged Image"), SampleColorFgImageModeShortcut);
41 shortcuts.insert(i18n("Sample Background Color from Merged Image"), SampleColorBgImageModeShortcut);
42
43 setShortcutIndexes(shortcuts);
44}
KisAbstractInputAction(const QString &id)
void setShortcutIndexes(const QHash< QString, int > &indexes)
void setName(const QString &name)
void setDescription(const QString &description)
const QScopedPointer< Private > m_d

References PrimaryAlternateModeShortcut, SampleColorBgImageModeShortcut, SampleColorBgLayerModeShortcut, SampleColorFgImageModeShortcut, SampleColorFgLayerModeShortcut, SecondaryAlternateModeShortcut, KisAbstractInputAction::setDescription(), KisAbstractInputAction::setName(), KisAbstractInputAction::setShortcutIndexes(), and TertiaryAlternateModeShortcut.

◆ ~KisAlternateInvocationAction()

KisAlternateInvocationAction::~KisAlternateInvocationAction ( )
override

Definition at line 46 of file kis_alternate_invocation_action.cpp.

47{
48}

Member Function Documentation

◆ activate()

void KisAlternateInvocationAction::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 81 of file kis_alternate_invocation_action.cpp.

82{
84 inputManager()->toolProxy()->activateToolAction(action);
85}
static KisInputManager * inputManager
KisTool::ToolAction shortcutToToolAction(int shortcut) const
QPointer< KisToolProxy > toolProxy() const

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

◆ begin()

void KisAlternateInvocationAction::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.

Reimplemented from KisAbstractInputAction.

Definition at line 98 of file kis_alternate_invocation_action.cpp.

99{
100 if (!event) return;
101
102 KisAbstractInputAction::begin(shortcut, event);
103
104 QMouseEvent targetEvent(QEvent::MouseButtonPress, eventPosF(event), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier); // There must be a better way
105
106 m_d->savedAction = shortcutToToolAction(shortcut);
107
108 inputManager()->toolProxy()->forwardEvent(KisToolProxy::BEGIN, m_d->savedAction, &targetEvent, event);
109}
QPointF eventPosF(const QEvent *event)
virtual void begin(int shortcut, QEvent *event)

References KisToolProxy::BEGIN, KisAbstractInputAction::begin(), KisAbstractInputAction::eventPosF(), KisAbstractInputAction::inputManager, m_d, shortcutToToolAction(), and KisInputManager::toolProxy().

◆ deactivate()

void KisAlternateInvocationAction::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()

Reimplemented from KisAbstractInputAction.

Definition at line 87 of file kis_alternate_invocation_action.cpp.

88{
90 inputManager()->toolProxy()->deactivateToolAction(action);
91}

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

◆ end()

void KisAlternateInvocationAction::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 111 of file kis_alternate_invocation_action.cpp.

112{
113 if (!event) return;
114
115 Qt::KeyboardModifiers modifiers;
116
117 switch (m_d->savedAction) {
119 modifiers = Qt::ControlModifier;
120 break;
122 modifiers = Qt::ControlModifier | Qt::AltModifier;
123 break;
124 default:
125 ;
126 }
127
128 QMouseEvent targetEvent = QMouseEvent(QEvent::MouseButtonRelease, eventPosF(event), Qt::LeftButton, Qt::LeftButton, modifiers);
129 inputManager()->toolProxy()->forwardEvent(KisToolProxy::END, m_d->savedAction, &targetEvent, event);
130
132}
virtual void end(QEvent *event)
@ AlternateThird
Definition kis_tool.h:126
@ AlternateSampleFgNode
Definition kis_tool.h:121

References KisTool::AlternateSampleFgNode, KisTool::AlternateThird, KisToolProxy::END, KisAbstractInputAction::end(), KisAbstractInputAction::eventPosF(), KisAbstractInputAction::inputManager, m_d, and KisInputManager::toolProxy().

◆ inputEvent()

void KisAlternateInvocationAction::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 134 of file kis_alternate_invocation_action.cpp.

135{
136 if (event
137 && ((event->type() == QEvent::MouseMove) || (event->type() == QEvent::TabletMove)
138 || (event->type() == QEvent::TouchUpdate))) {
139 Qt::KeyboardModifiers modifiers;
140 switch (m_d->savedAction) {
142 modifiers = Qt::ControlModifier;
143 break;
145 modifiers = Qt::ControlModifier | Qt::AltModifier;
146 break;
147 default:
148 modifiers = Qt::ShiftModifier;
149 }
150
151 QMouseEvent targetEvent(QEvent::MouseMove, eventPosF(event), Qt::LeftButton, Qt::LeftButton, modifiers);
152 inputManager()->toolProxy()->forwardEvent(KisToolProxy::CONTINUE, m_d->savedAction, &targetEvent, event);
153 }
154}

References KisTool::AlternateSampleFgNode, KisTool::AlternateThird, KisToolProxy::CONTINUE, KisAbstractInputAction::eventPosF(), KisAbstractInputAction::inputManager, m_d, and KisInputManager::toolProxy().

◆ priority()

int KisAlternateInvocationAction::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 93 of file kis_alternate_invocation_action.cpp.

94{
95 return 9;
96}

◆ shortcutToToolAction()

KisTool::ToolAction KisAlternateInvocationAction::shortcutToToolAction ( int shortcut) const
private

Definition at line 50 of file kis_alternate_invocation_action.cpp.

51{
53
54 switch ((Shortcut)shortcut) {
57 break;
60 break;
63 break;
66 break;
69 break;
72 break;
75 break;
76 }
77
78 return action;
79}
@ AlternateFourth
Definition kis_tool.h:127
@ AlternateSampleFgImage
Definition kis_tool.h:123
@ AlternateSecondary
Definition kis_tool.h:125
@ Alternate_NONE
Definition kis_tool.h:129
@ AlternateSampleBgNode
Definition kis_tool.h:122
@ AlternateSampleBgImage
Definition kis_tool.h:124

References KisTool::Alternate_NONE, KisTool::AlternateFourth, KisTool::AlternateSampleBgImage, KisTool::AlternateSampleBgNode, KisTool::AlternateSampleFgImage, KisTool::AlternateSampleFgNode, KisTool::AlternateSecondary, KisTool::AlternateThird, PrimaryAlternateModeShortcut, SampleColorBgImageModeShortcut, SampleColorBgLayerModeShortcut, SampleColorFgImageModeShortcut, SampleColorFgLayerModeShortcut, SecondaryAlternateModeShortcut, and TertiaryAlternateModeShortcut.

◆ supportsHiResInputEvents()

bool KisAlternateInvocationAction::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 156 of file kis_alternate_invocation_action.cpp.

157{
158 return inputManager()->toolProxy()->alternateActionSupportsHiResEvents(
160}
static AlternateAction actionToAlternateAction(ToolAction action)
Definition kis_tool.cc:416

References KisTool::actionToAlternateAction(), KisAbstractInputAction::inputManager, shortcutToToolAction(), and KisInputManager::toolProxy().

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisAlternateInvocationAction::m_d
private

Definition at line 57 of file kis_alternate_invocation_action.h.


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