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

Constructor & Destructor Documentation

◆ CanvasSwitcher()

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

Definition at line 253 of file kis_input_manager_p.cpp.

254 : QObject(p),
255 d(_d),
256 eatOneMouseStroke(false),
258{
259}
const Params2D p
static const int InputWidgetsThreshold

Member Function Documentation

◆ addCanvas()

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

Definition at line 270 of file kis_input_manager_p.cpp.

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

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

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

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

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

◆ d

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

Definition at line 133 of file kis_input_manager_p.h.

◆ eatOneMouseStroke

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

Definition at line 135 of file kis_input_manager_p.h.

◆ focusSwitchThreshold

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

Definition at line 136 of file kis_input_manager_p.h.

◆ thresholdConnections

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

Definition at line 137 of file kis_input_manager_p.h.


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