Krita Source Code Documentation
Loading...
Searching...
No Matches
KisInputManager::Private::CanvasSwitcher Class Reference

#include <kis_input_manager_p.h>

+ Inheritance diagram for KisInputManager::Private::CanvasSwitcher:

Public Member Functions

void addCanvas (KisCanvas2 *canvas)
 
 CanvasSwitcher (Private *_d, QObject *p)
 
bool eventFilter (QObject *object, QEvent *event) override
 
void removeCanvas (KisCanvas2 *canvas)
 

Private Member Functions

void setupFocusThreshold (QObject *object)
 

Private Attributes

QMap< QObject *, QPointer< KisCanvas2 > > canvasResolver
 
KisInputManager::Privated
 
int eatOneMouseStroke
 
KisTimedSignalThreshold focusSwitchThreshold
 
KisSignalAutoConnectionsStore thresholdConnections
 

Detailed Description

Definition at line 107 of file kis_input_manager_p.h.

Constructor & Destructor Documentation

◆ CanvasSwitcher()

KisInputManager::Private::CanvasSwitcher::CanvasSwitcher ( Private * _d,
QObject * p )

Definition at line 246 of file kis_input_manager_p.cpp.

247 : QObject(p),
248 d(_d),
249 eatOneMouseStroke(false),
251{
252}
const Params2D p
static const int InputWidgetsThreshold

Member Function Documentation

◆ addCanvas()

void KisInputManager::Private::CanvasSwitcher::addCanvas ( KisCanvas2 * canvas)

Definition at line 263 of file kis_input_manager_p.cpp.

264{
265 if (!canvas) return;
266
267 QObject *canvasWidget = canvas->canvasWidget();
268
269 if (!canvasResolver.contains(canvasWidget)) {
270 canvasResolver.insert(canvasWidget, canvas);
271 } else {
272 // just a sanity cheek to find out if we are
273 // trying to add two canvases concurrently.
275 }
276
277 if (canvas != d->canvas) {
278 d->q->setupAsEventFilter(canvasWidget);
279 canvasWidget->installEventFilter(this);
280
281 setupFocusThreshold(canvasWidget);
283
284 d->canvas = canvas;
285 d->toolProxy = qobject_cast<KisToolProxy*>(canvas->toolProxy());
286 }
287}
QMap< QObject *, QPointer< KisCanvas2 > > canvasResolver
QPointer< KisToolProxy > toolProxy
QPointer< KisCanvas2 > canvas
void setupAsEventFilter(QObject *receiver)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References KisInputManager::Private::canvas, KisInputManager::d, KIS_SAFE_ASSERT_RECOVER_NOOP, KisInputManager::Private::q, KisInputManager::setupAsEventFilter(), and KisInputManager::Private::toolProxy.

◆ eventFilter()

bool KisInputManager::Private::CanvasSwitcher::eventFilter ( QObject * object,
QEvent * event )
override

Definition at line 330 of file kis_input_manager_p.cpp.

