Krita Source Code Documentation
Loading...
Searching...
No Matches
KisScreenMigrationTracker Class Reference

#include <KisScreenMigrationTracker.h>

+ Inheritance diagram for KisScreenMigrationTracker:

Signals

void sigScreenChanged (QScreen *screen)
 
void sigScreenOrResolutionChanged (QScreen *screen)
 

Public Member Functions

QScreen * currentScreen () const
 
QScreen * currentScreenSafe () const
 
 KisScreenMigrationTracker (QWidget *trackedWidget, QObject *parent=nullptr)
 

Protected Member Functions

bool eventFilter (QObject *watched, QEvent *event) override
 

Private Slots

void slotResolutionCompressorTriggered ()
 
void slotScreenChanged (QScreen *screen)
 
void slotScreenLogicalResolutionChanged (qreal value)
 
void slotScreenResolutionChanged (qreal value)
 

Private Member Functions

void connectScreenSignals (QScreen *screen)
 
void connectTopLevelWindow (QWindow *window)
 

Private Attributes

KisSignalCompressorm_resolutionChangeCompressor
 
KisSignalAutoConnectionsStore m_screenConnections
 
QPointer< QWindow > m_trackedTopLevelWindow
 
QWidget * m_trackedWidget {nullptr}
 

Detailed Description

A simple class that tracks the current screen assigned to the widget. When the widget migrates to a different screen, a signal is emitted.

If KisScreenMigrationTracker is created before the actual window for the widget is created, then it subscribes to widget's QEvent::Show event and waits until the widget is displayed.

Definition at line 29 of file KisScreenMigrationTracker.h.

Constructor & Destructor Documentation

◆ KisScreenMigrationTracker()

KisScreenMigrationTracker::KisScreenMigrationTracker ( QWidget * trackedWidget,
QObject * parent = nullptr )

The window of the tracked widget may be not initialized at the construction of the widget. Hence we should postpone initialization of the window handle till the widget gets shown on screen.

Definition at line 32 of file KisScreenMigrationTracker.cpp.

