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

Constructor & Destructor Documentation

◆ EventEater()

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

Definition at line 68 of file kis_input_manager_p.cpp.

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

References activateSecondaryButtonsWorkaround, and KisConfig::useRightMiddleTabletButtonWorkaround().

Member Function Documentation

◆ activate()

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

Definition at line 155 of file kis_input_manager_p.cpp.

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

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

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

◆ eatOneMousePress()

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

Definition at line 171 of file kis_input_manager_p.cpp.

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

◆ eventFilter()

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

Definition at line 74 of file kis_input_manager_p.cpp.

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

178{
179 eatTouchEvents = true;
180}

◆ stopBlockingTouch()

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

Definition at line 182 of file kis_input_manager_p.cpp.

183{
184 eatTouchEvents = false;
185}

Member Data Documentation

◆ activateSecondaryButtonsWorkaround

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

Definition at line 149 of file kis_input_manager_p.h.

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

◆ eatSyntheticEvents

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

Definition at line 148 of file kis_input_manager_p.h.

148{false}; // Mask all synthetic events

◆ eatTouchEvents

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

Definition at line 150 of file kis_input_manager_p.h.

150{false}; // Eat touch interactions

◆ hungry

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

Definition at line 146 of file kis_input_manager_p.h.

146{false}; // Continue eating mouse strokes

◆ peckish

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

Definition at line 147 of file kis_input_manager_p.h.

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

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