Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qxcbscreen.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QXCBSCREEN_H
5#define QXCBSCREEN_H
6
7#include <qpa/qplatformscreen.h>
8#include <qpa/qplatformscreen_p.h>
9#include <QtCore/QString>
10
11#include <xcb/xcb.h>
12#include <xcb/randr.h>
13#include <xcb/xfixes.h>
14
15#include "qxcbobject.h"
16
17#include <private/qfontengine_p.h>
18
19#include <QtGui/private/qedidparser_p.h>
20
21#include <memory>
22
24
25class QXcbConnection;
26class QXcbCursor;
27class QXcbXSettings;
28#ifndef QT_NO_DEBUG_STREAM
29class QDebug;
30#endif
31
33{
34public:
37
38 xcb_screen_t *screen() const { return m_screen; }
39 int number() const { return m_number; }
40 QSize size() const { return QSize(m_screen->width_in_pixels, m_screen->height_in_pixels); }
41 QSize physicalSize() const { return QSize(m_screen->width_in_millimeters, m_screen->height_in_millimeters); }
42 QDpi dpi() const;
43 xcb_window_t root() const { return m_screen->root; }
44 QXcbScreen *screenAt(const QPoint &pos) const;
45
46 QList<QPlatformScreen *> screens() const { return m_screens; }
47 void setScreens(QList<QPlatformScreen *> &&sl) { m_screens = std::move(sl); }
48 void removeScreen(QPlatformScreen *s) { m_screens.removeOne(s); }
51
52 QXcbXSettings *xSettings() const;
53
54 bool compositingActive() const;
55
56 void updateWorkArea();
57 QRect availableGeometry(const QRect &screenGeometry) const;
58
59 void handleXFixesSelectionNotify(xcb_xfixes_selection_notify_event_t *notify_event);
61
62 void handleScreenChange(xcb_randr_screen_change_notify_event_t *change_event);
63
64 int forcedDpi() const { return m_forcedDpi; }
65 QFontEngine::HintStyle hintStyle() const { return m_hintStyle; }
66 QFontEngine::SubpixelAntialiasingType subpixelType() const { return m_subpixelType; }
67 int antialiasingEnabled() const { return m_antialiasingEnabled; }
68
69 QString windowManagerName() const { return m_windowManagerName; }
70
72
73 const xcb_visualtype_t *visualForFormat(const QSurfaceFormat &format) const;
74 const xcb_visualtype_t *visualForId(xcb_visualid_t) const;
75 quint8 depthOfVisual(xcb_visualid_t) const;
76 xcb_colormap_t colormapForVisual(xcb_visualid_t) const;
77
78private:
79 QRect getWorkArea() const;
80
81 static bool xResource(const QByteArray &identifier,
82 const QByteArray &expectedIdentifier,
83 QByteArray &stringValue);
84 void readXResources();
85
86 bool setDpiFromXSettings(const QVariant &property);
87
88 xcb_screen_t *m_screen;
89 const int m_number;
90 QList<QPlatformScreen *> m_screens;
91
92 QXcbXSettings *m_xSettings = nullptr;
93 xcb_atom_t m_net_wm_cm_atom = 0;
94 bool m_compositingActive = false;
95
96 QRect m_workArea;
97
98 int m_forcedDpi = -1;
101 int m_antialiasingEnabled = -1;
102 QString m_windowManagerName;
103 QMap<xcb_visualid_t, xcb_visualtype_t> m_visuals;
104 QMap<xcb_visualid_t, quint8> m_visualDepths;
105 mutable QMap<xcb_visualid_t, xcb_colormap_t> m_visualColormaps;
106 uint16_t m_rotation = 0;
107
108 friend class QXcbConnection;
109};
110
112 , public QNativeInterface::Private::QXcbScreen
113{
114public:
116 xcb_randr_output_t outputId, xcb_randr_get_output_info_reply_t *outputInfo);
118 xcb_randr_monitor_info_t *monitorInfo, xcb_timestamp_t timestamp = XCB_NONE);
119 ~QXcbScreen();
120
121 QString getOutputName(xcb_randr_get_output_info_reply_t *outputInfo);
122 QString getName(xcb_randr_monitor_info_t *monitorInfo);
123
124 QPixmap grabWindow(WId window, int x, int y, int width, int height) const override;
125
126 QWindow *topLevelAt(const QPoint &point) const override;
127
128 QString manufacturer() const override;
129 QString model() const override;
130 QString serialNumber() const override;
131
132 QRect geometry() const override { return m_geometry; }
133 QRect availableGeometry() const override;
134 int depth() const override { return screen()->root_depth; }
135 QImage::Format format() const override;
136 QColorSpace colorSpace() const override { return m_colorSpace; }
137 QSizeF physicalSize() const override { return m_sizeMillimeters; }
138 QDpi logicalDpi() const override;
139 QDpi logicalBaseDpi() const override { return QDpi(96, 96); }
140 QPlatformCursor *cursor() const override;
141 qreal refreshRate() const override { return m_refreshRate; }
142 Qt::ScreenOrientation orientation() const override { return m_orientation; }
143 QList<QPlatformScreen *> virtualSiblings() const override { return m_virtualDesktop->screens(); }
144 QXcbVirtualDesktop *virtualDesktop() const { return m_virtualDesktop; }
145
146 void setPrimary(bool primary) { m_primary = primary; }
147 bool isPrimary() const { return m_primary; }
148
149 int screenNumber() const { return m_virtualDesktop->number(); }
150 int virtualDesktopNumber() const override { return screenNumber(); }
151
152 xcb_screen_t *screen() const { return m_virtualDesktop->screen(); }
153 xcb_window_t root() const { return screen()->root; }
154 xcb_randr_output_t output() const { return m_output; }
155 xcb_randr_crtc_t crtc() const { return m_crtc; }
156 xcb_randr_mode_t mode() const { return m_mode; }
157
158 QList<xcb_randr_output_t> outputs() const { return m_outputs; }
159 QList<xcb_randr_crtc_t> crtcs() const { return m_crtcs; }
160
161 void setOutput(xcb_randr_output_t outputId,
162 xcb_randr_get_output_info_reply_t *outputInfo);
163 void setCrtc(xcb_randr_crtc_t crtc) { m_crtc = crtc; }
164 void setMonitor(xcb_randr_monitor_info_t *monitorInfo, xcb_timestamp_t timestamp = XCB_NONE);
165 QString defaultName();
166 bool isPrimaryInXScreen();
167
168 void windowShown(QXcbWindow *window);
169 QString windowManagerName() const { return m_virtualDesktop->windowManagerName(); }
170
171 QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &format) const;
172
173 const xcb_visualtype_t *visualForFormat(const QSurfaceFormat &format) const { return m_virtualDesktop->visualForFormat(format); }
174 const xcb_visualtype_t *visualForId(xcb_visualid_t visualid) const;
175 xcb_colormap_t colormapForVisual(xcb_visualid_t visualid) const { return m_virtualDesktop->colormapForVisual(visualid); }
176 quint8 depthOfVisual(xcb_visualid_t visualid) const { return m_virtualDesktop->depthOfVisual(visualid); }
177
178 QString name() const override { return m_outputName; }
179
180 void updateGeometry(const QRect &geometry, uint8_t rotation);
181 void updateGeometry(xcb_timestamp_t timestamp = XCB_TIME_CURRENT_TIME);
182 void updateAvailableGeometry();
183 void updateRefreshRate(xcb_randr_mode_t mode);
184
185 QFontEngine::HintStyle hintStyle() const { return m_virtualDesktop->hintStyle(); }
186 QFontEngine::SubpixelAntialiasingType subpixelType() const { return m_virtualDesktop->subpixelType(); }
187 int antialiasingEnabled() const { return m_virtualDesktop->antialiasingEnabled(); }
188
189 QXcbXSettings *xSettings() const;
190
191private:
192 void sendStartupMessage(const QByteArray &message) const;
193 int forcedDpi() const;
194
195 void updateColorSpaceAndEdid();
196 QByteArray getOutputProperty(xcb_atom_t atom) const;
197 QByteArray getEdid() const;
198
199 QXcbVirtualDesktop *m_virtualDesktop;
200 xcb_randr_monitor_info_t *m_monitor;
201 xcb_randr_output_t m_output;
202 xcb_randr_crtc_t m_crtc;
203 xcb_randr_mode_t m_mode = XCB_NONE;
204 bool m_primary = false;
205
206 bool m_singlescreen = false;
207
208 QList<xcb_randr_output_t> m_outputs;
209 QList<xcb_randr_crtc_t> m_crtcs;
210
211 QString m_outputName;
212 QSizeF m_outputSizeMillimeters;
213 QSizeF m_sizeMillimeters;
214 QRect m_geometry;
215 QRect m_availableGeometry;
216 QColorSpace m_colorSpace;
218 std::unique_ptr<QXcbCursor> m_cursor;
219 qreal m_refreshRate = 60.0;
220 QEdidParser m_edid;
221
222 friend class QXcbConnection;
223 friend class QXcbVirtualDesktop;
224};
225
226#ifndef QT_NO_DEBUG_STREAM
227Q_GUI_EXPORT QDebug operator<<(QDebug, const QXcbScreen *);
228#endif
229
231
232#endif
\inmodule QtCore
Definition qbytearray.h:57
The QColorSpace class provides a color space abstraction.
Definition qcolorspace.h:21
\inmodule QtCore
Format
The following image formats are available in Qt.
Definition qimage.h:41
bool removeOne(const AT &t)
Definition qlist.h:598
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
The QPlatformCursor class provides information about pointer device events (movement,...
The QPlatformScreen class provides an abstraction for visual displays.
virtual QString manufacturer() const
Reimplement this function in subclass to return the manufacturer of this screen.
virtual QDpi logicalDpi() const
Reimplement this function in subclass to return the logical horizontal and vertical dots per inch met...
virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const
This function is called when Qt needs to be able to grab the content of a window.
virtual QRect availableGeometry() const
Reimplement in subclass to return the pixel geometry of the available space This normally is the desk...
virtual QString serialNumber() const
Reimplement this function in subclass to return the serial number of this screen.
\inmodule QtCore\reentrant
Definition qpoint.h:25
\inmodule QtCore\reentrant
Definition qrect.h:30
\inmodule QtCore
Definition qsize.h:208
\inmodule QtCore
Definition qsize.h:25
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
The QSurfaceFormat class represents the format of a QSurface. \inmodule QtGui.
\inmodule QtCore
Definition qvariant.h:65
\inmodule QtGui
Definition qwindow.h:63
QXcbConnection * connection() const
Definition qxcbobject.h:17
const xcb_visualtype_t * visualForFormat(const QSurfaceFormat &format) const
Definition qxcbscreen.h:173
xcb_randr_crtc_t crtc() const
Definition qxcbscreen.h:155
QList< xcb_randr_crtc_t > crtcs() const
Definition qxcbscreen.h:159
QString windowManagerName() const
Definition qxcbscreen.h:169
QColorSpace colorSpace() const override
Definition qxcbscreen.h:136
QDpi logicalBaseDpi() const override
Reimplement to return the base logical DPI for the platform.
Definition qxcbscreen.h:139
int depth() const override
Reimplement in subclass to return current depth of the screen.
Definition qxcbscreen.h:134
void setCrtc(xcb_randr_crtc_t crtc)
Definition qxcbscreen.h:163
QSizeF physicalSize() const override
Reimplement this function in subclass to return the physical size of the screen, in millimeters.
Definition qxcbscreen.h:137
xcb_screen_t * screen() const
Definition qxcbscreen.h:152
QFontEngine::SubpixelAntialiasingType subpixelType() const
Definition qxcbscreen.h:186
bool isPrimary() const
Definition qxcbscreen.h:147
xcb_window_t root() const
Definition qxcbscreen.h:153
int virtualDesktopNumber() const override
Definition qxcbscreen.h:150
QString name() const override
Definition qxcbscreen.h:178
QList< xcb_randr_output_t > outputs() const
Definition qxcbscreen.h:158
QRect geometry() const override
Reimplement in subclass to return the pixel geometry of the screen.
Definition qxcbscreen.h:132
quint8 depthOfVisual(xcb_visualid_t visualid) const
Definition qxcbscreen.h:176
Qt::ScreenOrientation orientation() const override
Reimplement this function in subclass to return the current orientation of the screen,...
Definition qxcbscreen.h:142
int antialiasingEnabled() const
Definition qxcbscreen.h:187
xcb_randr_mode_t mode() const
Definition qxcbscreen.h:156
qreal refreshRate() const override
Reimplement this function in subclass to return the vertical refresh rate of the screen,...
Definition qxcbscreen.h:141
QXcbVirtualDesktop * virtualDesktop() const
Definition qxcbscreen.h:144
QList< QPlatformScreen * > virtualSiblings() const override
Returns a list of all the platform screens that are part of the same virtual desktop.
Definition qxcbscreen.h:143
int screenNumber() const
Definition qxcbscreen.h:149
QFontEngine::HintStyle hintStyle() const
Definition qxcbscreen.h:185
xcb_randr_output_t output() const
Definition qxcbscreen.h:154
void setPrimary(bool primary)
Definition qxcbscreen.h:146
xcb_colormap_t colormapForVisual(xcb_visualid_t visualid) const
Definition qxcbscreen.h:175
int antialiasingEnabled() const
Definition qxcbscreen.h:67
xcb_colormap_t colormapForVisual(xcb_visualid_t) const
QFontEngine::SubpixelAntialiasingType subpixelType() const
Definition qxcbscreen.h:66
QFontEngine::HintStyle hintStyle() const
Definition qxcbscreen.h:65
QDpi dpi() const
bool compositingActive() const
void addScreen(QPlatformScreen *s)
int forcedDpi() const
Definition qxcbscreen.h:64
const xcb_visualtype_t * visualForId(xcb_visualid_t) const
xcb_window_t root() const
Definition qxcbscreen.h:43
QXcbVirtualDesktop(QXcbConnection *connection, xcb_screen_t *screen, int number)
void handleScreenChange(xcb_randr_screen_change_notify_event_t *change_event)
handle the XCB screen change event and update properties
const xcb_visualtype_t * visualForFormat(const QSurfaceFormat &format) const
QSize physicalSize() const
Definition qxcbscreen.h:41
quint8 depthOfVisual(xcb_visualid_t) const
int number() const
Definition qxcbscreen.h:39
QXcbXSettings * xSettings() const
QList< QPlatformScreen * > screens() const
Definition qxcbscreen.h:46
void setScreens(QList< QPlatformScreen * > &&sl)
Definition qxcbscreen.h:47
void subscribeToXFixesSelectionNotify()
void setPrimaryScreen(QPlatformScreen *s)
void removeScreen(QPlatformScreen *s)
Definition qxcbscreen.h:48
QRect availableGeometry(const QRect &screenGeometry) const
void handleXFixesSelectionNotify(xcb_xfixes_selection_notify_event_t *notify_event)
QSize size() const
Definition qxcbscreen.h:40
QXcbScreen * screenAt(const QPoint &pos) const
QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &format) const
QString windowManagerName() const
Definition qxcbscreen.h:69
xcb_screen_t * screen() const
Definition qxcbscreen.h:38
QCursor cursor
Combined button and popup list for selecting options.
ScreenOrientation
Definition qnamespace.h:271
@ PrimaryOrientation
Definition qnamespace.h:272
DBusConnection * connection
QPair< qreal, qreal > QDpi
GLint GLint GLint GLint GLint x
[0]
GLenum mode
GLint GLsizei GLsizei height
GLint GLsizei width
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum format
GLint y
GLdouble s
[6]
Definition qopenglext.h:235
static QT_BEGIN_NAMESPACE QWindow * topLevelAt(const QPoint &pos)
QScreen * screen
[1]
Definition main.cpp:29
double qreal
Definition qtypes.h:187
unsigned char quint8
Definition qtypes.h:46
const char property[13]
Definition qwizard.cpp:101
#define Q_XCB_EXPORT
Definition qxcbexport.h:14
Q_GUI_EXPORT QDebug operator<<(QDebug, const QXcbScreen *)
QSqlQueryModel * model
[16]
aWidget window() -> setWindowTitle("New Window Title")
[2]