13#include <QtQuick/private/qsgrenderer_p.h>
14#include <QtQuick/private/qsgplaintexture_p.h>
15#include <QtQuick/private/qquickpointerhandler_p.h>
16#include <QtQuick/private/qquickpointerhandler_p_p.h>
17#include <private/qsgrenderloop_p.h>
18#include <private/qsgrhisupport_p.h>
19#include <private/qquickrendercontrol_p.h>
20#include <private/qquickanimatorcontroller_p.h>
21#include <private/qquickprofiler_p.h>
22#include <private/qquicktextinterface_p.h>
24#include <private/qguiapplication_p.h>
26#include <private/qabstractanimation_p.h>
28#include <QtGui/qpainter.h>
29#include <QtGui/qevent.h>
30#include <QtGui/qmatrix4x4.h>
31#include <QtGui/private/qevent_p.h>
32#include <QtGui/private/qpointingdevice_p.h>
33#include <QtCore/qvarlengtharray.h>
34#include <QtCore/qabstractanimation.h>
35#include <QtCore/QLibraryInfo>
36#include <QtCore/QRunnable>
37#include <QtQml/qqmlincubator.h>
38#include <QtQml/qqmlinfo.h>
39#include <QtQml/private/qqmlmetatype_p.h>
41#include <QtQuick/private/qquickpixmap_p.h>
43#include <private/qqmldebugserviceinterfaces_p.h>
44#include <private/qqmldebugconnector_p.h>
45#include <private/qsgdefaultrendercontext_p.h>
47#include <private/qopengl_p.h>
48#include <QOpenGLContext>
50#ifndef QT_NO_DEBUG_STREAM
51#include <private/qdebug_p.h>
53#include <QtCore/qpointer.h>
72#if defined(QT_QUICK_DEFAULT_TEXT_RENDER_TYPE)
84 : m_renderLoop(loop), m_timer(0)
90 if (animationDriver) {
135 QPointer<QSGRenderLoop> m_renderLoop;
136 int m_incubation_time;
140#if QT_CONFIG(accessibility)
147 return QAccessible::queryAccessibleInterface(
const_cast<QQuickWindow*
>(
this));
182 if (
d->windowManager)
183 d->windowManager->exposureChanged(
this);
191 d->contentItem->setSize(ev->size());
192 if (
d->windowManager)
193 d->windowManager->resize(
this);
200 if (
d->windowManager)
201 d->windowManager->show(
this);
208 if (
auto da =
d->deliveryAgentPrivate())
209 da->handleWindowHidden(
this);
210 if (
d->windowManager)
211 d->windowManager->hide(
this);
228 d->contentItem->setFocus(
false, ev->reason());
238 d->contentItem->setFocus(
true, ev->reason());
239 if (
auto da =
d->deliveryAgentPrivate())
240 da->updateFocusItemTransform();
292 if (
itemsToPolish.size() > itemsRemainingBeforeUpdatePolish) {
313 if (!objName.isNull())
318 qmlWarning(guiltyItem) << typeAndObjectName(guiltyItem)
319 <<
" called polish() inside updatePolish() of " << typeAndObjectName(
item);
344 for (
const auto *childItem : childItems) {
369 item->updatePolish();
370 if (polishLoopDetector.check(
item, itemsRemaining) ==
true)
375 if (
QQuickItem *focusItem = q_func()->activeFocusItem()) {
381 if (isActiveFocusItem && hasImEnabled && transformDirtyOnItemOrAncestor(focusItem))
402 if (
d->windowManager)
403 d->windowManager->update(
this);
404 else if (
d->renderControl)
420void QQuickWindow::physicalDpiChanged()
423 const qreal newPixelRatio = effectiveDevicePixelRatio();
424 if (
qFuzzyCompare(newPixelRatio,
d->lastReportedItemDevicePixelRatio))
426 d->lastReportedItemDevicePixelRatio = newPixelRatio;
432void QQuickWindow::handleFontDatabaseChanged()
435 d->pendingFontUpdate =
true;
482 delete rt.renderTarget;
485 delete res.renderBuffer;
496 delete sw.paintDevice;
514 if (textItem !=
nullptr)
515 textItem->invalidate();
519 invalidateFontData(
child);
526 if (!redirect.renderTargetDirty)
529 redirect.renderTargetDirty =
false;
534 qWarning(
"Failed to set up render target redirection for QQuickWindow");
535 redirect.rt.reset(rhi);
542 redirect.commandBuffer =
cb;
549 ensureCustomRenderTarget();
553 if (redirect.commandBuffer)
554 cb = redirect.commandBuffer;
556 cb = swapchain->currentFrameCommandBuffer();
558 context->prepareSync(
q->effectiveDevicePixelRatio(),
cb, graphicsConfig);
560 animationController->beforeNodeSync();
562 emit q->beforeSynchronizing();
563 runAndClearJobs(&beforeSynchronizingJobs);
565 if (pendingFontUpdate) {
567 invalidateFontData(contentItem);
575 const bool useDepth = graphicsConfig.isDepthBufferEnabledFor2D();
584 animationController->afterNodeSync();
586 renderer->setClearColor(clearColor);
588 renderer->setVisualizationMode(visualizationMode);
590 if (pendingFontUpdate) {
591 context->invalidateGlyphCaches();
592 pendingFontUpdate =
false;
595 emit q->afterSynchronizing();
596 runAndClearJobs(&afterSynchronizingJobs);
602 emit w->beforeRenderPassRecording();
608 emit w->afterRenderPassRecording();
614 ensureCustomRenderTarget();
615 if (redirect.rt.rt.renderTarget)
616 return redirect.rt.rt.multiViewCount;
629 ensureCustomRenderTarget();
630 return redirect.rt.rt.renderTarget;
641 ensureCustomRenderTarget();
648 if (redirect.rt.rt.renderTarget) {
649 rt = redirect.rt.rt.renderTarget;
650 rp =
rt->renderPassDescriptor();
652 qWarning(
"Custom render target is set but no renderpass descriptor has been provided.");
655 cb = redirect.commandBuffer;
657 qWarning(
"Custom render target is set but no command buffer has been provided.");
662 qWarning(
"QQuickWindow: No render target (neither swapchain nor custom target was provided)");
665 rt = swapchain->currentFrameRenderTarget();
666 rp = rpDescForSwapchain;
667 cb = swapchain->currentFrameCommandBuffer();
677 emitBeforeRenderPassRecording,
678 emitAfterRenderPassRecording,
681 animationController->advance();
682 emit q->beforeRendering();
683 runAndClearJobs(&beforeRenderingJobs);
685 const qreal devicePixelRatio =
q->effectiveDevicePixelRatio();
687 if (redirect.rt.rt.renderTarget)
688 pixelSize = redirect.rt.rt.renderTarget->pixelSize();
689 else if (redirect.rt.sw.paintDevice)
690 pixelSize =
QSize(redirect.rt.sw.paintDevice->width(), redirect.rt.sw.paintDevice->height());
692 pixelSize = swapchain->currentPixelSize();
694 pixelSize =
q->size() * devicePixelRatio;
696 renderer->setDevicePixelRatio(devicePixelRatio);
700 QSGAbstractRenderer::MatrixTransformFlags matrixFlags;
701 bool flipY = rhi ? !rhi->isYUpInNDC() :
false;
702 if (!customRenderTarget.isNull() && customRenderTarget.mirrorVertically())
708 renderer->setProjectionMatrixToRect(
rect, matrixFlags, rhi && !rhi->isYUpInNDC());
712 emit q->afterRendering();
713 runAndClearJobs(&afterRenderingJobs);
728 , lastReportedItemDevicePixelRatio(0)
733 , clearColor(
Qt::white)
734 , persistentGraphics(true)
735 , persistentSceneGraph(true)
736 , inDestructor(
false)
737 , incubationController(
nullptr)
738 , hasActiveSwapchain(
false)
739 , hasRenderableSwapchain(
false)
740 , swapchainJustBecameRenderable(
false)
741 , updatesEnabled(true)
750 service->removeWindow(q_func());
775 if (
auto root =
q->contentItem()) {
776 for (
auto &&
child: root->childItems()) {
794 contentItemPrivate->window =
q;
795 contentItemPrivate->windowRefCount = 1;
813 &QQuickWindow::handleFontDatabaseChanged);
822 sg = renderControlPriv->sg;
823 context = renderControlPriv->rc;
849 service->addWindow(
q);
856 auto da =
d->deliveryAgentPrivate();
858 da->handleWindowDeactivate(
this);
869 return QQmlListProperty<QObject>(q_func(),
nullptr,
888QQuickItem *QQuickWindow::mouseGrabberItem()
const
895 if (
auto epd = da->mousePointData())
898 if (
Q_LIKELY(
d->deliveryAgentPrivate()->eventsInDelivery.isEmpty()))
900 qCDebug(lcMouse,
"mouse grabber ambiguous: no event is currently being delivered");
905 firstPointExclusiveGrabber());
1131QQuickWindow::QQuickWindow(
QWindow *parent)
1159 d->init(
this, control);
1169 d->init(
this, control);
1178 d->inDestructor =
true;
1179 if (
d->renderControl) {
1181 }
else if (
d->windowManager) {
1182 d->windowManager->removeWindow(
this);
1183 d->windowManager->windowDestroyed(
this);
1186 delete d->incubationController;
d->incubationController =
nullptr;
1188 d->contentItem =
nullptr;
1191 d->deliveryAgent =
nullptr;
1195 const std::lock_guard locker(
d->renderJobMutex);
1196 qDeleteAll(std::exchange(
d->beforeSynchronizingJobs, {}));
1197 qDeleteAll(std::exchange(
d->afterSynchronizingJobs, {}));
1198 qDeleteAll(std::exchange(
d->beforeRenderingJobs, {}));
1199 qDeleteAll(std::exchange(
d->afterRenderingJobs, {}));;
1211#if QT_CONFIG(quick_shadereffect)
1244 if (
d->windowManager)
1245 d->windowManager->releaseResources(
this);
1247#if QT_CONFIG(quick_shadereffect)
1282void QQuickWindow::setPersistentGraphics(
bool persistent)
1285 d->persistentGraphics = persistent;
1299bool QQuickWindow::isPersistentGraphics()
const
1302 return d->persistentGraphics;
1329void QQuickWindow::setPersistentSceneGraph(
bool persistent)
1332 d->persistentSceneGraph = persistent;
1345bool QQuickWindow::isPersistentSceneGraph()
const
1348 return d->persistentSceneGraph;
1372 return d->contentItem;
1386 auto da =
d->deliveryAgentPrivate();
1388 return da->activeFocusItem;
1398 auto da =
d->deliveryAgentPrivate();
1400 if (!
d->inDestructor && da->activeFocusItem)
1401 return da->activeFocusItem;
1425 auto &firstPt = pointerEvent->
point(0);
1430 for (
auto &point : pointerEvent->
points()) {
1447 if (
event->isPointerEvent()) {
1458 if (
d->windowEventDispatch)
1461 const bool wasAccepted =
event->isAccepted();
1462 QBoolBlocker windowEventDispatchGuard(
d->windowEventDispatch,
true);
1463 qCDebug(lcPtr) <<
"dispatching to window functions in case of override" <<
event;
1465 if (
event->isAccepted() && !wasAccepted)
1493 if (pe->pointCount()) {
1499 QFlatMap<QQuickDeliveryAgent*, QList<QEventPoint>> deliveryAgentsNeedingPoints;
1500 QEventPoint::States eventStates;
1504 pe->clearPassiveGrabbers(pt);
1505 auto &ptList = deliveryAgentsNeedingPoints[ptda];
1506 auto idEquals = [](
auto id) {
return [
id] (
const auto &e) {
return e.id() ==
id; }; };
1507 if (std::none_of(ptList.cbegin(), ptList.cend(), idEquals(pt.id())))
1511 for (
const auto &pt : pe->points()) {
1512 eventStates |= pt.state();
1515 bool foundAgent =
false;
1516 if (!epd->exclusiveGrabber.isNull() && !epd->exclusiveGrabberContext.isNull()) {
1517 if (
auto ptda = qobject_cast<QQuickDeliveryAgent *>(epd->exclusiveGrabberContext.data())) {
1519 qCDebug(lcPtr) << pe->type() <<
"point" << pt.id() << pt.state()
1520 <<
"@" << pt.scenePosition() <<
"will be re-delivered via known grabbing agent" << ptda <<
"to" << epd->exclusiveGrabber.data();
1524 for (
auto pgda : epd->passiveGrabbersContext) {
1525 if (
auto ptda = qobject_cast<QQuickDeliveryAgent *>(pgda.data())) {
1527 qCDebug(lcPtr) << pe->type() <<
"point" << pt.id() << pt.state()
1528 <<
"@" << pt.scenePosition() <<
"will be re-delivered via known passive-grabbing agent" << ptda;
1536 for (
auto daAndPoints : deliveryAgentsNeedingPoints) {
1537 if (pe->pointCount() > 1) {
1541 switch (eventStates) {
1553 QMutableTouchEvent te(eventType, pe->pointingDevice(), pe->modifiers(), daAndPoints.second);
1554 te.setTimestamp(pe->timestamp());
1556 qCDebug(lcTouch) << daAndPoints.first <<
"shall now receive" << &te;
1557 ret = daAndPoints.first->event(&te) ||
ret;
1559 qCDebug(lcPtr) << daAndPoints.first <<
"shall now receive" << pe;
1560 ret = daAndPoints.first->event(pe) ||
ret;
1566 }
else if (!synthMouse) {
1569 for (
const auto &pt : pe->points()) {
1571 pe->clearPassiveGrabbers(pt);
1580 qCDebug(lcHoverTrace) <<
this <<
"some sort of event" <<
event;
1581 bool ret = (da && da->event(
event));
1583 d->clearGrabbers(pe);
1587 }
else if (
event->isInputEvent()) {
1588 if (da && da->event(
event))
1592 switch (
event->type()) {
1599#if QT_CONFIG(quick_draganddrop)
1605 if (
d->inDestructor)
1607 if (da && da->event(
event))
1616 if (
d->windowManager)
1617 d->windowManager->handleUpdateRequest(
this);
1623 if (
d->windowManager)
1624 d->windowManager->hide(
this);
1628 if (
auto da =
d->deliveryAgentPrivate())
1629 da->handleWindowDeactivate(
this);
1641 physicalDpiChanged();
1646 qCDebug(lcQuickWindow) <<
"Child window" << childWindow <<
"added to" <<
this;
1647 if (childWindow->handle()) {
1653 d->updateChildWindowStackingOrder();
1655 qCDebug(lcQuickWindow) <<
"No platform window yet."
1656 <<
"Deferring child window stacking until surface creation";
1667 d->windowManager->handleContextCreationFailure(
this);
1669 if (
event->isPointerEvent())
1680 qCDebug(lcQuickWindow) <<
"Updating child window stacking order for" <<
q;
1684 const auto paintOrderChildItems = itemPrivate->paintOrderChildItems();
1685 for (
auto *
child : paintOrderChildItems) {
1686 if (
auto *windowContainer = qobject_cast<QQuickWindowContainer*>(
child)) {
1687 auto *
window = windowContainer->containedWindow();
1689 qCDebug(lcQuickWindow) << windowContainer <<
"has no contained window yet";
1693 qCDebug(lcQuickWindow) <<
window <<
"is not yet child of this window";
1696 qCDebug(lcQuickWindow) <<
"Raising" <<
window <<
"owned by" << windowContainer;
1708 if (
d->windowEventDispatch)
1710 auto da =
d->deliveryAgentPrivate();
1712 da->deliverKeyEvent(e);
1719 if (
d->windowEventDispatch)
1721 auto da =
d->deliveryAgentPrivate();
1723 da->deliverKeyEvent(e);
1726#if QT_CONFIG(wheelevent)
1728void QQuickWindow::wheelEvent(QWheelEvent *
event)
1731 if (
d->windowEventDispatch)
1733 auto da =
d->deliveryAgentPrivate();
1735 da->deliverSinglePointEventUntilAccepted(
event);
1739#if QT_CONFIG(tabletevent)
1741void QQuickWindow::tabletEvent(QTabletEvent *
event)
1744 if (
d->windowEventDispatch)
1746 auto da =
d->deliveryAgentPrivate();
1748 da->deliverPointerEvent(
event);
1756 if (
d->windowEventDispatch)
1758 auto da =
d->deliveryAgentPrivate();
1760 da->handleMouseEvent(
event);
1766 if (
d->windowEventDispatch)
1768 auto da =
d->deliveryAgentPrivate();
1770 da->handleMouseEvent(
event);
1776 if (
d->windowEventDispatch)
1778 auto da =
d->deliveryAgentPrivate();
1780 da->handleMouseEvent(
event);
1786 if (
d->windowEventDispatch)
1788 auto da =
d->deliveryAgentPrivate();
1790 da->handleMouseEvent(
event);
1793#if QT_CONFIG(cursor)
1799 auto cursorItemAndHandler = findCursorItemAndHandler(
rootItem, scenePos);
1800 if (cursorItem != cursorItemAndHandler.first || cursorHandler != cursorItemAndHandler.second ||
1804 cursorItem = cursorItemAndHandler.first;
1805 cursorHandler = cursorItemAndHandler.second;
1810 qCDebug(lcHoverTrace) <<
"setting cursor" <<
cursor <<
"from" << cursorHandler <<
"or" << cursorItem;
1813 qCDebug(lcHoverTrace) <<
"unsetting cursor";
1819QPair<QQuickItem*, QQuickPointerHandler*> QQuickWindowPrivate::findCursorItemAndHandler(
QQuickItem *
item,
const QPointF &scenePos)
const
1825 return {
nullptr,
nullptr};
1834 auto ret = findCursorItemAndHandler(
child, scenePos);
1839 if (
auto handler = itemPrivate->effectiveCursorHandler()) {
1840 if (handler->parentContains(scenePos))
1841 return {
item, handler};
1847 return {
item,
nullptr};
1851 return {
nullptr,
nullptr};
1858 da->clearFocusObject();
1893 newFocusItem->forceActiveFocus(reason);
1926 itemProperty.append(&itemProperty,
o);
1935 return itemProperty.count(&itemProperty);
1942 return itemProperty.at(&itemProperty,
i);
1949 itemProperty.clear(&itemProperty);
1956 itemProperty.replace(&itemProperty,
i,
o);
1963 itemProperty.removeLast(&itemProperty);
1969 return ((
q->isExposed() &&
q->isVisible())) &&
q->geometry().isValid();
1977 "Failed to initialize graphics backend for %1.");
1978 *translatedMessage = QQuickWindow::tr(msg).arg(
backendName);
1990 if (
p->itemNodeInstance) {
1991 delete p->itemNodeInstance;
1992 p->itemNodeInstance =
nullptr;
1994 if (
p->extra.isAllocated()) {
1995 p->extra->opacityNode =
nullptr;
1996 p->extra->clipNode =
nullptr;
1997 p->extra->rootNode =
nullptr;
2000 p->paintNode =
nullptr;
2008 int index =
mo->indexOfSlot(
"invalidateSceneGraph()");
2012 if (strstr(
method.enclosingMetaObject()->className(),
"_QML_") ==
nullptr)
2017 for (
int ii = 0; ii <
p->childItems.size(); ++ii)
2030 q->cleanupSceneGraph();
2035 qCDebug(lcDirty) <<
"QQuickWindowPrivate::updateDirtyNodes():";
2043 while (updateList) {
2046 itemPriv->removeFromDirtyList();
2055 const QList<QQuickItem *> childItems =
d->paintOrderChildItems();
2057 for (
int i=0;
i<childItems.size(); ++
i) {
2061 before = childItems.at(
i);
2070 QList<QQuickItem *> orderedChildren = itemPriv->paintOrderChildItems();
2072 for (; ii < orderedChildren.size() && orderedChildren.at(ii)->z() < 0; ++ii) {
2074 if (!childPrivate->explicitVisible &&
2075 (!childPrivate->extra.isAllocated() || !childPrivate->extra->effectRefCount))
2079 return childPrivate->itemNode();
2082 if (itemPriv->paintNode && !returnedPaintNode) {
2083 returnedPaintNode =
true;
2084 return itemPriv->paintNode;
2087 for (; ii < orderedChildren.size(); ++ii) {
2089 if (!childPrivate->explicitVisible &&
2090 (!childPrivate->extra.isAllocated() || !childPrivate->extra->effectRefCount))
2094 return childPrivate->itemNode();
2103 quint32 dirty = itemPriv->dirtyAttributes;
2104 itemPriv->dirtyAttributes = 0;
2108 (itemPriv->scale() != 1. || itemPriv->rotation() != 0.))) {
2112 if (itemPriv->x != 0. || itemPriv->y != 0.)
2115 for (
int ii = itemPriv->transforms.size() - 1; ii >= 0; --ii)
2116 itemPriv->transforms.at(ii)->applyTo(&
matrix);
2118 if (itemPriv->scale() != 1. || itemPriv->rotation() != 0.) {
2120 matrix.translate(origin.
x(), origin.
y());
2121 if (itemPriv->scale() != 1.)
2122 matrix.scale(itemPriv->scale(), itemPriv->scale());
2123 if (itemPriv->rotation() != 0.)
2124 matrix.rotate(itemPriv->rotation(), 0, 0, 1);
2125 matrix.translate(-origin.
x(), -origin.
y());
2128 itemPriv->itemNode()->setMatrix(
matrix);
2132 if (clipEffectivelyChanged) {
2134 : (
QSGNode *)itemPriv->itemNode();
2137 if (
bool initializeClipNode =
item->clip() && itemPriv->clipNode() ==
nullptr;
2138 initializeClipNode) {
2140 itemPriv->extra.value().clipNode = clip;
2144 parent->reparentChildNodesTo(clip);
2145 parent->appendChildNode(clip);
2149 parent->appendChildNode(clip);
2152 }
else if (
bool updateClipNode =
item->clip() && itemPriv->clipNode() !=
nullptr;
2157 }
else if (
bool removeClipNode = !
item->clip() && itemPriv->clipNode() !=
nullptr;
2160 parent->removeChildNode(clip);
2168 delete itemPriv->clipNode();
2169 itemPriv->extra->clipNode =
nullptr;
2173 const int effectRefCount = itemPriv->extra.isAllocated() ? itemPriv->extra->effectRefCount : 0;
2174 const bool effectRefEffectivelyChanged =
2176 && ((effectRefCount == 0) != (itemPriv->rootNode() ==
nullptr));
2177 if (effectRefEffectivelyChanged) {
2179 itemPriv->childContainerNode()->removeAllChildNodes();
2183 parent = itemPriv->opacityNode();
2185 parent = itemPriv->itemNode();
2187 if (itemPriv->extra.isAllocated() && itemPriv->extra->effectRefCount) {
2188 Q_ASSERT(itemPriv->rootNode() ==
nullptr);
2190 itemPriv->extra->rootNode = root;
2191 parent->reparentChildNodesTo(root);
2192 parent->appendChildNode(root);
2194 Q_ASSERT(itemPriv->rootNode() !=
nullptr);
2196 parent->removeChildNode(root);
2198 delete itemPriv->rootNode();
2199 itemPriv->extra->rootNode =
nullptr;
2205 bool fetchedPaintNode =
false;
2206 QList<QQuickItem *> orderedChildren = itemPriv->paintOrderChildItems();
2207 int desiredNodesSize = orderedChildren.size() + (itemPriv->paintNode ? 1 : 0);
2215 int desiredNodesProcessed = 0;
2220 QSGNode *groupNode = itemPriv->childContainerNode();
2222 QSGNode *desiredNode =
nullptr;
2224 while (currentNode && (desiredNode =
fetchNextNode(itemPriv, ii, fetchedPaintNode))) {
2225 if (currentNode != desiredNode) {
2235 if (desiredNode->parent()) {
2236 desiredNode->parent()->removeChildNode(desiredNode);
2238 groupNode->insertChildNodeBefore(desiredNode, currentNode);
2242 currentNode = desiredNode;
2246 desiredNodesProcessed++;
2252 if (desiredNodesProcessed < desiredNodesSize) {
2253 while ((desiredNode =
fetchNextNode(itemPriv, ii, fetchedPaintNode))) {
2254 if (desiredNode->parent())
2256 groupNode->appendChildNode(desiredNode);
2258 }
else if (currentNode) {
2262 while (currentNode) {
2271 itemPriv->clipNode()->setRect(
item->clipRect());
2272 itemPriv->clipNode()->update();
2278 qreal opacity = itemPriv->explicitVisible && (!itemPriv->extra.isAllocated() || itemPriv->extra->hideRefCount == 0)
2279 ? itemPriv->opacity() :
qreal(0);
2281 if (
opacity != 1 && !itemPriv->opacityNode()) {
2283 itemPriv->extra.value().opacityNode = node;
2288 child = itemPriv->rootNode();
2293 parent->appendChildNode(node);
2295 parent->reparentChildNodesTo(node);
2296 parent->appendChildNode(node);
2299 if (itemPriv->opacityNode())
2300 itemPriv->opacityNode()->setOpacity(
opacity);
2309 Q_ASSERT(itemPriv->paintNode ==
nullptr ||
2310 itemPriv->paintNode->parent() ==
nullptr ||
2311 itemPriv->paintNode->parent() == itemPriv->childContainerNode());
2313 if (itemPriv->paintNode && itemPriv->paintNode->parent() ==
nullptr) {
2315 if (before && before->
parent()) {
2317 itemPriv->childContainerNode()->insertChildNodeAfter(itemPriv->paintNode, before);
2319 itemPriv->childContainerNode()->prependChildNode(itemPriv->paintNode);
2322 }
else if (itemPriv->paintNode) {
2323 delete itemPriv->paintNode;
2324 itemPriv->paintNode =
nullptr;
2331 QList<QSGNode *> nodes;
2332 nodes << itemPriv->itemNodeInstance
2333 << itemPriv->opacityNode()
2334 << itemPriv->clipNode()
2335 << itemPriv->rootNode()
2336 << itemPriv->paintNode;
2337 nodes.removeAll(
nullptr);
2339 Q_ASSERT(nodes.constFirst() == itemPriv->itemNodeInstance);
2340 for (
int i=1;
i<nodes.size(); ++
i) {
2345 Q_ASSERT(
n == itemPriv->paintNode ||
n == itemPriv->childContainerNode() ||
n->childCount() == 1);
2355 if (
q->isSignalConnected(errorSignal)) {
2362void QQuickWindow::maybeUpdate()
2365 if (
d->renderControl)
2367 else if (
d->windowManager)
2368 d->windowManager->maybeUpdate(
this);
2371void QQuickWindow::cleanupSceneGraph()
2377 delete d->renderer->rootNode();
2379 d->renderer =
nullptr;
2381 d->runAndClearJobs(&
d->beforeSynchronizingJobs);
2382 d->runAndClearJobs(&
d->afterSynchronizingJobs);
2383 d->runAndClearJobs(&
d->beforeRenderingJobs);
2384 d->runAndClearJobs(&
d->afterRenderingJobs);
2385 d->runAndClearJobs(&
d->afterSwapJobs);
2390#if QT_CONFIG(opengl)
2405bool QQuickWindow::isSceneGraphInitialized()
const
2408 return d->context !=
nullptr &&
d->context->isValid();
2613 if (
target !=
d->customRenderTarget) {
2614 d->customRenderTarget =
target;
2615 d->redirect.renderTargetDirty =
true;
2630 return d->customRenderTarget;
2634class GrabWindowForProtectedContent :
public QRunnable
2644 bool checkGrabbable()
2658 if (!checkGrabbable())
2663 m_condition->wakeOne();
2695QImage QQuickWindow::grabWindow()
2699 if (!
d->isRenderable() && !
d->renderControl) {
2702 return d->windowManager->grab(
this);
2704 if (!isSceneGraphInitialized()) {
2721 GrabWindowForProtectedContent *job =
new GrabWindowForProtectedContent(
this, &
image, &
condition);
2723 qWarning(
"QQuickWindow::grabWindow: Failed to create a job for capturing protected content");
2727 scheduleRenderJob(job, QQuickWindow::NoStage);
2737 if (
d->renderControl)
2739 else if (
d->windowManager)
2740 return d->windowManager->grab(
this);
2757 if (!
d->windowManager)
2760 if (!
d->incubationController)
2762 return d->incubationController;
3141 return createTextureFromImage(
image, {});
3190QSGTexture *QQuickWindow::createTextureFromImage(
const QImage &
image, CreateTextureOptions options)
const
3193 if (!isSceneGraphInitialized())
3244 t->setHasAlphaChannel(options & QQuickWindow::TextureHasAlphaChannel);
3245 t->setTextureSize(
texture->pixelSize());
3253 int nativeLayoutOrState,
3256 QQuickWindow::CreateTextureOptions options,
3257 TextureFromNativeTextureFlags
flags)
const
3265 texture->setHasAlphaChannel(options & QQuickWindow::TextureHasAlphaChannel);
3267 texture->setOwnsTexture(
true);
3296 if (
color ==
d->clearColor)
3299 if (
color.alpha() !=
d->clearColor.alpha()) {
3301 if (
color.alpha() < 255)
3302 fmt.setAlphaBufferSize(8);
3304 fmt.setAlphaBufferSize(-1);
3314 return d_func()->clearColor;
3323bool QQuickWindow::hasDefaultAlphaBuffer()
3337void QQuickWindow::setDefaultAlphaBuffer(
bool useAlpha)
3405const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()
3409 d->rhiStateInfo.currentFrameSlot =
d->rhi->currentFrameSlot();
3412 return d->rhiStateInfo;
3456void QQuickWindow::beginExternalCommands()
3459 if (
d->rhi &&
d->context &&
d->context->isValid()) {
3463 cb->beginExternal();
3493void QQuickWindow::endExternalCommands()
3496 if (
d->rhi &&
d->context &&
d->context->isValid()) {
3971void QQuickWindow::scheduleRenderJob(
QRunnable *job, RenderStage stage)
3975 d->renderJobMutex.lock();
3976 if (stage == BeforeSynchronizingStage) {
3977 d->beforeSynchronizingJobs << job;
3978 }
else if (stage == AfterSynchronizingStage) {
3979 d->afterSynchronizingJobs << job;
3980 }
else if (stage == BeforeRenderingStage) {
3981 d->beforeRenderingJobs << job;
3982 }
else if (stage == AfterRenderingStage) {
3983 d->afterRenderingJobs << job;
3984 }
else if (stage == AfterSwapStage) {
3985 d->afterSwapJobs << job;
3986 }
else if (stage == NoStage) {
3990 }
else if (isExposed()) {
3991 d->windowManager->postJob(
this, job);
3996 d->renderJobMutex.unlock();
4002 QList<QRunnable *> jobList = *jobs;
4006 for (
QRunnable *
r : std::as_const(jobList)) {
4012void QQuickWindow::runJobsAfterSwap()
4015 d->runAndClearJobs(&
d->afterSwapJobs);
4033qreal QQuickWindow::effectiveDevicePixelRatio()
const
4038 return w->devicePixelRatio();
4040 if (!
d->customRenderTarget.isNull())
4041 return d->customRenderTarget.devicePixelRatio();
4043 return devicePixelRatio();
4077 return d->context->sceneGraphContext()->rendererInterface(
d->context);
4100QRhi *QQuickWindow::rhi()
const
4119 return d->swapchain;
4246void QQuickWindow::setSceneGraphBackend(
const QString &backend)
4263QString QQuickWindow::sceneGraphBackend()
4334 d->customDeviceObjects =
device;
4348 return d->customDeviceObjects;
4395 return d->graphicsConfig;
4407 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createTextNode(
d->context) :
nullptr;
4421 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createRectangleNode() :
nullptr;
4435 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createImageNode() :
nullptr;
4446 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createNinePatchNode() :
nullptr;
4457QQuickWindow::TextRenderType QQuickWindow::textRenderType()
4472void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
4497#ifndef QT_NO_DEBUG_STREAM
4503 debug <<
"QQuickWindow(nullptr)";
4507 debug <<
win->metaObject()->className() <<
'(' <<
static_cast<const void *
>(
win);
4508 if (
win->isActive())
4510 if (
win->isExposed())
4511 debug <<
" exposed";
4512 debug <<
", visibility=" <<
win->visibility() <<
", flags=" <<
win->flags();
4513 if (!
win->title().isEmpty())
4514 debug <<
", title=" <<
win->title();
4518 debug <<
", parent=" <<
static_cast<const void *
>(
win->
parent());
4519 if (
win->transientParent())
4520 debug <<
", transientParent=" <<
static_cast<const void *
>(
win->transientParent());
4521 debug <<
", geometry=";
4530#include "qquickwindow.moc"
4531#include "moc_qquickwindow_p.cpp"
4532#include "moc_qquickwindow.cpp"
IOBluetoothDevice * device
void stopped()
This signal is emitted by the animation framework to notify the driver that continuous animation has ...
The QCloseEvent class contains parameters that describe a close event.
The QColor class provides colors based on RGB, HSV or CMYK values.
static bool sendEvent(QObject *receiver, QEvent *event)
Sends event event directly to receiver receiver, using the notify() function.
static QCoreApplication * instance() noexcept
Returns a pointer to the application's QCoreApplication (or QGuiApplication/QApplication) instance.
static void postEvent(QObject *receiver, QEvent *event, int priority=Qt::NormalEventPriority)
The QEventPoint class provides information about a point in a QPointerEvent.
virtual void setAccepted(bool accepted)
bool isSinglePointEvent() const noexcept
Type
This enum type defines the valid event types in Qt.
@ ApplicationPaletteChange
void accept()
Sets the accept flag of the event object, the equivalent of calling setAccepted(true).
The QExposeEvent class contains event parameters for expose events. \inmodule QtGui.
The QFocusEvent class contains event parameters for widget focus events.
virtual bool contains(const QPointF &point) const
Returns true if this item contains point, which is in local coordinates; otherwise,...
void update(const QRectF &rect=QRectF())
Schedules a redraw of the area covered by rect in this item.
QList< QGraphicsItem * > childItems() const
QPointF transformOriginPoint() const
virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const
This method is only relevant for input items.
QGraphicsItem * parentItem() const
Returns a pointer to this item's parent item.
GraphicsItemFlags flags() const
Returns this item's flags.
QPointF mapFromScene(const QPointF &point) const
Maps the point point, which is in this item's scene's coordinate system, to this item's coordinate sy...
QScreen * primaryScreen
the primary (or default) screen of the application.
static QPalette palette()
Returns the current application palette.
static QObject * focusObject()
Returns the QObject in currently active window that will be final receiver of events tied to focus,...
void applicationStateChanged(Qt::ApplicationState state)
void fontDatabaseChanged()
This signal is emitted when the available fonts have changed.
The QHideEvent class provides an event which is sent after a widget is hidden.
static void setObjectOwnership(QObject *, ObjectOwnership)
Sets the ownership of object.
The QKeyEvent class describes a key event.
QString arg(Args &&...args) const
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
void append(parameter_type t)
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
void translate(const QVector3D &vector)
Multiplies this matrix by another that translates coordinates by the components of vector.
void unlock() noexcept
Unlocks the mutex.
void lock() noexcept
Locks the mutex.
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
int startTimer(int interval, Qt::TimerType timerType=Qt::CoarseTimer)
This is an overloaded function that will start a timer of type timerType and a timeout of interval mi...
QObject * parent() const
Returns a pointer to the parent object.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
virtual void childEvent(QChildEvent *event)
This event handler can be reimplemented in a subclass to receive child events.
QString objectName
the name of this object
void setParent(QObject *parent)
Makes the object a child of parent.
Q_WEAK_OVERLOAD void setObjectName(const QString &name)
Sets the object's name to name.
void killTimer(int id)
Kills the timer with timer identifier, id.
The QPalette class contains color groups for each widget state.
\inmodule QtCore\reentrant
constexpr qreal x() const noexcept
Returns the x coordinate of this point.
constexpr qreal y() const noexcept
Returns the y coordinate of this point.
\inmodule QtCore\reentrant
A base class for pointer events.
virtual bool isEndEvent() const
void clearPassiveGrabbers(const QEventPoint &point)
Removes all passive grabbers from the given point.
void setExclusiveGrabber(const QEventPoint &point, QObject *exclusiveGrabber)
Informs the delivery logic that the given exclusiveGrabber is to receive all future update events and...
QEventPoint & point(qsizetype i)
Returns a QEventPoint reference for the point at index i.
const QList< QEventPoint > & points() const
Returns a list of points in this pointer event.
static QPointingDevicePrivate * get(QPointingDevice *q)
The QPointingDevice class describes a device from which mouse, touch or tablet events originate.
static const QPointingDevice * primaryPointingDevice(const QString &seatName=QString())
Returns the primary pointing device (the core pointer, traditionally assumed to be a mouse) on the gi...
QQmlIncubationController instances drive the progress of QQmlIncubators.
void incubateFor(int msecs)
Incubate objects for msecs, or until there are no more objects to incubate.
int incubatingObjectCount() const
Return the number of objects currently incubating.
void windowNodesDestroyed()
\qmlsignal QtQuick::Window::sceneGraphError(SceneGraphError error, QString message)
void setAccepted(bool accepted)
static bool subsceneAgentsExist
static bool isTabletEvent(const QPointerEvent *ev)
void updateFocusItemTransform()
static bool isSynthMouse(const QPointerEvent *ev)
static bool isTouchEvent(const QPointerEvent *ev)
QQuickGraphicsConfiguration controls lower level graphics settings for the QQuickWindow.
The QQuickGraphicsDevice class provides an opaque container for native graphics objects representing ...
QLazilyAllocated< ExtraData, ExtraDataTags > extra
virtual void updatePolish()
QList< QQuickItem * > paintOrderChildItems() const
quint32 subtreeCursorEnabled
@ ChildrenStackingChanged
static QQuickItem * nextPrevItemInTabFocusChain(QQuickItem *item, bool forward, bool wrap=true)
void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &)
static QQuickItemPrivate * get(QQuickItem *item)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
void setSize(const QSizeF &size)
void setFlag(Flag flag, bool enabled=true)
Enables the specified flag for this item if enabled is true; if enabled is false, the flag is disable...
@ ItemDevicePixelRatioHasChanged
@ ItemClipsChildrenToShape
virtual QQuickPalette * palette() const
QPalette parentPalette(const QPalette &fallbackPalette) const override
virtual void setPalette(QQuickPalette *p)
Contains color groups for each QML item state. \inmodule QtQuick.
static QQuickPointerHandlerPrivate * get(QQuickPointerHandler *q)
static QQuickRenderControlPrivate * get(QQuickRenderControl *renderControl)
The QQuickRenderControl class provides a mechanism for rendering the Qt Quick scenegraph onto an offs...
static QWindow * renderWindowFor(QQuickWindow *win, QPoint *offset=nullptr)
Returns the real window that win is being rendered to, if any.
static QQuickRenderTargetPrivate * get(QQuickRenderTarget *rt)
The QQuickRenderTarget class provides an opaque container for native graphics resources specifying a ...
void incubatingObjectCountChanged(int count) override
Called when the number of incubating objects changes.
void timerEvent(QTimerEvent *) override
This event handler can be reimplemented in a subclass to receive timer events for the object.
QQuickWindowIncubationController(QSGRenderLoop *loop)
~QQuickWindowPrivate() override
void init(QQuickWindow *, QQuickRenderControl *control=nullptr)
QByteArray visualizationMode
bool emitError(QQuickWindow::SceneGraphError error, const QString &msg)
QQuickItem::UpdatePaintNodeData updatePaintNodeData
static void data_clear(QQmlListProperty< QObject > *)
@ TriggerContextCreationFailure
static void data_replace(QQmlListProperty< QObject > *, qsizetype, QObject *)
QQuickRootItem * contentItem
void dirtyItem(QQuickItem *)
void clearFocusObject() override
static QQuickWindowPrivate * get(QQuickWindow *c)
static QQuickWindow::TextRenderType textRenderType
QSGRenderContext * context
QQuickRenderControl * renderControl
void runAndClearJobs(QList< QRunnable * > *jobs)
QVector< QQuickItem * > itemsToPolish
QQuickItem * dirtyItemList
void updateDirtyNode(QQuickItem *)
void clearGrabbers(QPointerEvent *event)
static void rhiCreationFailureMessage(const QString &backendName, QString *translatedMessage, QString *untranslatedMessage)
static void emitBeforeRenderPassRecording(void *ud)
static bool defaultAlphaBuffer
void cleanupNodesOnShutdown()
void setCustomCommandBuffer(QRhiCommandBuffer *cb)
QPointer< QQuickPalette > windowPaletteRef
static void data_append(QQmlListProperty< QObject > *, QObject *)
\qmlproperty list<QtObject> Window::data \qmldefault
void ensureCustomRenderTarget()
void invalidateFontData(QQuickItem *item)
void setPalette(QQuickPalette *p) override
QQuickDeliveryAgentPrivate * deliveryAgentPrivate() const
QQmlListProperty< QObject > data()
QSet< QQuickItem * > parentlessItems
void updateChildrenPalettes(const QPalette &parentPalette) override
qreal lastReportedItemDevicePixelRatio
QScopedPointer< QQuickAnimatorController > animationController
QSGTexture * createTextureFromNativeTexture(quint64 nativeObjectHandle, int nativeLayoutOrState, uint nativeFormat, const QSize &size, QQuickWindow::CreateTextureOptions options, TextureFromNativeTextureFlags flags={}) const
void forcePolish()
Schedules polish events on all items in the scene.
static void data_removeLast(QQmlListProperty< QObject > *)
void setFocusToTarget(FocusTarget, Qt::FocusReason) override
struct QQuickWindowPrivate::Redirect redirect
static void emitAfterRenderPassRecording(void *ud)
void clearFocusInScope(QQuickItem *scope, QQuickItem *item, Qt::FocusReason reason)
QRhiRenderTarget * activeCustomRhiRenderTarget()
QSGRenderLoop * windowManager
bool isRenderable() const
void updateChildWindowStackingOrder(QQuickItem *item=nullptr)
QList< QSGNode * > cleanupNodeList
QOpenGLContext * openglContext()
QQuickDeliveryAgent * deliveryAgent
static QObject * data_at(QQmlListProperty< QObject > *, qsizetype)
void updateWindowPalette()
static qsizetype data_count(QQmlListProperty< QObject > *)
\qmltype Window \instantiates QQuickWindow \inqmlmodule QtQuick
void focusOutEvent(QFocusEvent *) override
\reimp
void frameSwapped()
This signal is emitted when a frame has been queued for presenting.
void mousePressEvent(QMouseEvent *) override
\reimp
void resizeEvent(QResizeEvent *) override
\reimp
void update()
Schedules the window to render another frame.
void mouseReleaseEvent(QMouseEvent *) override
\reimp
void exposeEvent(QExposeEvent *) override
\reimp
QQuickItem * contentItem
\qmlattachedproperty Item Window::contentItem
void focusInEvent(QFocusEvent *) override
\reimp
void sceneGraphInitialized()
\qmlsignal QtQuick::Window::frameSwapped()
bool event(QEvent *) override
\reimp
QColor color
\qmlproperty color Window::color
void closeEvent(QCloseEvent *) override
\reimp
~QQuickWindow() override
Destroys the window.
void sceneGraphInvalidated()
\qmlsignal QtQuick::Window::sceneGraphInitialized()
void mouseMoveEvent(QMouseEvent *) override
\reimp
QQuickItem * activeFocusItem
The item which currently has active focus or null if there is no item with active focus.
QObject * focusObject() const override
void releaseResources()
This function tries to release redundant resources currently held by the QML scene.
void hideEvent(QHideEvent *) override
\reimp
void showEvent(QShowEvent *) override
\reimp
void keyReleaseEvent(QKeyEvent *) override
\reimp
void mouseDoubleClickEvent(QMouseEvent *) override
\reimp
void keyPressEvent(QKeyEvent *) override
\reimp
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
The QResizeEvent class contains event parameters for resize events.
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
virtual void run()=0
Implement this pure virtual function in your subclass.
void setClipRect(const QRectF &)
Sets the clip rect of this clip node to rect.
The QSGContext holds the scene graph entry points for one QML engine.
virtual QSGRendererInterface * rendererInterface(QSGRenderContext *renderContext)
Returns a pointer to the (presumably) global renderer interface.
static void setBackend(const QString &backend)
virtual QSurfaceFormat defaultSurfaceFormat() const =0
QRhiCommandBuffer * currentFrameCommandBuffer() const
The QSGImageNode class is provided for convenience to easily draw textured content using the QML scen...
\group qtquick-scenegraph-nodes \title Qt Quick Scene Graph Node classes
void removeChildNode(QSGNode *node)
Removes node from this node's list of children.
QSGNode * nextSibling() const
Returns the node after this in the parent's list of children.
void reparentChildNodesTo(QSGNode *newParent)
void appendChildNode(QSGNode *node)
Appends node to this node's list of children.
QSGNode * parent() const
Returns the parent node of this node.
QSGNode * firstChild() const
Returns the first child of this node.
The QSGOpacityNode class is used to change opacity of nodes.
void setTextureFromNativeTexture(QRhi *rhi, quint64 nativeObjectHandle, int nativeLayoutOrState, uint nativeFormat, const QSize &size, QQuickWindow::CreateTextureOptions options, QQuickWindowPrivate::TextureFromNativeTextureFlags flags)
void setOwnsTexture(bool owns)
The QSGRectangleNode class is a convenience class for drawing solid filled rectangles using scenegrap...
QSGContext * sceneGraphContext() const
virtual bool isValid() const
static QSGRenderLoop * instance()
void addWindow(QQuickWindow *win)
virtual QAnimationDriver * animationDriver() const =0
virtual QSurface::SurfaceType windowSurfaceType() const
virtual QSGRenderContext * createRenderContext(QSGContext *) const =0
virtual QSGContext * sceneGraphContext() const =0
virtual bool interleaveIncubation() const
@ SupportsGrabWithoutExpose
An interface providing access to some of the graphics API specific internals of the scenegraph.
RenderMode
\value RenderMode2D Normal 2D rendering \value RenderMode2DNoDepthBuffer Normal 2D rendering with dep...
@ RenderMode2DNoDepthBuffer
static bool isApiRhiBased(GraphicsApi api)
GraphicsApi
\value Unknown An unknown graphics API is in use \value Software The Qt Quick 2D Renderer is in use \...
static QSGRhiSupport * instance_internal()
static QSGRhiSupport * instance()
The QSGRootNode is the toplevel root of any scene graph.
The QSGTextNode class is a class for drawing text layouts and text documents in the Qt Quick scene gr...
void reset(T *other=nullptr) noexcept(noexcept(Cleanup::cleanup(std::declval< T * >())))
Deletes the existing object it is pointing to (if any), and sets its pointer to other.
The QScreen class is used to query screen properties. \inmodule QtGui.
The QShowEvent class provides an event that is sent when a widget is shown.
A base class for pointer events containing a single point, such as mouse events.
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
static QThread * currentThread()
static bool platformSynthesizesMouse
virtual QAccessibleInterface * accessibleRoot() const
Returns the accessibility interface for the object that the window represents.
void focusObjectChanged(QObject *object)
This signal is emitted when the final receiver of events tied to focus is changed to object.
virtual bool event(QEvent *) override
Override this to handle any event (ev) sent to the window.
void screenChanged(QScreen *screen)
This signal is emitted when a window's screen changes, either by being set explicitly with setScreen(...
qDeleteAll(list.begin(), list.end())
cache insert(employee->id(), employee)
QSet< QString >::iterator it
Combined button and popup list for selecting options.
QTCONCURRENT_RUN_NODISCARD auto run(QThreadPool *pool, Function &&f, Args &&...args)
static void formatQRect(QDebug &debug, const Rect &rect)
@ AA_SynthesizeMouseForUnhandledTabletEvents
DBusConnection const char DBusError * error
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
#define Q_DECLARE_LOGGING_CATEGORY(name)
constexpr const T & qMax(const T &a, const T &b)
GLfloat GLfloat GLfloat w
[0]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLenum GLsizei count
GLdouble GLdouble GLdouble GLdouble q
void QQml_setParent_noEvent(QObject *object, QObject *parent)
Makes the object a child of parent.
QQuickItem * qmlobject_cast< QQuickItem * >(QObject *object)
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
static const QQmlJSScope * resolve(const QQmlJSScope *current, const QStringList &names)
const QQuickItem * rootItem(const I &item)
void qtquick_shadereffect_purge_gui_thread_shader_cache()
static void updatePixelRatioHelper(QQuickItem *item, float pixelRatio)
static const QQuickItem * firstItemWithDirtyChildrenStacking(const QQuickItem *item)
void forcePolishHelper(QQuickItem *item)
void forceUpdate(QQuickItem *item)
QDebug operator<<(QDebug debug, const QQuickWindow *win)
static QSGNode * qquickitem_before_paintNode(QQuickItemPrivate *d)
static QSGNode * fetchNextNode(QQuickItemPrivate *itemPriv, int &ii, bool &returnedPaintNode)
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
#define qPrintable(string)
QLatin1StringView QLatin1String
#define QStringLiteral(str)
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
#define QT_TRANSLATE_NOOP(scope, x)
unsigned long long quint64
QVideoFrameFormat::PixelFormat fmt
myObject disconnect()
[26]
QNetworkRequestFactory api
[0]
QSvgRenderer * renderer
[0]
bool check(QQuickItem *item, int itemsRemainingBeforeUpdatePolish)
const QVector< QQuickItem * > & itemsToPolish
int numPolishLoopsInSequence
PolishLoopDetector(const QVector< QQuickItem * > &itemsToPolish)
bool contains(const AT &t) const noexcept
QSGTransformNode * transformNode
QRhiRenderBuffer * depthStencil
QRhiTexture * multisampleTexture
QRhiTexture * depthStencilTexture
struct QQuickWindowRenderTarget::@696 rt
struct QQuickWindowRenderTarget::@698 sw
void reset(QRhi *rhi, ResetFlags flags={})
struct QQuickWindowRenderTarget::ImplicitBuffers implicitBuffers