33 : QObject(parent)
34 , m_trackedWidget(trackedWidget)
36{
37 KIS_SAFE_ASSERT_RECOVER_RETURN(trackedWidget);
38
44 m_trackedTopLevelWindow = findNearestParentWithNativeWindow(trackedWidget);
47 } else {
48 trackedWidget->installEventFilter(this);
49 }
50
53}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
QPointer< QWindow > m_trackedTopLevelWindow
KisSignalCompressor * m_resolutionChangeCompressor
void connectTopLevelWindow(QWindow *window)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References connect(), connectTopLevelWindow(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_resolutionChangeCompressor, m_trackedTopLevelWindow, slotResolutionCompressorTriggered(), and KisSignalCompressor::timeout().

Member Function Documentation

◆ connectScreenSignals()

void KisScreenMigrationTracker::connectScreenSignals ( QScreen * screen)
private

Definition at line 66 of file KisScreenMigrationTracker.cpp.

67{
69 m_screenConnections.addConnection(screen, &QScreen::physicalDotsPerInchChanged,
71 m_screenConnections.addConnection(screen, &QScreen::logicalDotsPerInchChanged,
73}
KisSignalAutoConnectionsStore m_screenConnections
void slotScreenLogicalResolutionChanged(qreal value)
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)

References KisSignalAutoConnectionsStore::addConnection(), KisSignalAutoConnectionsStore::clear(), m_screenConnections, slotScreenLogicalResolutionChanged(), and slotScreenResolutionChanged().

◆ connectTopLevelWindow()

void KisScreenMigrationTracker::connectTopLevelWindow ( QWindow * window)
private

Definition at line 75 of file KisScreenMigrationTracker.cpp.

76{
78 connect(window, &QWindow::screenChanged, this, &KisScreenMigrationTracker::slotScreenChanged);
79 connectScreenSignals(window->screen());
80
81 Q_EMIT sigScreenChanged(window->screen());
82 Q_EMIT sigScreenOrResolutionChanged(window->screen());
83}
void connectScreenSignals(QScreen *screen)
void sigScreenChanged(QScreen *screen)
void sigScreenOrResolutionChanged(QScreen *screen)

References connect(), connectScreenSignals(), KIS_SAFE_ASSERT_RECOVER_RETURN, sigScreenChanged(), sigScreenOrResolutionChanged(), and slotScreenChanged().

◆ currentScreen()

QScreen * KisScreenMigrationTracker::currentScreen ( ) const

Return the screen currently assigned to the tracked widget. If the widget has no native window associated, then the function asserts.

Definition at line 55 of file KisScreenMigrationTracker.cpp.

56{
58 return m_trackedTopLevelWindow->screen();
59}
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and m_trackedTopLevelWindow.

◆ currentScreenSafe()

QScreen * KisScreenMigrationTracker::currentScreenSafe ( ) const

Return the screen currently assigned to the tracked widget or the default screen if the widget has no native window association (usually it means that the widget hasn't yet been added into the window hierarchy).

Definition at line 61 of file KisScreenMigrationTracker.cpp.

62{
63 return m_trackedTopLevelWindow ? m_trackedTopLevelWindow->screen() : qApp->screens().first();
64}

References m_trackedTopLevelWindow.

◆ eventFilter()

bool KisScreenMigrationTracker::eventFilter ( QObject * watched,
QEvent * event )
overrideprotected

Definition at line 85 of file KisScreenMigrationTracker.cpp.

86{
87 if (watched == m_trackedWidget && event->type() == QEvent::Show) {
88 m_trackedTopLevelWindow = findNearestParentWithNativeWindow(m_trackedWidget);
91 m_trackedWidget->removeEventFilter(this);
92 }
93 }
94
95 return QObject::eventFilter(watched, event);
96}

References connectTopLevelWindow(), m_trackedTopLevelWindow, and m_trackedWidget.

◆ sigScreenChanged

void KisScreenMigrationTracker::sigScreenChanged ( QScreen * screen)
signal

Emitted when the widget migrates to a different screen

◆ sigScreenOrResolutionChanged

void KisScreenMigrationTracker::sigScreenOrResolutionChanged ( QScreen * screen)
signal

Emitted when the widget migrates to a different screen or screen resolution changes. This signal is useful for adjusting the display scale factor.

◆ slotResolutionCompressorTriggered

void KisScreenMigrationTracker::slotResolutionCompressorTriggered ( )
privateslot

◆ slotScreenChanged

void KisScreenMigrationTracker::slotScreenChanged ( QScreen * screen)
privateslot

Definition at line 98 of file KisScreenMigrationTracker.cpp.

99{
100 connectScreenSignals(screen);
101
102 Q_EMIT sigScreenChanged(screen);
103 Q_EMIT sigScreenOrResolutionChanged(screen);
104}

References connectScreenSignals(), sigScreenChanged(), and sigScreenOrResolutionChanged().

◆ slotScreenLogicalResolutionChanged

void KisScreenMigrationTracker::slotScreenLogicalResolutionChanged ( qreal value)
privateslot

Definition at line 112 of file KisScreenMigrationTracker.cpp.

113{
114 Q_UNUSED(value)
116}
float value(const T *src, size_t ch)

References m_resolutionChangeCompressor, KisSignalCompressor::start(), and value().

◆ slotScreenResolutionChanged

void KisScreenMigrationTracker::slotScreenResolutionChanged ( qreal value)
privateslot

Member Data Documentation

◆ m_resolutionChangeCompressor

KisSignalCompressor* KisScreenMigrationTracker::m_resolutionChangeCompressor
private

Definition at line 79 of file KisScreenMigrationTracker.h.

◆ m_screenConnections

KisSignalAutoConnectionsStore KisScreenMigrationTracker::m_screenConnections
private

Definition at line 78 of file KisScreenMigrationTracker.h.

◆ m_trackedTopLevelWindow

QPointer<QWindow> KisScreenMigrationTracker::m_trackedTopLevelWindow
private

Definition at line 77 of file KisScreenMigrationTracker.h.

◆ m_trackedWidget

QWidget* KisScreenMigrationTracker::m_trackedWidget {nullptr}
private

Definition at line 76 of file KisScreenMigrationTracker.h.

76{nullptr};

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