ImagingTools Core SDK
CMonitorInfoProvider.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QObject>
7#include <QtCore/QVector>
8#include <QtCore/QSize>
9#include <QtGui/QScreen>
10
11// ACF includes
12#include <istd/IChangeable.h>
13
14// ImtCore includes
15#include <imtgui/IMonitorInfoProvider.h>
16
17
18namespace imtgui
19{
20
21
22class CMonitorInfoProvider: public QObject, public IMonitorInfoProvider
23{
24 Q_OBJECT
25
26public:
27 enum MonitorChangeSet
28 {
29 MCE_PRIMARY_SCREEN_CHANGED = 0,
30 MCE_SCREEN_ADDED,
31 MCE_SCREEN_REMOVED,
32
33 MCE_PHYSICAL_SIZE,
34 MCE_PHYSICAL_RESOLUTION,
35 MCE_ORIENTATION
36 };
37
38public:
39 CMonitorInfoProvider();
40
41 // reimplemented (imtgui::IMonitorResolutionProvider)
42 virtual int GetMonitorsCount() const override;
43 virtual QSize GetPhysicalSize(int index) const override;
44 virtual double GetPhysicalResolutionX(int index) const override;
45 virtual double GetPhysicalResolutionY(int index) const override;
46 virtual QRect GetGeometry(int index) const override;
47 virtual double GetScaling(int index) const override;
48
49protected:
50 void UpdateMonitorsInfo();
51
52protected:
53 QSize m_physicalSize;
54
55private Q_SLOTS:
56 void PrimaryScreenChanged(QScreen* screen);
57 void ScreenAdded(QScreen* screen);
58 void ScreenRemoved(QScreen* screen);
59
60 void LogicalDotsPerInchChanged(qreal dpi);
61 void OrientationChanged(Qt::ScreenOrientation orientation);
62
63private:
64 struct MonitorInfo
65 {
66 QScreen* screenPtr;
67 QSize size;
68 QRect geometry;
69 double resolutionX;
70 double resolutionY;
71 };
72
73 QList<MonitorInfo> m_monitors;
74
75private:
76 QSize RetrievePhysicalSize(const QString& monitorId);
77};
78
79
80} // namespace imtgui
81
82