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

Constructor & Destructor Documentation

◆ CanvasSwitcher()

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

Definition at line 255 of file kis_input_manager_p.cpp.

256 : QObject(p),
257 d(_d),
258 eatOneMouseStroke(false),
260{
261}
const Params2D p
static const int InputWidgetsThreshold

Member Function Documentation

◆ addCanvas()

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

Definition at line 272 of file kis_input_manager_p.cpp.

273{
274 if (!canvas) return;
275
276 QObject *canvasWidget = canvas->canvasWidget();
277
278 if (!canvasResolver.contains(canvasWidget)) {
279 canvasResolver.insert(canvasWidget, canvas);
280 } else {
281 // just a sanity cheek to find out if we are
282 // trying to add two canvases concurrently.
284 }
285
286 if (canvas != d->canvas) {
287 d->q->setupAsEventFilter(canvasWidget);
288 canvasWidget->installEventFilter(this);
289
290 setupFocusThreshold(canvasWidget);
292
293 d->canvas = canvas;
294 d->toolProxy = qobject_cast<KisToolProxy*>(canvas->toolProxy());
295 }
296}
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 339 of file kis_input_manager_p.cpp.

340{
341 if (canvasResolver.contains(object)) {
342 switch (event->type()) {
343 case QEvent::FocusIn: {
344 QFocusEvent *fevent = static_cast<QFocusEvent*>(event);
345 KisCanvas2 *canvas = canvasResolver.value(object);
346
347 // only relevant canvases from the same main window should be
348 // registered in the switcher
350
351 if (canvas != d->canvas) {
352 eatOneMouseStroke = 2 * (fevent->reason() == Qt::MouseFocusReason);
353 }
354
355 d->canvas = canvas;
356 d->toolProxy = qobject_cast<KisToolProxy*>(canvas->toolProxy());
357
358 d->q->setupAsEventFilter(object);
359
360 object->removeEventFilter(this);
361 object->installEventFilter(this);
362
363 setupFocusThreshold(object);
365
366 const QPoint globalPos = QCursor::pos();
367 const QPoint localPos = d->canvas->canvasWidget()->mapFromGlobal(globalPos);
368 QWidget *canvasWindow = d->canvas->canvasWidget()->window();
369 const QPoint windowsPos = canvasWindow ? canvasWindow->mapFromGlobal(globalPos) : localPos;
370
371 QEnterEvent event(localPos, windowsPos, globalPos);
372 d->q->eventFilter(object, &event);
373 break;
374 }
375 case QEvent::FocusOut: {
377 break;
378 }
379 case QEvent::Enter: {
380 break;
381 }
382 case QEvent::Leave: {
384 break;
385 }
386 case QEvent::Wheel: {
387 QWidget *widget = static_cast<QWidget*>(object);
388 widget->setFocus();
389 break;
390 }
391 case QEvent::MouseButtonPress:
392 case QEvent::MouseButtonRelease:
393 case QEvent::TabletPress:
394 case QEvent::TabletRelease:
396
397 if (eatOneMouseStroke) {
399 return true;
400 }
401 break;
402 case QEvent::MouseButtonDblClick:
404 if (eatOneMouseStroke) {
405 return true;
406 }
407 break;
408 case QEvent::MouseMove:
409 case QEvent::TabletMove: {
410 QWidget *widget = static_cast<QWidget*>(object);
411
412 if (!widget->hasFocus()) {
413 const int delay =
414 isInputWidget(QApplication::focusWidget()) ?
416
419 }
420 }
421 break;
422 default:
423 break;
424 }
425 }
426 return QObject::eventFilter(object, event);
427}
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 298 of file kis_input_manager_p.cpp.

299{
300 QObject *widget = canvas->canvasWidget();
301
302 canvasResolver.remove(widget);
303
304 if (d->eventsReceiver == widget) {
306 }
307
308 widget->removeEventFilter(this);
309
310 if (d->canvas == canvas) {
311 d->canvas = 0;
312 d->toolProxy = 0;
313 }
314}

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 263 of file kis_input_manager_p.cpp.

264{
265 QWidget *widget = qobject_cast<QWidget*>(object);
267
269 thresholdConnections.addConnection(&focusSwitchThreshold, SIGNAL(timeout()), widget, SLOT(setFocus()));
270}
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 135 of file kis_input_manager_p.h.

◆ d

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

Definition at line 134 of file kis_input_manager_p.h.

◆ eatOneMouseStroke

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

Definition at line 136 of file kis_input_manager_p.h.

◆ focusSwitchThreshold

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

Definition at line 137 of file kis_input_manager_p.h.

◆ thresholdConnections

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

Definition at line 138 of file kis_input_manager_p.h.


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