aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickscreen_p.h
blob: 02d33a1523a5ddbdde66d0fc71eb8e03bdeda19e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

#ifndef QQUICKSCREEN_P_H
#define QQUICKSCREEN_P_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtQml/qqml.h>
#include <QtQuick/private/qtquickglobal_p.h>

#include <QtCore/qpointer.h>

QT_BEGIN_NAMESPACE


class QQuickItem;
class QQuickWindow;
class QScreen;


class Q_QUICK_EXPORT QQuickScreenInfo : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name NOTIFY nameChanged FINAL)
    Q_PROPERTY(QString manufacturer READ manufacturer NOTIFY manufacturerChanged REVISION(2, 10) FINAL)
    Q_PROPERTY(QString model READ model NOTIFY modelChanged REVISION(2, 10) FINAL)
    Q_PROPERTY(QString serialNumber READ serialNumber NOTIFY serialNumberChanged REVISION(2, 10) FINAL)
    Q_PROPERTY(int width READ width NOTIFY widthChanged FINAL)
    Q_PROPERTY(int height READ height NOTIFY heightChanged FINAL)
    Q_PROPERTY(int desktopAvailableWidth READ desktopAvailableWidth NOTIFY desktopGeometryChanged FINAL)
    Q_PROPERTY(int desktopAvailableHeight READ desktopAvailableHeight NOTIFY desktopGeometryChanged FINAL)
    Q_PROPERTY(qreal logicalPixelDensity READ logicalPixelDensity NOTIFY logicalPixelDensityChanged FINAL)
    Q_PROPERTY(qreal pixelDensity READ pixelDensity NOTIFY pixelDensityChanged FINAL)
    Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio NOTIFY devicePixelRatioChanged FINAL)
    Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY primaryOrientationChanged FINAL)
    Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation NOTIFY orientationChanged FINAL)

    Q_PROPERTY(int virtualX READ virtualX NOTIFY virtualXChanged REVISION(2, 3) FINAL)
    Q_PROPERTY(int virtualY READ virtualY NOTIFY virtualYChanged REVISION(2, 3) FINAL)
    QML_NAMED_ELEMENT(ScreenInfo)
    QML_ADDED_IN_VERSION(2, 3)
    QML_UNCREATABLE("ScreenInfo can only be used via the attached property.")

public:
    QQuickScreenInfo(QObject *parent = nullptr, QScreen *wrappedScreen = nullptr);

    QString name() const;
    QString manufacturer() const;
    QString model() const;
    QString serialNumber() const;
    int width() const;
    int height() const;
    int desktopAvailableWidth() const;
    int desktopAvailableHeight() const;
    qreal logicalPixelDensity() const;
    qreal pixelDensity() const;
    qreal devicePixelRatio() const;
    Qt::ScreenOrientation primaryOrientation() const;
    Qt::ScreenOrientation orientation() const;
    int virtualX() const;
    int virtualY() const;

    void setWrappedScreen(QScreen *screen);
    QScreen *wrappedScreen() const;

Q_SIGNALS:
    void nameChanged();
    Q_REVISION(2, 10) void manufacturerChanged();
    Q_REVISION(2, 10) void modelChanged();
    Q_REVISION(2, 10) void serialNumberChanged();
    void widthChanged();
    void heightChanged();
    void desktopGeometryChanged();
    void logicalPixelDensityChanged();
    void pixelDensityChanged();
    void devicePixelRatioChanged();
    void primaryOrientationChanged();
    void orientationChanged();
    Q_REVISION(2, 3) void virtualXChanged();
    Q_REVISION(2, 3) void virtualYChanged();

protected:
    QPointer<QScreen> m_screen;
};

class Q_QUICK_EXPORT QQuickScreenAttached : public QQuickScreenInfo
{
    Q_OBJECT

    QML_ANONYMOUS
    QML_ADDED_IN_VERSION(2, 0)

public:
    QQuickScreenAttached(QObject* attachee);

    //Treats int as Qt::ScreenOrientation, due to QTBUG-20639
    Q_INVOKABLE int angleBetween(int a, int b);

    void windowChanged(QQuickWindow*);

protected Q_SLOTS:
    void screenChanged(QScreen*);

private:
    QQuickWindow* m_window = nullptr;
    QQuickItem* m_attachee;
};

class Q_QUICK_EXPORT QQuickScreen : public QObject
{
    Q_OBJECT
    QML_ATTACHED(QQuickScreenAttached)
    QML_NAMED_ELEMENT(Screen)
    QML_ADDED_IN_VERSION(2, 0)
    QML_UNCREATABLE("Screen can only be used via the attached property.")

public:
    static QQuickScreenAttached *qmlAttachedProperties(QObject *object){ return new QQuickScreenAttached(object); }
};

QT_END_NAMESPACE

#endif