14#include <QtAlgorithms>
16#include <qpa/qwindowsysteminterface.h>
17#include <private/qmath_p.h>
18#include <QtGui/private/qhighdpiscaling_p.h>
31 m_workArea = getWorkArea();
37 const quint32 existingEventMask = !rootAttribs ? 0 : rootAttribs->your_event_mask;
42 XCB_EVENT_MASK_ENTER_WINDOW
43 | XCB_EVENT_MASK_LEAVE_WINDOW
44 | XCB_EVENT_MASK_PROPERTY_CHANGE
45 | XCB_EVENT_MASK_STRUCTURE_NOTIFY
54 XCB_ATOM_WINDOW, 0, 1024);
56 xcb_window_t windowManager = *((xcb_window_t *)xcb_get_property_value(
reply.get()));
58 if (windowManager != XCB_WINDOW_NONE)
62 xcb_depth_iterator_t depth_iterator =
63 xcb_screen_allowed_depths_iterator(
screen);
65 while (depth_iterator.rem) {
66 xcb_depth_t *
depth = depth_iterator.data;
67 xcb_visualtype_iterator_t visualtype_iterator =
68 xcb_depth_visuals_iterator(
depth);
70 while (visualtype_iterator.rem) {
71 xcb_visualtype_t *visualtype = visualtype_iterator.data;
72 m_visuals.
insert(visualtype->visual_id, *visualtype);
73 m_visualDepths.
insert(visualtype->visual_id,
depth->depth);
74 xcb_visualtype_next(&visualtype_iterator);
77 xcb_depth_next(&depth_iterator);
81 if (!desktop->setDpiFromXSettings(
property))
87 setDpiFromXSettings(
xSettings()->setting(
"Xft/DPI"));
95 for (
auto cmap : std::as_const(m_visualColormaps))
112 if (
screen->virtualDesktop() ==
this &&
screen->geometry().contains(
pos))
125 const int idx = m_screens.
indexOf(
s);
142 return m_compositingActive;
149 if (notify_event->selection == m_net_wm_cm_atom)
150 m_compositingActive = notify_event->owner;
156 const uint32_t
mask = XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER |
157 XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY |
158 XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE;
190 if (change_event->rotation == m_rotation)
193 m_rotation = change_event->rotation;
194 switch (m_rotation) {
195 case XCB_RANDR_ROTATION_ROTATE_0:
196 m_screen->width_in_pixels = change_event->width;
197 m_screen->height_in_pixels = change_event->height;
198 m_screen->width_in_millimeters = change_event->mwidth;
199 m_screen->height_in_millimeters = change_event->mheight;
201 case XCB_RANDR_ROTATION_ROTATE_90:
202 m_screen->width_in_pixels = change_event->height;
203 m_screen->height_in_pixels = change_event->width;
204 m_screen->width_in_millimeters = change_event->mheight;
205 m_screen->height_in_millimeters = change_event->mwidth;
207 case XCB_RANDR_ROTATION_ROTATE_180:
208 m_screen->width_in_pixels = change_event->width;
209 m_screen->height_in_pixels = change_event->height;
210 m_screen->width_in_millimeters = change_event->mwidth;
211 m_screen->height_in_millimeters = change_event->mheight;
213 case XCB_RANDR_ROTATION_ROTATE_270:
214 m_screen->width_in_pixels = change_event->height;
215 m_screen->height_in_pixels = change_event->width;
216 m_screen->width_in_millimeters = change_event->mheight;
217 m_screen->height_in_millimeters = change_event->mwidth;
221 case XCB_RANDR_ROTATION_REFLECT_X:
break;
222 case XCB_RANDR_ROTATION_REFLECT_Y:
break;
226 QDpi ldpi = platformScreen->logicalDpi();
248QRect QXcbVirtualDesktop::getWorkArea()
const
253 XCB_ATOM_CARDINAL, 0, 1024);
254 if (workArea && workArea->type == XCB_ATOM_CARDINAL && workArea->format == 32 && workArea->value_len >= 4) {
261 uint32_t *geom = (uint32_t*)xcb_get_property_value(workArea.get());
262 r =
QRect(geom[0], geom[1], geom[2], geom[3]);
271 QRect workArea = getWorkArea();
272 if (m_workArea != workArea) {
273 m_workArea = workArea;
281 return m_workArea.
width() >= 0 ? screenGeometry & m_workArea : screenGeometry;
290bool QXcbVirtualDesktop::xResource(
const QByteArray &identifier,
294 if (identifier.
startsWith(expectedIdentifier)) {
295 stringValue = identifier.
mid(expectedIdentifier.
size());
321 if (stringValue ==
"hintfull")
323 else if (stringValue ==
"hintnone")
325 else if (stringValue ==
"hintmedium")
327 else if (stringValue ==
"hintslight")
335 if (stringValue ==
"none")
337 else if (stringValue ==
"rgb")
339 else if (stringValue ==
"bgr")
341 else if (stringValue ==
"vrgb")
343 else if (stringValue ==
"vbgr")
349void QXcbVirtualDesktop::readXResources()
356 XCB_ATOM_RESOURCE_MANAGER,
357 XCB_ATOM_STRING,
offset/4, 8192);
360 resources +=
QByteArray((
const char *)xcb_get_property_value(
reply.get()), xcb_get_property_value_length(
reply.get()));
361 offset += xcb_get_property_value_length(
reply.get());
362 more =
reply->bytes_after != 0;
370 for (
int i = 0;
i <
split.size(); ++
i) {
374 if (xResource(
r,
"Xft.dpi:\t", stringValue)) {
377 }
else if (xResource(
r,
"Xft.hintstyle:\t", stringValue)) {
379 }
else if (xResource(
r,
"Xft.antialias:\t", stringValue)) {
381 m_antialiasingEnabled =
value;
382 }
else if (xResource(
r,
"Xft.rgba:\t", stringValue)) {
391 int dpiTimes1k =
property.toInt(&
ok);
394 int dpi = dpiTimes1k / 1024;
395 if (m_forcedDpi ==
dpi)
405 const xcb_visualtype_t *xcb_visualtype =
visualForId(xcb_visualid);
413 if (
result.redBufferSize() < 0)
414 result.setRedBufferSize(redSize);
416 if (
result.greenBufferSize() < 0)
417 result.setGreenBufferSize(greenSize);
419 if (
result.blueBufferSize() < 0)
420 result.setBlueBufferSize(blueSize);
427 const xcb_visualtype_t *candidate =
nullptr;
429 for (
const xcb_visualtype_t &xcb_visualtype : m_visuals) {
434 const int alphaSize =
depthOfVisual(xcb_visualtype.visual_id) - redSize - greenSize - blueSize;
436 if (
format.redBufferSize() != -1 && redSize !=
format.redBufferSize())
439 if (
format.greenBufferSize() != -1 && greenSize !=
format.greenBufferSize())
442 if (
format.blueBufferSize() != -1 && blueSize !=
format.blueBufferSize())
445 if (
format.alphaBufferSize() != -1 && alphaSize !=
format.alphaBufferSize())
450 return &xcb_visualtype;
455 candidate = &xcb_visualtype;
485 XCB_COLORMAP_ALLOC_NONE,
489 m_visualColormaps.
insert(visualid, cmap);
494 xcb_randr_output_t outputId, xcb_randr_get_output_info_reply_t *
output)
496 , m_virtualDesktop(virtualDesktop)
500 , m_outputName(getOutputName(
output))
517 if (m_availableGeometry.
isEmpty())
520 if (m_sizeMillimeters.
isEmpty())
523 updateColorSpaceAndEdid();
526void QXcbScreen::updateColorSpaceAndEdid()
533 XCB_ATOM_CARDINAL, 0, 8192);
534 if (
reply->format == 8 &&
reply->type == XCB_ATOM_CARDINAL) {
541 if (m_edid.
parse(edid)) {
542 qCDebug(lcQpaScreen,
"EDID data for output \"%s\": identifier '%s', manufacturer '%s',"
543 "model '%s', serial '%s', physical size: %.2fx%.2f",
544 name().toLatin1().constData(),
574 qCDebug(lcQpaScreen) <<
"Failed to parse EDID data for output" <<
name() <<
575 "edid data: " << edid;
583 xcb_randr_monitor_info_t *monitorInfo, xcb_timestamp_t timestamp)
585 , m_virtualDesktop(virtualDesktop)
586 , m_monitor(monitorInfo)
601 m_singlescreen =
false;
613 m_monitor = monitorInfo;
614 qCDebug(lcQpaScreen) <<
"xcb_randr_monitor_info_t: primary=" << m_monitor->primary <<
", x=" << m_monitor->x <<
", y=" << m_monitor->y
615 <<
", width=" << m_monitor->width <<
", height=" << m_monitor->height
616 <<
", width_in_millimeters=" << m_monitor->width_in_millimeters <<
", height_in_millimeters=" << m_monitor->height_in_millimeters;
617 QRect monitorGeometry =
QRect(m_monitor->x, m_monitor->y,
618 m_monitor->width, m_monitor->height);
619 m_sizeMillimeters =
QSize(m_monitor->width_in_millimeters, m_monitor->height_in_millimeters);
621 int outputCount = xcb_randr_monitor_info_outputs_length(m_monitor);
622 xcb_randr_output_t *
outputs =
nullptr;
624 outputs = xcb_randr_monitor_info_outputs(m_monitor);
625 for (
int i = 0;
i < outputCount;
i++) {
632 if (
output->connection != XCB_RANDR_CONNECTION_CONNECTED) {
635 xcb_randr_get_output_info_name_length(
output.get()))));
639 if (
output->crtc == XCB_NONE) {
642 xcb_randr_get_output_info_name_length(
output.get()))));
647 if (m_output == XCB_NONE) {
652 if (m_crtc == XCB_NONE)
657 if (m_crtcs.
size() == 1) {
661 if (m_singlescreen) {
671 m_geometry = monitorGeometry;
675 if (m_availableGeometry.
isEmpty())
678 if (m_sizeMillimeters.
isEmpty())
681 m_outputName =
getName(monitorInfo);
688 updateColorSpaceAndEdid();
707 qWarning(
"failed to get the primary output of the screen");
709 const bool isPrimary = primary ? (m_monitor ? m_outputs.
contains(primary->output) : m_output == primary->output) :
false;
723 xcb_randr_get_output_info_name_length(outputInfo));
774 if (!translate_reply) {
779 child = translate_reply->child;
780 x = translate_reply->dst_x;
781 y = translate_reply->dst_y;
788 return platformWindow->
window();
797 if (!
connection()->startupId().isEmpty() &&
window->window()->isTopLevel()) {
815 xcb_window_t rootWindow =
root();
817 xcb_client_message_event_t ev;
818 ev.response_type = XCB_CLIENT_MESSAGE;
822 ev.window = rootWindow;
830 const int start = sent;
832 memcpy(ev.data.data8,
data +
start, numBytes);
833 xcb_send_event(
connection()->
xcb_connection(),
false, rootWindow, XCB_EVENT_MASK_PROPERTY_CHANGE, (
const char *) &ev);
843 bool useScreenGeometry = isMultiHeadSystem && !enforceNetWorkarea;
844 return useScreenGeometry ? m_geometry : m_availableGeometry;
858int QXcbScreen::forcedDpi()
const
860 const int forcedDpi = m_virtualDesktop->
forcedDpi();
868 const int forcedDpi = this->forcedDpi();
870 return QDpi(forcedDpi, forcedDpi);
882 return m_cursor.get();
886 xcb_randr_get_output_info_reply_t *outputInfo)
890 m_crtc = outputInfo ? outputInfo->crtc : XCB_NONE;
912 case XCB_RANDR_ROTATION_ROTATE_0:
915 m_sizeMillimeters = m_outputSizeMillimeters;
917 case XCB_RANDR_ROTATION_ROTATE_90:
920 m_sizeMillimeters = m_outputSizeMillimeters.
transposed();
922 case XCB_RANDR_ROTATION_ROTATE_180:
925 m_sizeMillimeters = m_outputSizeMillimeters;
927 case XCB_RANDR_ROTATION_ROTATE_270:
930 m_sizeMillimeters = m_outputSizeMillimeters.
transposed();
937 if (m_sizeMillimeters.
isEmpty())
943 if (m_orientation != oldOrientation)
969 xcb_randr_mode_info_iterator_t modesIter =
970 xcb_randr_get_screen_resources_current_modes_iterator(resources.get());
971 for (; modesIter.rem; xcb_randr_mode_info_next(&modesIter)) {
972 xcb_randr_mode_info_t *modeInfo = modesIter.data;
973 if (modeInfo->id ==
mode) {
974 const uint32_t dotCount = modeInfo->htotal * modeInfo->vtotal;
975 m_refreshRate = (dotCount != 0) ? modeInfo->dot_clock /
qreal(dotCount) : 0;
990 if (!translate_reply)
992 *
x = translate_reply->dst_x;
993 *
y = translate_reply->dst_y;
1011 const quint8 rootDepth = rootReply->depth;
1014 quint8 effectiveDepth = 0;
1019 windowSize =
QSize(windowReply->width, windowReply->height);
1020 effectiveDepth = windowReply->depth;
1021 if (effectiveDepth == rootDepth) {
1034 effectiveDepth = rootDepth;
1035 windowSize = m_geometry.
size();
1036 x += m_geometry.
x();
1037 y += m_geometry.
y();
1047 if (!attributes_reply)
1050 const xcb_visualtype_t *visual =
screen->visualForId(attributes_reply->visual);
1055 uint32_t gc_value_mask = XCB_GC_SUBWINDOW_MODE;
1056 uint32_t gc_value_list[] = { XCB_SUBWINDOW_MODE_INCLUDE_INFERIORS };
1075QByteArray QXcbScreen::getOutputProperty(xcb_atom_t atom)
const
1080 m_output,
atom, XCB_ATOM_ANY, 0, 100,
false,
false);
1083 memcpy(
data, xcb_randr_get_output_property_data(
reply.get()),
reply->num_items);
1109 debug <<
r.width() <<
'x' <<
r.height()
1115 debug <<
s.width() <<
'x' <<
s.height() <<
"mm";
1126 debug <<
", geometry=";
1128 debug <<
", availableGeometry=";
1132 debug <<
", physicalSize=";
1135 debug <<
", screenNumber=" <<
screen->screenNumber();
1137 debug <<
", virtualSize=" << virtualSize.
width() <<
'x' << virtualSize.
height() <<
" (";
1143 debug <<
", windowManagerName=" <<
screen->windowManagerName();
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
int toInt(bool *ok=nullptr, int base=10) const
Returns the byte array converted to an int using base base, which is ten by default.
QList< QByteArray > split(char sep) const
Splits the byte array into subarrays wherever sep occurs, and returns the list of those arrays.
double toDouble(bool *ok=nullptr) const
Returns the byte array converted to a double value.
bool startsWith(QByteArrayView bv) const
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
static QByteArray number(int, int base=10)
Returns a byte-array representing the whole number n as text.
QByteArray mid(qsizetype index, qsizetype len=-1) const
Returns a byte array containing len bytes from this byte array, starting at position pos.
The QColorSpace class provides a color space abstraction.
bool isValid() const noexcept
Returns true if the color space is valid.
static QColorSpace fromIccProfile(const QByteArray &iccProfile)
Creates a QColorSpace from ICC profile iccProfile.
QList< QList< uint16_t > > tables
QPointF whiteChromaticity
QPointF greenChromaticity
bool parse(const QByteArray &blob)
Format
The following image formats are available in Qt.
qsizetype size() const noexcept
void swapItemsAt(qsizetype i, qsizetype j)
void prepend(rvalue_ref t)
void append(parameter_type t)
iterator insert(const Key &key, const T &value)
const_iterator constFind(const Key &key) const
iterator find(const Key &key)
const_iterator constEnd() const
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
constexpr bool isEmpty() const noexcept
Returns true if the rectangle is empty, otherwise returns false.
constexpr int x() const noexcept
Returns the x-coordinate of the rectangle's left edge.
constexpr QSize size() const noexcept
Returns the size of the rectangle.
constexpr int width() const noexcept
Returns the width of the rectangle.
constexpr int y() const noexcept
Returns the y-coordinate of the rectangle's top edge.
qreal devicePixelRatio
the screen's ratio between physical pixels and device-independent pixels
QRect availableGeometry
the screen's available geometry in pixels
QSizeF physicalSize
the screen's physical size (in millimeters)
QRect geometry
the screen's geometry in pixels
qreal refreshRate
the approximate vertical refresh rate of the screen in Hz
QSize size
the pixel resolution of the screen
int depth
the color depth of the screen
Qt::ScreenOrientation orientation
the screen orientation
QString name
a user presentable string representing the screen
constexpr qreal width() const noexcept
Returns the width.
constexpr bool isEmpty() const noexcept
Returns true if either of the width and height is less than or equal to 0; otherwise returns false.
constexpr QSizeF transposed() const noexcept
constexpr qreal height() const noexcept
Returns the height.
constexpr int height() const noexcept
Returns the height.
constexpr int width() const noexcept
Returns the width.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QByteArray toLatin1() const &
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
void truncate(qsizetype pos)
Truncates the string at the given position index.
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static void handleScreenGeometryChange(QScreen *screen, const QRect &newGeometry, const QRect &newAvailableGeometry)
static void handleScreenOrientationChange(QScreen *screen, Qt::ScreenOrientation newOrientation)
static void handleScreenRefreshRateChange(QScreen *screen, qreal newRefreshRate)
static void handleScreenLogicalDotsPerInchChange(QScreen *screen, qreal newDpiX, qreal newDpiY)
@ Atom_NET_SUPPORTING_WM_CHECK
@ AtomXFree86_DDC_EDID1_RAWDATA
@ Atom_NET_STARTUP_INFO_BEGIN
QByteArray atomName(xcb_atom_t atom)
xcb_atom_t internAtom(const char *name)
const char * displayName() const
bool isAtLeastXRandR12() const
xcb_atom_t atom(QXcbAtom::Atom qatom) const
xcb_window_t selectionOwner(xcb_atom_t atom) const
xcb_visualid_t defaultVisualId() const
bool hasDefaultVisualId() const
void setStartupId(const QByteArray &nextId)
const QList< QXcbScreen * > & screens() const
QXcbWindow * platformWindowFromId(xcb_window_t id)
QXcbConnection * connection() const
xcb_connection_t * xcb_connection() const
xcb_atom_t atom(QXcbAtom::Atom atom) const
xcb_randr_crtc_t crtc() const
bool isPrimaryInXScreen()
void updateAvailableGeometry()
QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &format) const
QString serialNumber() const override
Reimplement this function in subclass to return the serial number of this screen.
QXcbScreen(QXcbConnection *connection, QXcbVirtualDesktop *virtualDesktop, xcb_randr_output_t outputId, xcb_randr_get_output_info_reply_t *outputInfo)
xcb_screen_t * screen() const
QWindow * topLevelAt(const QPoint &point) const override
Return the given top level window for a given position.
xcb_window_t root() const
QString getName(xcb_randr_monitor_info_t *monitorInfo)
QImage::Format format() const override
Reimplement in subclass to return the image format which corresponds to the screen format.
QString name() const override
void updateRefreshRate(xcb_randr_mode_t mode)
QList< xcb_randr_output_t > outputs() const
void updateGeometry(const QRect &geometry, uint8_t rotation)
QRect geometry() const override
Reimplement in subclass to return the pixel geometry of the screen.
QString model() const override
Reimplement this function in subclass to return the model of this screen.
const xcb_visualtype_t * visualForId(xcb_visualid_t visualid) const
xcb_randr_mode_t mode() const
QRect availableGeometry() const override
Reimplement in subclass to return the pixel geometry of the available space This normally is the desk...
void setMonitor(xcb_randr_monitor_info_t *monitorInfo, xcb_timestamp_t timestamp=XCB_NONE)
QPixmap grabWindow(WId window, int x, int y, int width, int height) const override
This function is called when Qt needs to be able to grab the content of a window.
QXcbVirtualDesktop * virtualDesktop() const
QList< QPlatformScreen * > virtualSiblings() const override
Returns a list of all the platform screens that are part of the same virtual desktop.
void setOutput(xcb_randr_output_t outputId, xcb_randr_get_output_info_reply_t *outputInfo)
QPlatformCursor * cursor() const override
Reimplement this function in subclass to return the cursor of the screen.
QString getOutputName(xcb_randr_get_output_info_reply_t *outputInfo)
xcb_randr_output_t output() const
void windowShown(QXcbWindow *window)
QString manufacturer() const override
Reimplement this function in subclass to return the manufacturer of this screen.
QXcbXSettings * xSettings() const
QDpi logicalDpi() const override
Reimplement this function in subclass to return the logical horizontal and vertical dots per inch met...
xcb_colormap_t colormapForVisual(xcb_visualid_t) const
bool compositingActive() const
void addScreen(QPlatformScreen *s)
const xcb_visualtype_t * visualForId(xcb_visualid_t) const
xcb_window_t root() const
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
quint8 depthOfVisual(xcb_visualid_t) const
QXcbXSettings * xSettings() const
QList< QPlatformScreen * > screens() const
void subscribeToXFixesSelectionNotify()
void setPrimaryScreen(QPlatformScreen *s)
QRect availableGeometry(const QRect &screenGeometry) const
void handleXFixesSelectionNotify(xcb_xfixes_selection_notify_event_t *notify_event)
QXcbScreen * screenAt(const QPoint &pos) const
QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &format) const
xcb_screen_t * screen() const
static QString windowTitle(const QXcbConnection *conn, xcb_window_t window)
void registerCallbackForProperty(const QByteArray &property, PropertyChangeFunc func, void *handle)
QSet< QString >::iterator it
Combined button and popup list for selecting options.
QTextStream & hex(QTextStream &stream)
Calls QTextStream::setIntegerBase(16) on stream and returns stream.
QTextStream & noforcesign(QTextStream &stream)
Calls QTextStream::setNumberFlags(QTextStream::numberFlags() & ~QTextStream::ForceSign) on stream and...
@ InvertedLandscapeOrientation
@ InvertedPortraitOrientation
QTextStream & fixed(QTextStream &stream)
Calls QTextStream::setRealNumberNotation(QTextStream::FixedNotation) on stream and returns stream.
QTextStream & forcesign(QTextStream &stream)
Calls QTextStream::setNumberFlags(QTextStream::numberFlags() | QTextStream::ForceSign) on stream and ...
constexpr uint qCountTrailingZeroBits(quint32 v) noexcept
Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR uint qPopulationCount(quint32 v) noexcept
#define QByteArrayLiteral(str)
static QString displayName(CGDirectDisplayID displayID)
DBusConnection * connection
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
int qRound(qfloat16 d) noexcept
QPair< qreal, qreal > QDpi
#define qCDebug(category,...)
static const qreal Q_MM_PER_INCH
constexpr const T & qMin(const T &a, const T &b)
GLenum GLsizei GLsizei GLint * values
[15]
GLint GLint GLint GLint GLint x
[0]
GLint GLenum GLsizei GLsizei GLsizei depth
GLint GLsizei GLsizei height
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLint GLint GLint GLint GLint GLint GLint GLbitfield mask
GLint GLsizei GLsizei GLenum format
static void split(QT_FT_Vector *b)
#define qPrintable(string)
Q_CORE_EXPORT bool qEnvironmentVariableIsEmpty(const char *varName) noexcept
QTextStreamManipulator qSetRealNumberPrecision(int precision)
QT_BEGIN_NAMESPACE typedef uchar * output
#define Q_XCB_REPLY(call,...)
#define Q_XCB_REPLY_UNCHECKED(call,...)
QT_BEGIN_NAMESPACE bool qt_xcb_imageFormatForVisual(QXcbConnection *connection, uint8_t depth, const xcb_visualtype_t *visual, QImage::Format *imageFormat, bool *needsRgbSwap)
QPixmap qt_xcb_pixmapFromXPixmap(QXcbConnection *connection, xcb_pixmap_t pixmap, int width, int height, int depth, const xcb_visualtype_t *visual)
static QSizeF sizeInMillimeters(const QSize &size, const QDpi &dpi)
static bool parseXftInt(const QByteArray &stringValue, int *value)
static void formatSizeF(QDebug &debug, const QSizeF s)
static QFontEngine::SubpixelAntialiasingType parseXftRgba(const QByteArray &stringValue)
static bool parseXftDpi(const QByteArray &stringValue, int *value)
static void formatRect(QDebug &debug, const QRect r)
static QFontEngine::HintStyle parseXftHintStyle(const QByteArray &stringValue)
static bool translate(xcb_connection_t *connection, xcb_window_t child, xcb_window_t parent, int *x, int *y)
QDebug operator<<(QDebug debug, const QXcbScreen *screen)
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
bool contains(const AT &t) const noexcept
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent