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 142 of file kis_input_manager_p.h.

Constructor & Destructor Documentation

◆ EventEater()

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

Definition at line 71 of file kis_input_manager_p.cpp.

72{
73 KisConfig cfg(true);
74 activateSecondaryButtonsWorkaround = cfg.useRightMiddleTabletButtonWorkaround();
75}

References activateSecondaryButtonsWorkaround, and KisConfig::useRightMiddleTabletButtonWorkaround().

Member Function Documentation

◆ activate()

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

Definition at line 158 of file kis_input_manager_p.cpp.

159{
161 dbgTablet << "Start blocking mouse events";
162 }
163 hungry = true;
164}
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 166 of file kis_input_manager_p.cpp.

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

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

◆ eatOneMousePress()

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

Definition at line 174 of file kis_input_manager_p.cpp.

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

◆ eventFilter()

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

Definition at line 77 of file kis_input_manager_p.cpp.

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

181{
182 eatTouchEvents = true;
183}

◆ stopBlockingTouch()

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

Definition at line 185 of file kis_input_manager_p.cpp.

186{
187 eatTouchEvents = false;
188}

Member Data Documentation

◆ activateSecondaryButtonsWorkaround

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

Definition at line 164 of file kis_input_manager_p.h.

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

◆ eatSyntheticEvents

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

Definition at line 163 of file kis_input_manager_p.h.

163{false}; // Mask all synthetic events

◆ eatTouchEvents

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

Definition at line 165 of file kis_input_manager_p.h.

165{false}; // Eat touch interactions

◆ hungry

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

Definition at line 161 of file kis_input_manager_p.h.

161{false}; // Continue eating mouse strokes

◆ peckish

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

Definition at line 162 of file kis_input_manager_p.h.

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

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