331{
332 if (canvasResolver.contains(object)) {
333 switch (event->type()) {
334 case QEvent::FocusIn: {
335 QFocusEvent *fevent = static_cast<QFocusEvent*>(event);
336 KisCanvas2 *canvas = canvasResolver.value(object);
337
338 // only relevant canvases from the same main window should be
339 // registered in the switcher
341
342 if (canvas != d->canvas) {
343 eatOneMouseStroke = 2 * (fevent->reason() == Qt::MouseFocusReason);
344 }
345
346 d->canvas = canvas;
347 d->toolProxy = qobject_cast<KisToolProxy*>(canvas->toolProxy());
348
349 d->q->setupAsEventFilter(object);
350
351 object->removeEventFilter(this);
352 object->installEventFilter(this);
353
354 setupFocusThreshold(object);
356
357 const QPoint globalPos = QCursor::pos();
358 const QPoint localPos = d->canvas->canvasWidget()->mapFromGlobal(globalPos);
359 QWidget *canvasWindow = d->canvas->canvasWidget()->window();
360 const QPoint windowsPos = canvasWindow ? canvasWindow->mapFromGlobal(globalPos) : localPos;
361
362 QEnterEvent event(localPos, windowsPos, globalPos);
363 d->q->eventFilter(object, &event);
364 break;
365 }
366 case QEvent::FocusOut: {
368 break;
369 }
370 case QEvent::Enter: {
371 break;
372 }
373 case QEvent::Leave: {
375 break;
376 }
377 case QEvent::Wheel: {
378 QWidget *widget = static_cast<QWidget*>(object);
379 widget->setFocus();
380 break;
381 }
382 case QEvent::MouseButtonPress:
383 case QEvent::MouseButtonRelease:
384 case QEvent::TabletPress:
385 case QEvent::TabletRelease:
387
388 if (eatOneMouseStroke) {
390 return true;
391 }
392 break;
393 case QEvent::MouseButtonDblClick:
395 if (eatOneMouseStroke) {
396 return true;
397 }
398 break;
399 case QEvent::MouseMove:
400 case QEvent::TabletMove: {
401 QWidget *widget = static_cast<QWidget*>(object);
402
403 if (!widget->hasFocus()) {
404 const int delay =
405 isInputWidget(QApplication::focusWidget()) ?
407
410 }
411 }
412 break;
413 default:
414 break;
415 }
416 }
417 return QObject::eventFilter(object, event);
418}
bool eventFilter(QObject *object, QEvent *event) override
void setDelayThreshold(int delay, int cancelDelay=-1)
#define KIS_SAFE_ASSERT_RECOVER_BREAK(cond)
Definition kis_assert.h:127
static const int OtherWidgetsThreshold
bool isInputWidget(QWidget *w)

References KisInputManager::Private::canvas, KisInputManager::d, KisInputManager::eventFilter(), InputWidgetsThreshold, isInputWidget(), KIS_SAFE_ASSERT_RECOVER_BREAK, OtherWidgetsThreshold, KisInputManager::Private::q, KisInputManager::setupAsEventFilter(), and KisInputManager::Private::toolProxy.

◆ removeCanvas()

void KisInputManager::Private::CanvasSwitcher::removeCanvas ( KisCanvas2 * canvas)

Definition at line 289 of file kis_input_manager_p.cpp.

290{
291 QObject *widget = canvas->canvasWidget();
292
293 canvasResolver.remove(widget);
294
295 if (d->eventsReceiver == widget) {
297 }
298
299 widget->removeEventFilter(this);
300
301 if (d->canvas == canvas) {
302 d->canvas = 0;
303 d->toolProxy = 0;
304 }
305}

References KisInputManager::Private::canvas, KisInputManager::d, KisInputManager::Private::eventsReceiver, KisInputManager::Private::q, KisInputManager::setupAsEventFilter(), and KisInputManager::Private::toolProxy.

◆ setupFocusThreshold()

void KisInputManager::Private::CanvasSwitcher::setupFocusThreshold ( QObject * object)
private

Definition at line 254 of file kis_input_manager_p.cpp.

255{
256 QWidget *widget = qobject_cast<QWidget*>(object);
258
260 thresholdConnections.addConnection(&focusSwitchThreshold, SIGNAL(timeout()), widget, SLOT(setFocus()));
261}
KisSignalAutoConnectionsStore thresholdConnections
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References KIS_SAFE_ASSERT_RECOVER_RETURN.

Member Data Documentation

◆ canvasResolver

QMap<QObject*, QPointer<KisCanvas2> > KisInputManager::Private::CanvasSwitcher::canvasResolver
private

Definition at line 120 of file kis_input_manager_p.h.

◆ d

KisInputManager::Private* KisInputManager::Private::CanvasSwitcher::d
private

Definition at line 119 of file kis_input_manager_p.h.

◆ eatOneMouseStroke

int KisInputManager::Private::CanvasSwitcher::eatOneMouseStroke
private

Definition at line 121 of file kis_input_manager_p.h.

◆ focusSwitchThreshold

KisTimedSignalThreshold KisInputManager::Private::CanvasSwitcher::focusSwitchThreshold
private

Definition at line 122 of file kis_input_manager_p.h.

◆ thresholdConnections

KisSignalAutoConnectionsStore KisInputManager::Private::CanvasSwitcher::thresholdConnections
private

Definition at line 123 of file kis_input_manager_p.h.


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