From 35e254a8a97f6ab4d65fc8cc66190af60cf75b98 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Mon, 18 Jan 2021 11:20:34 +0200 Subject: [PATCH] effects/lookingglass: Schedule a repaint when window is damaged This is needed to make per-screen rendering work correctly. BUG: 431652 --- effects/lookingglass/lookingglass.cpp | 17 +++++++++++++++-- effects/lookingglass/lookingglass.h | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/effects/lookingglass/lookingglass.cpp b/effects/lookingglass/lookingglass.cpp index dbc2c5d45b..5343b7a489 100644 --- a/effects/lookingglass/lookingglass.cpp +++ b/effects/lookingglass/lookingglass.cpp @@ -60,6 +60,7 @@ LookingGlassEffect::LookingGlassEffect() effects->registerGlobalShortcut(Qt::META + Qt::Key_0, a); connect(effects, &EffectsHandler::mouseChanged, this, &LookingGlassEffect::slotMouseChanged); + connect(effects, &EffectsHandler::windowDamaged, this, &LookingGlassEffect::slotWindowDamaged); reconfigure(ReconfigureAll); } @@ -161,7 +162,7 @@ void LookingGlassEffect::zoomIn() polling = true; effects->startMousePolling(); } - effects->addRepaint(cursorPos().x() - radius, cursorPos().y() - radius, 2 * radius, 2 * radius); + effects->addRepaint(magnifierArea()); } void LookingGlassEffect::zoomOut() @@ -177,7 +178,12 @@ void LookingGlassEffect::zoomOut() m_enabled = false; } } - effects->addRepaint(cursorPos().x() - radius, cursorPos().y() - radius, 2 * radius, 2 * radius); + effects->addRepaint(magnifierArea()); +} + +QRect LookingGlassEffect::magnifierArea() const +{ + return QRect(cursorPos().x() - radius, cursorPos().y() - radius, 2 * radius, 2 * radius); } void LookingGlassEffect::prePaintScreen(ScreenPrePaintData& data, std::chrono::milliseconds presentTime) @@ -221,6 +227,13 @@ void LookingGlassEffect::slotMouseChanged(const QPoint& pos, const QPoint& old, } } +void LookingGlassEffect::slotWindowDamaged() +{ + if (isActive()) { + effects->addRepaint(magnifierArea()); + } +} + void LookingGlassEffect::paintScreen(int mask, const QRegion ®ion, ScreenPaintData &data) { // Call the next effect. diff --git a/effects/lookingglass/lookingglass.h b/effects/lookingglass/lookingglass.h index 3394bf505b..8c16f36439 100644 --- a/effects/lookingglass/lookingglass.h +++ b/effects/lookingglass/lookingglass.h @@ -44,6 +44,8 @@ public: int initialRadius() const { return initialradius; } + QRect magnifierArea() const; + public Q_SLOTS: void toggle(); void zoomIn(); @@ -51,6 +53,7 @@ public Q_SLOTS: void slotMouseChanged(const QPoint& pos, const QPoint& old, Qt::MouseButtons buttons, Qt::MouseButtons oldbuttons, Qt::KeyboardModifiers modifiers, Qt::KeyboardModifiers oldmodifiers); + void slotWindowDamaged(); private: bool loadData();