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)
 
- Public Member Functions inherited from KisRootSurfaceTrackerBase
 KisRootSurfaceTrackerBase (QWidget *watched, QObject *parent=nullptr)
 
QWidget * trackedWidget () const
 
 ~KisRootSurfaceTrackerBase ()
 

Protected Member Functions

void connectToNativeWindow (QWindow *window) override
 
void disconnectFromNativeWindow () override
 
- Protected Member Functions inherited from KisRootSurfaceTrackerBase
void initialize ()
 

Private Slots

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

Private Member Functions

void connectScreenSignals (QScreen *screen)
 

Private Attributes

QPointer< QWindow > m_connectedTopLevelWindow
 
KisSignalCompressorm_resolutionChangeCompressor
 
KisSignalAutoConnectionsStore m_screenConnections
 
QMetaObject::Connection m_topLevelWindowConnection
 

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 31 of file KisScreenMigrationTracker.h.

Constructor & Destructor Documentation

◆ KisScreenMigrationTracker()

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

Definition at line 19 of file KisScreenMigrationTracker.cpp.

References KisRootSurfaceTrackerBase::initialize(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_resolutionChangeCompressor, slotResolutionCompressorTriggered(), KisSignalCompressor::timeout(), and KisRootSurfaceTrackerBase::trackedWidget().

Member Function Documentation

◆ connectScreenSignals()

void KisScreenMigrationTracker::connectScreenSignals ( QScreen * screen)
private

Definition at line 42 of file KisScreenMigrationTracker.cpp.

43{
45 m_screenConnections.addConnection(screen, &QScreen::physicalDotsPerInchChanged,
47 m_screenConnections.addConnection(screen, &QScreen::logicalDotsPerInchChanged,
49}
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().

◆ connectToNativeWindow()

void KisScreenMigrationTracker::connectToNativeWindow ( QWindow * window)
overrideprotectedvirtual

Implements KisRootSurfaceTrackerBase.

Definition at line 51 of file KisScreenMigrationTracker.cpp.

52{
54
55 if (window != m_connectedTopLevelWindow) {
57 connect(window, &QWindow::screenChanged, this, &KisScreenMigrationTracker::slotScreenChanged);
58 connectScreenSignals(window->screen());
60
61 Q_EMIT sigScreenChanged(window->screen());
62 Q_EMIT sigScreenOrResolutionChanged(window->screen());
63 }
64}
void connectScreenSignals(QScreen *screen)
QMetaObject::Connection m_topLevelWindowConnection
QPointer< QWindow > m_connectedTopLevelWindow
void sigScreenChanged(QScreen *screen)
void sigScreenOrResolutionChanged(QScreen *screen)

References connectScreenSignals(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_connectedTopLevelWindow, m_topLevelWindowConnection, 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 31 of file KisScreenMigrationTracker.cpp.

32{
34 return m_connectedTopLevelWindow->screen();
35}
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and m_connectedTopLevelWindow.

◆ 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 37 of file KisScreenMigrationTracker.cpp.

38{
39 return m_connectedTopLevelWindow ? m_connectedTopLevelWindow->screen() : qApp->screens().first();
40}

References m_connectedTopLevelWindow.

◆ disconnectFromNativeWindow()

void KisScreenMigrationTracker::disconnectFromNativeWindow ( )
overrideprotectedvirtual

◆ 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

Definition at line 92 of file KisScreenMigrationTracker.cpp.

93{
95 // the tracker is not yet initialized, it should happen only
96 // when the widget have not yet been shown at least once
98 return;
99 }
101}
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References KIS_SAFE_ASSERT_RECOVER_NOOP, m_connectedTopLevelWindow, sigScreenOrResolutionChanged(), and KisRootSurfaceTrackerBase::trackedWidget().

◆ slotScreenChanged

void KisScreenMigrationTracker::slotScreenChanged ( QScreen * screen)
privateslot

Definition at line 72 of file KisScreenMigrationTracker.cpp.

73{
75
76 Q_EMIT sigScreenChanged(screen);
77 Q_EMIT sigScreenOrResolutionChanged(screen);
78}

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

◆ slotScreenLogicalResolutionChanged

void KisScreenMigrationTracker::slotScreenLogicalResolutionChanged ( qreal value)
privateslot

Definition at line 86 of file KisScreenMigrationTracker.cpp.

87{
88 Q_UNUSED(value)
90}
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_connectedTopLevelWindow

QPointer<QWindow> KisScreenMigrationTracker::m_connectedTopLevelWindow
private

Definition at line 78 of file KisScreenMigrationTracker.h.

◆ m_resolutionChangeCompressor

KisSignalCompressor* KisScreenMigrationTracker::m_resolutionChangeCompressor
private

Definition at line 82 of file KisScreenMigrationTracker.h.

◆ m_screenConnections

KisSignalAutoConnectionsStore KisScreenMigrationTracker::m_screenConnections
private

Definition at line 81 of file KisScreenMigrationTracker.h.

◆ m_topLevelWindowConnection

QMetaObject::Connection KisScreenMigrationTracker::m_topLevelWindowConnection
private

Definition at line 79 of file KisScreenMigrationTracker.h.


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