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

Get the current tool's popup widget and display it. More...

#include <KisPopupWidgetAction.h>

+ Inheritance diagram for KisPopupWidgetAction:

Public Member Functions

void end (QEvent *) override
 
 KisPopupWidgetAction ()
 
int priority () const override
 
 ~KisPopupWidgetAction () override
 
- Public Member Functions inherited from KisAbstractInputAction
virtual void activate (int shortcut)
 
virtual void begin (int shortcut, QEvent *event)
 
virtual bool canIgnoreModifiers () const
 
virtual void deactivate (int shortcut)
 
virtual QString description () const
 
virtual QString id () const
 
virtual KisInputActionGroup inputActionGroup (int shortcut) const
 
virtual void inputEvent (QEvent *event)
 
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 bool supportsHiResInputEvents (int shortcut) const
 
virtual ~KisAbstractInputAction ()
 

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

Get the current tool's popup widget and display it.

Definition at line 27 of file KisPopupWidgetAction.h.

Constructor & Destructor Documentation

◆ KisPopupWidgetAction()

KisPopupWidgetAction::KisPopupWidgetAction ( )
explicit

Definition at line 41 of file KisPopupWidgetAction.cpp.

42 : KisAbstractInputAction("Show Popup Widget")
43{
44 setName(i18n("Show Popup Widget"));
45 setDescription(i18n("Show the current tool's popup widget."));
46}
KisAbstractInputAction(const QString &id)
void setName(const QString &name)
void setDescription(const QString &description)

References KisAbstractInputAction::setDescription(), and KisAbstractInputAction::setName().

◆ ~KisPopupWidgetAction()

KisPopupWidgetAction::~KisPopupWidgetAction ( )
override

Definition at line 48 of file KisPopupWidgetAction.cpp.

49{
50}

Member Function Documentation

◆ end()

void KisPopupWidgetAction::end ( QEvent * event)
overridevirtual

End the action.

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

Opening a menu changes the focus of the windows, so we should not open it inside the filtering loop. Just raise it using the timer.

Reimplemented from KisAbstractInputAction.

Definition at line 52 of file KisPopupWidgetAction.cpp.

53{
54 if (QMenu *popupMenu = inputManager()->toolProxy()->popupActionsMenu()) { // Handle popup menus...
55 QEvent::Type requestingEventType = event ? event->type() : QEvent::None;
56
57 // Touch events don't update the cursor position.
58 QPointF touchPos;
59 if (requestingEventType == QEvent::TouchBegin) {
60 const QTouchEvent *touchEvent = static_cast<const QTouchEvent *>(event);
61#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
62 const QList<QEventPoint> &touchPoints = touchEvent->points();
63#else
64 const QList<QTouchEvent::TouchPoint> &touchPoints = touchEvent->touchPoints();
65#endif
66 if (touchPoints.isEmpty()) {
67 // Getting zero touch points can happen on Android when pressing
68 // on the screen with an entire palm. Punt to using the cursor
69 // position after all.
70 requestingEventType = QEvent::None;
71 } else {
72#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
73 touchPos = touchPoints.constFirst().globalPosition();
74#else
75 touchPos = touchPoints.constFirst().screenPos();
76#endif
77 }
78 }
79
84 QTimer::singleShot(0, this, [popupMenu, requestingEventType, touchPos](){
85 if (popupMenu) {
86 QPoint popupPos;
87 QScopedPointer<SinglePressEventEater> eventEater;
88
89 if (requestingEventType == QEvent::TabletPress) {
90 eventEater.reset(new SinglePressEventEater());
91 popupMenu->installEventFilter(eventEater.data());
92 popupPos = QCursor::pos() + QPoint(10,10);
93 } else if (requestingEventType == QEvent::TouchBegin) {
94 popupPos = touchPos.toPoint();
95 } else {
96 popupPos = QCursor::pos();
97 }
98
99 popupMenu->exec(popupPos);
100 popupMenu->clear();
101 }
102 });
103 } else if (KisPopupWidgetInterface *popupWidget = inputManager()->toolProxy()->popupWidget()) { // Handle other popup widgets...
104 if (!popupWidget->onScreen()) {
105 QPoint pos = eventPos(event);
106 if (pos.isNull()) {
107 pos = inputManager()->canvas()->canvasWidget()->mapFromGlobal(QCursor::pos());
108 }
109 inputManager()->registerPopupWidget(popupWidget);
110 popupWidget->popup(pos);
111 } else {
112 popupWidget->dismiss();
113 }
114 }
115}
static KisInputManager * inputManager
QPoint eventPos(const QEvent *event)
KisAbstractCanvasWidget * canvasWidget
KisCanvas2 * canvas() const
QPointer< KisToolProxy > toolProxy() const
void registerPopupWidget(KisPopupWidgetInterface *popupWidget)
The PopupWidgetInterface abstract class defines the basic interface that will be used by all popup wi...

References KisInputManager::canvas(), KisCanvas2::canvasWidget, KisAbstractInputAction::eventPos(), KisAbstractInputAction::inputManager, KisInputManager::registerPopupWidget(), and KisInputManager::toolProxy().

◆ priority()

int KisPopupWidgetAction::priority ( ) const
inlineoverridevirtual

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 35 of file KisPopupWidgetAction.h.

35{return 1;}

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