Krita Source Code Documentation
Loading...
Searching...
No Matches
KisInputManager::Private::EventEater Struct Reference

#include <kis_input_manager_p.h>

Public Member Functions

void activate ()
 
void deactivate ()
 
void eatOneMousePress ()
 
 EventEater ()
 
bool eventFilter (QObject *target, QEvent *event)
 
void startBlockingTouch ()
 
void stopBlockingTouch ()
 

Public Attributes

bool activateSecondaryButtonsWorkaround {false}
 
bool eatSyntheticEvents {false}
 
bool eatTouchEvents {false}
 
bool hungry {false}
 
bool peckish {false}
 

Detailed Description

Definition at line 141 of file kis_input_manager_p.h.

Constructor & Destructor Documentation

◆ EventEater()

KisInputManager::Private::EventEater::EventEater ( )

Definition at line 69 of file kis_input_manager_p.cpp.

70{
71 KisConfig cfg(true);
72 activateSecondaryButtonsWorkaround = cfg.useRightMiddleTabletButtonWorkaround();
73}

References activateSecondaryButtonsWorkaround, and KisConfig::useRightMiddleTabletButtonWorkaround().

Member Function Documentation

◆ activate()

void KisInputManager::Private::EventEater::activate ( )

Definition at line 156 of file kis_input_manager_p.cpp.

157{
159 dbgTablet << "Start blocking mouse events";
160 }
161 hungry = true;
162}
static bool debugEnabled()
Linethickness.
static KisTabletDebugger * instance()
#define dbgTablet
Definition kis_debug.h:59

References dbgTablet, debugEnabled(), and KisTabletDebugger::instance().

◆ deactivate()

void KisInputManager::Private::EventEater::deactivate ( )

Definition at line 164 of file kis_input_manager_p.cpp.

165{
167 dbgTablet << "Stop blocking mouse events";
168 }
169 hungry = false;
170}

References dbgTablet, debugEnabled(), and KisTabletDebugger::instance().

◆ eatOneMousePress()

void KisInputManager::Private::EventEater::eatOneMousePress ( )

Definition at line 172 of file kis_input_manager_p.cpp.

173{
174 // Enable on other platforms if getting full-pressure splotches
175 peckish = true;
176}

◆ eventFilter()

bool KisInputManager::Private::EventEater::eventFilter ( QObject * target,
QEvent * event )

Definition at line 75 of file kis_input_manager_p.cpp.

76{
77 Q_UNUSED(target);
78
79 auto debugEvent = [&](int i) {
81 QString pre = QString("[BLOCKED %1:]").arg(i);
82 QMouseEvent *ev = static_cast<QMouseEvent*>(event);
84 }
85 };
86
87 auto debugTabletEvent = [&](int i) {
89 QString pre = QString("[BLOCKED %1:]").arg(i);
90 QTabletEvent *ev = static_cast<QTabletEvent*>(event);
92 }
93 };
94
95 auto debugTouchEvent = [&](int i) {
97 QString pre = QString("[BLOCKED %1:]").arg(i);
98 QTouchEvent *ev = static_cast<QTouchEvent*>(event);
100 }
101 };
102
103 if (peckish && event->type() == QEvent::MouseButtonPress
104 // Drop one mouse press following tabletPress or touchBegin
105 && (static_cast<QMouseEvent*>(event)->button() == Qt::LeftButton)) {
106 peckish = false;
107 debugEvent(1);
108 return true;
109 }
110
112 if (event->type() == QEvent::TabletPress ||
113 event->type() == QEvent::TabletRelease) {
114
115 QTabletEvent *te = static_cast<QTabletEvent*>(event);
116 if (te->button() != Qt::LeftButton) {
117 debugTabletEvent(3);
118 return true;
119 }
120 } else if (event->type() == QEvent::MouseButtonPress ||
121 event->type() == QEvent::MouseButtonRelease ||
122 event->type() == QEvent::MouseButtonDblClick) {
123
124 QMouseEvent *me = static_cast<QMouseEvent*>(event);
125 if (me->button() != Qt::LeftButton) {
126 return false;
127 }
128 }
129 }
130
131 if (isMouseEventType(event->type()) &&
132 (hungry
133 // On Mac, we need mouse events when the tablet is in proximity, but not pressed down
134 // since tablet move events are not generated until after tablet press.
135 #ifndef Q_OS_MAC
136 || (eatSyntheticEvents && static_cast<QMouseEvent*>(event)->source() != Qt::MouseEventNotSynthesized)
137 #endif
138 )) {
139 // Drop mouse events if enabled or event was synthetic & synthetic events are disabled
140 debugEvent(2);
141 return true;
142 }
143
144 if (eatTouchEvents && event->type() == QEvent::TouchBegin) {
145 // Drop touch events. If QEvent::TouchBegin is ignored, we won't
146 // receive further touch events until the next TouchBegin.
147 debugTouchEvent(3);
148 event->ignore();
149 return true;
150 }
151
152 return false; // All clear - let this one through!
153}
KisMagneticGraph::vertex_descriptor target(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
void debugEvent(QEvent *event)
QString eventToString(const QMouseEvent &ev, const QString &prefix)
static bool isMouseEventType(QEvent::Type t)

References dbgTablet, KisTabletDebugger::debugEnabled(), KisInputManager::Private::debugEvent(), KisTabletDebugger::eventToString(), KisTabletDebugger::instance(), isMouseEventType(), source(), and target().

◆ startBlockingTouch()

void KisInputManager::Private::EventEater::startBlockingTouch ( )

Definition at line 178 of file kis_input_manager_p.cpp.

179{
180 eatTouchEvents = true;
181}

◆ stopBlockingTouch()

void KisInputManager::Private::EventEater::stopBlockingTouch ( )

Definition at line 183 of file kis_input_manager_p.cpp.

184{
185 eatTouchEvents = false;
186}

Member Data Documentation

◆ activateSecondaryButtonsWorkaround

bool KisInputManager::Private::EventEater::activateSecondaryButtonsWorkaround {false}

Definition at line 163 of file kis_input_manager_p.h.

163{false}; // Use mouse events for right- and middle-clicks

◆ eatSyntheticEvents

bool KisInputManager::Private::EventEater::eatSyntheticEvents {false}

Definition at line 162 of file kis_input_manager_p.h.

162{false}; // Mask all synthetic events

◆ eatTouchEvents

bool KisInputManager::Private::EventEater::eatTouchEvents {false}

Definition at line 164 of file kis_input_manager_p.h.

164{false}; // Eat touch interactions

◆ hungry

bool KisInputManager::Private::EventEater::hungry {false}

Definition at line 160 of file kis_input_manager_p.h.

160{false}; // Continue eating mouse strokes

◆ peckish

bool KisInputManager::Private::EventEater::peckish {false}

Definition at line 161 of file kis_input_manager_p.h.

161{false}; // Eat a single mouse press event

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