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());
1143QQuickWindow::QQuickWindow(
QWindow *parent)
1171 d->init(
this, control);
1181 d->init(
this, control);
1190 d->inDestructor =
true;
1191 if (
d->renderControl) {
1193 }
else if (
d->windowManager) {
1194 d->windowManager->removeWindow(
this);
1195 d->windowManager->windowDestroyed(
this);
1198 delete d->incubationController;
d->incubationController =
nullptr;
1200 d->contentItem =
nullptr;
1203 d->deliveryAgent =
nullptr;
1207 const std::lock_guard locker(
d->renderJobMutex);
1208 qDeleteAll(std::exchange(
d->beforeSynchronizingJobs, {}));
1209 qDeleteAll(std::exchange(
d->afterSynchronizingJobs, {}));
1210 qDeleteAll(std::exchange(
d->beforeRenderingJobs, {}));
1211 qDeleteAll(std::exchange(
d->afterRenderingJobs, {}));;
1223#if QT_CONFIG(quick_shadereffect)
1256 if (
d->windowManager)
1257 d->windowManager->releaseResources(
this);
1259#if QT_CONFIG(quick_shadereffect)
1294void QQuickWindow::setPersistentGraphics(
bool persistent)
1297 d->persistentGraphics = persistent;
1311bool QQuickWindow::isPersistentGraphics()
const
1314 return d->persistentGraphics;
1341void QQuickWindow::setPersistentSceneGraph(
bool persistent)
1344 d->persistentSceneGraph = persistent;
1357bool QQuickWindow::isPersistentSceneGraph()
const
1360 return d->persistentSceneGraph;
1384 return d->contentItem;
1398 auto da =
d->deliveryAgentPrivate();
1400 return da->activeFocusItem;
1410 auto da =
d->deliveryAgentPrivate();
1412 if (!
d->inDestructor && da->activeFocusItem)
1413 return da->activeFocusItem;
1437 auto &firstPt = pointerEvent->
point(0);
1442 for (
auto &point : pointerEvent->
points()) {
1459 if (
event->isPointerEvent()) {
1470 if (
d->windowEventDispatch)
1473 const bool wasAccepted =
event->isAccepted();
1474 QBoolBlocker windowEventDispatchGuard(
d->windowEventDispatch,
true);
1475 qCDebug(lcPtr) <<
"dispatching to window functions in case of override" <<
event;
1477 if (
event->isAccepted() && !wasAccepted)
1505 if (pe->pointCount()) {
1511 QFlatMap<QQuickDeliveryAgent*, QList<QEventPoint>> deliveryAgentsNeedingPoints;
1512 QEventPoint::States eventStates;
1516 pe->clearPassiveGrabbers(pt);
1517 auto &ptList = deliveryAgentsNeedingPoints[ptda];
1518 auto idEquals = [](
auto id) {
return [
id] (
const auto &e) {
return e.id() ==
id; }; };
1519 if (std::none_of(ptList.cbegin(), ptList.cend(), idEquals(pt.id())))
1523 for (
const auto &pt : pe->points()) {
1524 eventStates |= pt.state();
1527 bool foundAgent =
false;
1528 if (!epd->exclusiveGrabber.isNull() && !epd->exclusiveGrabberContext.isNull()) {
1529 if (
auto ptda = qobject_cast<QQuickDeliveryAgent *>(epd->exclusiveGrabberContext.data())) {
1531 qCDebug(lcPtr) << pe->type() <<
"point" << pt.id() << pt.state()
1532 <<
"@" << pt.scenePosition() <<
"will be re-delivered via known grabbing agent" << ptda <<
"to" << epd->exclusiveGrabber.data();
1536 for (
auto pgda : epd->passiveGrabbersContext) {
1537 if (
auto ptda = qobject_cast<QQuickDeliveryAgent *>(pgda.data())) {
1539 qCDebug(lcPtr) << pe->type() <<
"point" << pt.id() << pt.state()
1540 <<
"@" << pt.scenePosition() <<
"will be re-delivered via known passive-grabbing agent" << ptda;
1548 for (
auto daAndPoints : deliveryAgentsNeedingPoints) {
1549 if (pe->pointCount() > 1) {
1553 switch (eventStates) {
1565 QMutableTouchEvent te(eventType, pe->pointingDevice(), pe->modifiers(), daAndPoints.second);
1566 te.setTimestamp(pe->timestamp());
1568 qCDebug(lcTouch) << daAndPoints.first <<
"shall now receive" << &te;
1569 ret = daAndPoints.first->event(&te) ||
ret;
1571 qCDebug(lcPtr) << daAndPoints.first <<
"shall now receive" << pe;
1572 ret = daAndPoints.first->event(pe) ||
ret;
1578 }
else if (!synthMouse) {
1581 for (
const auto &pt : pe->points()) {
1583 pe->clearPassiveGrabbers(pt);
1592 qCDebug(lcHoverTrace) <<
this <<
"some sort of event" <<
event;
1593 bool ret = (da && da->event(
event));
1595 d->clearGrabbers(pe);
1599 }
else if (
event->isInputEvent()) {
1600 if (da && da->event(
event))
1604 switch (
event->type()) {
1611#if QT_CONFIG(quick_draganddrop)
1617 if (
d->inDestructor)
1619 if (da && da->event(
event))
1628 if (
d->windowManager)
1629 d->windowManager->handleUpdateRequest(
this);
1635 if (
d->windowManager)
1636 d->windowManager->hide(
this);
1640 if (
auto da =
d->deliveryAgentPrivate())
1641 da->handleWindowDeactivate(
this);
1653 physicalDpiChanged();
1658 qCDebug(lcQuickWindow) <<
"Child window" << childWindow <<
"added to" <<
this;
1659 if (childWindow->handle()) {
1665 d->updateChildWindowStackingOrder();
1667 qCDebug(lcQuickWindow) <<
"No platform window yet."
1668 <<
"Deferring child window stacking until surface creation";
1679 d->windowManager->handleContextCreationFailure(
this);
1681 if (
event->isPointerEvent())
1692 qCDebug(lcQuickWindow) <<
"Updating child window stacking order for" <<
q;
1696 const auto paintOrderChildItems = itemPrivate->paintOrderChildItems();
1697 for (
auto *
child : paintOrderChildItems) {
1698 if (
auto *windowContainer = qobject_cast<QQuickWindowContainer*>(
child)) {
1699 auto *
window = windowContainer->containedWindow();
1701 qCDebug(lcQuickWindow) << windowContainer <<
"has no contained window yet";
1705 qCDebug(lcQuickWindow) <<
window <<
"is not yet child of this window";
1708 qCDebug(lcQuickWindow) <<
"Raising" <<
window <<
"owned by" << windowContainer;
1720 if (
d->windowEventDispatch)
1722 auto da =
d->deliveryAgentPrivate();
1724 da->deliverKeyEvent(e);
1731 if (
d->windowEventDispatch)
1733 auto da =
d->deliveryAgentPrivate();
1735 da->deliverKeyEvent(e);
1738#if QT_CONFIG(wheelevent)
1740void QQuickWindow::wheelEvent(QWheelEvent *
event)
1743 if (
d->windowEventDispatch)
1745 auto da =
d->deliveryAgentPrivate();
1747 da->deliverSinglePointEventUntilAccepted(
event);
1751#if QT_CONFIG(tabletevent)
1753void QQuickWindow::tabletEvent(QTabletEvent *
event)
1756 if (
d->windowEventDispatch)
1758 auto da =
d->deliveryAgentPrivate();
1760 da->deliverPointerEvent(
event);
1768 if (
d->windowEventDispatch)
1770 auto da =
d->deliveryAgentPrivate();
1772 da->handleMouseEvent(
event);
1778 if (
d->windowEventDispatch)
1780 auto da =
d->deliveryAgentPrivate();
1782 da->handleMouseEvent(
event);
1788 if (
d->windowEventDispatch)
1790 auto da =
d->deliveryAgentPrivate();
1792 da->handleMouseEvent(
event);
1798 if (
d->windowEventDispatch)
1800 auto da =
d->deliveryAgentPrivate();
1802 da->handleMouseEvent(
event);
1805#if QT_CONFIG(cursor)
1811 auto cursorItemAndHandler = findCursorItemAndHandler(
rootItem, scenePos);
1812 if (cursorItem != cursorItemAndHandler.first || cursorHandler != cursorItemAndHandler.second ||
1816 cursorItem = cursorItemAndHandler.first;
1817 cursorHandler = cursorItemAndHandler.second;
1822 qCDebug(lcHoverTrace) <<
"setting cursor" <<
cursor <<
"from" << cursorHandler <<
"or" << cursorItem;
1825 qCDebug(lcHoverTrace) <<
"unsetting cursor";
1831QPair<QQuickItem*, QQuickPointerHandler*> QQuickWindowPrivate::findCursorItemAndHandler(
QQuickItem *
item,
const QPointF &scenePos)
const
1837 return {
nullptr,
nullptr};
1846 auto ret = findCursorItemAndHandler(
child, scenePos);
1851 if (
auto handler = itemPrivate->effectiveCursorHandler()) {
1852 if (handler->parentContains(scenePos))
1853 return {
item, handler};
1859 return {
item,
nullptr};
1863 return {
nullptr,
nullptr};
1870 da->clearFocusObject();
1905 newFocusItem->forceActiveFocus(reason);
1938 itemProperty.append(&itemProperty,
o);
1947 return itemProperty.count(&itemProperty);
1954 return itemProperty.at(&itemProperty,
i);
1961 itemProperty.clear(&itemProperty);
1968 itemProperty.replace(&itemProperty,
i,
o);
1975 itemProperty.removeLast(&itemProperty);
1981 return ((
q->isExposed() &&
q->isVisible())) &&
q->geometry().isValid();
1989 "Failed to initialize graphics backend for %1.");
1990 *translatedMessage = QQuickWindow::tr(msg).arg(
backendName);
2002 if (
p->itemNodeInstance) {
2003 delete p->itemNodeInstance;
2004 p->itemNodeInstance =
nullptr;
2006 if (
p->extra.isAllocated()) {
2007 p->extra->opacityNode =
nullptr;
2008 p->extra->clipNode =
nullptr;
2009 p->extra->rootNode =
nullptr;
2012 p->paintNode =
nullptr;
2020 int index =
mo->indexOfSlot(
"invalidateSceneGraph()");
2024 if (strstr(
method.enclosingMetaObject()->className(),
"_QML_") ==
nullptr)
2029 for (
int ii = 0; ii <
p->childItems.size(); ++ii)
2042 q->cleanupSceneGraph();
2047 qCDebug(lcDirty) <<
"QQuickWindowPrivate::updateDirtyNodes():";
2055 while (updateList) {
2058 itemPriv->removeFromDirtyList();
2067 const QList<QQuickItem *> childItems =
d->paintOrderChildItems();
2069 for (
int i=0;
i<childItems.size(); ++
i) {
2073 before = childItems.at(
i);
2082 QList<QQuickItem *> orderedChildren = itemPriv->paintOrderChildItems();
2084 for (; ii < orderedChildren.size() && orderedChildren.at(ii)->z() < 0; ++ii) {
2086 if (!childPrivate->explicitVisible &&
2087 (!childPrivate->extra.isAllocated() || !childPrivate->extra->effectRefCount))
2091 return childPrivate->itemNode();
2094 if (itemPriv->paintNode && !returnedPaintNode) {
2095 returnedPaintNode =
true;
2096 return itemPriv->paintNode;
2099 for (; ii < orderedChildren.size(); ++ii) {
2101 if (!childPrivate->explicitVisible &&
2102 (!childPrivate->extra.isAllocated() || !childPrivate->extra->effectRefCount))
2106 return childPrivate->itemNode();
2115 quint32 dirty = itemPriv->dirtyAttributes;
2116 itemPriv->dirtyAttributes = 0;
2120 (itemPriv->scale() != 1. || itemPriv->rotation() != 0.))) {
2124 if (itemPriv->x != 0. || itemPriv->y != 0.)
2127 for (
int ii = itemPriv->transforms.size() - 1; ii >= 0; --ii)
2128 itemPriv->transforms.at(ii)->applyTo(&
matrix);
2130 if (itemPriv->scale() != 1. || itemPriv->rotation() != 0.) {
2132 matrix.translate(origin.
x(), origin.
y());
2133 if (itemPriv->scale() != 1.)
2134 matrix.scale(itemPriv->scale(), itemPriv->scale());
2135 if (itemPriv->rotation() != 0.)
2136 matrix.rotate(itemPriv->rotation(), 0, 0, 1);
2137 matrix.translate(-origin.
x(), -origin.
y());
2140 itemPriv->itemNode()->setMatrix(
matrix);
2144 if (clipEffectivelyChanged) {
2146 : (
QSGNode *)itemPriv->itemNode();
2149 if (
bool initializeClipNode =
item->clip() && itemPriv->clipNode() ==
nullptr;
2150 initializeClipNode) {
2152 itemPriv->extra.value().clipNode = clip;
2156 parent->reparentChildNodesTo(clip);
2157 parent->appendChildNode(clip);
2161 parent->appendChildNode(clip);
2164 }
else if (
bool updateClipNode =
item->clip() && itemPriv->clipNode() !=
nullptr;
2169 }
else if (
bool removeClipNode = !
item->clip() && itemPriv->clipNode() !=
nullptr;
2172 parent->removeChildNode(clip);
2180 delete itemPriv->clipNode();
2181 itemPriv->extra->clipNode =
nullptr;
2185 const int effectRefCount = itemPriv->extra.isAllocated() ? itemPriv->extra->effectRefCount : 0;
2186 const bool effectRefEffectivelyChanged =
2188 && ((effectRefCount == 0) != (itemPriv->rootNode() ==
nullptr));
2189 if (effectRefEffectivelyChanged) {
2191 itemPriv->childContainerNode()->removeAllChildNodes();
2195 parent = itemPriv->opacityNode();
2197 parent = itemPriv->itemNode();
2199 if (itemPriv->extra.isAllocated() && itemPriv->extra->effectRefCount) {
2200 Q_ASSERT(itemPriv->rootNode() ==
nullptr);
2202 itemPriv->extra->rootNode = root;
2203 parent->reparentChildNodesTo(root);
2204 parent->appendChildNode(root);
2206 Q_ASSERT(itemPriv->rootNode() !=
nullptr);
2208 parent->removeChildNode(root);
2210 delete itemPriv->rootNode();
2211 itemPriv->extra->rootNode =
nullptr;
2217 bool fetchedPaintNode =
false;
2218 QList<QQuickItem *> orderedChildren = itemPriv->paintOrderChildItems();
2219 int desiredNodesSize = orderedChildren.size() + (itemPriv->paintNode ? 1 : 0);
2227 int desiredNodesProcessed = 0;
2232 QSGNode *groupNode = itemPriv->childContainerNode();
2234 QSGNode *desiredNode =
nullptr;
2236 while (currentNode && (desiredNode =
fetchNextNode(itemPriv, ii, fetchedPaintNode))) {
2237 if (currentNode != desiredNode) {
2247 if (desiredNode->parent()) {
2248 desiredNode->parent()->removeChildNode(desiredNode);
2250 groupNode->insertChildNodeBefore(desiredNode, currentNode);
2254 currentNode = desiredNode;
2258 desiredNodesProcessed++;
2264 if (desiredNodesProcessed < desiredNodesSize) {
2265 while ((desiredNode =
fetchNextNode(itemPriv, ii, fetchedPaintNode))) {
2266 if (desiredNode->parent())
2268 groupNode->appendChildNode(desiredNode);
2270 }
else if (currentNode) {
2274 while (currentNode) {
2283 itemPriv->clipNode()->setRect(
item->clipRect());
2284 itemPriv->clipNode()->update();
2290 qreal opacity = itemPriv->explicitVisible && (!itemPriv->extra.isAllocated() || itemPriv->extra->hideRefCount == 0)
2291 ? itemPriv->opacity() :
qreal(0);
2293 if (
opacity != 1 && !itemPriv->opacityNode()) {
2295 itemPriv->extra.value().opacityNode = node;
2300 child = itemPriv->rootNode();
2305 parent->appendChildNode(node);
2307 parent->reparentChildNodesTo(node);
2308 parent->appendChildNode(node);
2311 if (itemPriv->opacityNode())
2312 itemPriv->opacityNode()->setOpacity(
opacity);
2321 Q_ASSERT(itemPriv->paintNode ==
nullptr ||
2322 itemPriv->paintNode->parent() ==
nullptr ||
2323 itemPriv->paintNode->parent() == itemPriv->childContainerNode());
2325 if (itemPriv->paintNode && itemPriv->paintNode->parent() ==
nullptr) {
2327 if (before && before->
parent()) {
2329 itemPriv->childContainerNode()->insertChildNodeAfter(itemPriv->paintNode, before);
2331 itemPriv->childContainerNode()->prependChildNode(itemPriv->paintNode);
2334 }
else if (itemPriv->paintNode) {
2335 delete itemPriv->paintNode;
2336 itemPriv->paintNode =
nullptr;
2343 QList<QSGNode *> nodes;
2344 nodes << itemPriv->itemNodeInstance
2345 << itemPriv->opacityNode()
2346 << itemPriv->clipNode()
2347 << itemPriv->rootNode()
2348 << itemPriv->paintNode;
2349 nodes.removeAll(
nullptr);
2351 Q_ASSERT(nodes.constFirst() == itemPriv->itemNodeInstance);
2352 for (
int i=1;
i<nodes.size(); ++
i) {
2357 Q_ASSERT(
n == itemPriv->paintNode ||
n == itemPriv->childContainerNode() ||
n->childCount() == 1);
2367 if (
q->isSignalConnected(errorSignal)) {
2374void QQuickWindow::maybeUpdate()
2377 if (
d->renderControl)
2379 else if (
d->windowManager)
2380 d->windowManager->maybeUpdate(
this);
2383void QQuickWindow::cleanupSceneGraph()
2389 delete d->renderer->rootNode();
2391 d->renderer =
nullptr;
2393 d->runAndClearJobs(&
d->beforeSynchronizingJobs);
2394 d->runAndClearJobs(&
d->afterSynchronizingJobs);
2395 d->runAndClearJobs(&
d->beforeRenderingJobs);
2396 d->runAndClearJobs(&
d->afterRenderingJobs);
2397 d->runAndClearJobs(&
d->afterSwapJobs);
2402#if QT_CONFIG(opengl)
2417bool QQuickWindow::isSceneGraphInitialized()
const
2420 return d->context !=
nullptr &&
d->context->isValid();
2625 if (
target !=
d->customRenderTarget) {
2626 d->customRenderTarget =
target;
2627 d->redirect.renderTargetDirty =
true;
2642 return d->customRenderTarget;
2646class GrabWindowForProtectedContent :
public QRunnable
2656 bool checkGrabbable()
2670 if (!checkGrabbable())
2675 m_condition->wakeOne();
2707QImage QQuickWindow::grabWindow()
2711 if (!
d->isRenderable() && !
d->renderControl) {
2714 return d->windowManager->grab(
this);
2716 if (!isSceneGraphInitialized()) {
2733 GrabWindowForProtectedContent *job =
new GrabWindowForProtectedContent(
this, &
image, &
condition);
2735 qWarning(
"QQuickWindow::grabWindow: Failed to create a job for capturing protected content");
2739 scheduleRenderJob(job, QQuickWindow::NoStage);
2749 if (
d->renderControl)
2751 else if (
d->windowManager)
2752 return d->windowManager->grab(
this);
2769 if (!
d->windowManager)
2772 if (!
d->incubationController)
2774 return d->incubationController;
3153 return createTextureFromImage(
image, {});
3202QSGTexture *QQuickWindow::createTextureFromImage(
const QImage &
image, CreateTextureOptions options)
const
3205 if (!isSceneGraphInitialized())
3256 t->setHasAlphaChannel(options & QQuickWindow::TextureHasAlphaChannel);
3257 t->setTextureSize(
texture->pixelSize());
3265 int nativeLayoutOrState,
3268 QQuickWindow::CreateTextureOptions options,
3269 TextureFromNativeTextureFlags
flags)
const
3277 texture->setHasAlphaChannel(options & QQuickWindow::TextureHasAlphaChannel);
3279 texture->setOwnsTexture(
true);
3308 if (
color ==
d->clearColor)
3311 if (
color.alpha() !=
d->clearColor.alpha()) {
3313 if (
color.alpha() < 255)
3314 fmt.setAlphaBufferSize(8);
3316 fmt.setAlphaBufferSize(-1);
3326 return d_func()->clearColor;
3335bool QQuickWindow::hasDefaultAlphaBuffer()
3349void QQuickWindow::setDefaultAlphaBuffer(
bool useAlpha)
3417const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()
3421 d->rhiStateInfo.currentFrameSlot =
d->rhi->currentFrameSlot();
3424 return d->rhiStateInfo;
3468void QQuickWindow::beginExternalCommands()
3471 if (
d->rhi &&
d->context &&
d->context->isValid()) {
3475 cb->beginExternal();
3505void QQuickWindow::endExternalCommands()
3508 if (
d->rhi &&
d->context &&
d->context->isValid()) {
3983void QQuickWindow::scheduleRenderJob(
QRunnable *job, RenderStage stage)
3987 d->renderJobMutex.lock();
3988 if (stage == BeforeSynchronizingStage) {
3989 d->beforeSynchronizingJobs << job;
3990 }
else if (stage == AfterSynchronizingStage) {
3991 d->afterSynchronizingJobs << job;
3992 }
else if (stage == BeforeRenderingStage) {
3993 d->beforeRenderingJobs << job;
3994 }
else if (stage == AfterRenderingStage) {
3995 d->afterRenderingJobs << job;
3996 }
else if (stage == AfterSwapStage) {
3997 d->afterSwapJobs << job;
3998 }
else if (stage == NoStage) {
4002 }
else if (isExposed()) {
4003 d->windowManager->postJob(
this, job);
4008 d->renderJobMutex.unlock();
4014 QList<QRunnable *> jobList = *jobs;
4018 for (
QRunnable *
r : std::as_const(jobList)) {
4024void QQuickWindow::runJobsAfterSwap()
4027 d->runAndClearJobs(&
d->afterSwapJobs);
4045qreal QQuickWindow::effectiveDevicePixelRatio()
const
4050 return w->devicePixelRatio();
4052 if (!
d->customRenderTarget.isNull())
4053 return d->customRenderTarget.devicePixelRatio();
4055 return devicePixelRatio();
4089 return d->context->sceneGraphContext()->rendererInterface(
d->context);
4112QRhi *QQuickWindow::rhi()
const
4131 return d->swapchain;
4258void QQuickWindow::setSceneGraphBackend(
const QString &backend)
4275QString QQuickWindow::sceneGraphBackend()
4346 d->customDeviceObjects =
device;
4360 return d->customDeviceObjects;
4407 return d->graphicsConfig;
4419 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createTextNode(
d->context) :
nullptr;
4433 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createRectangleNode() :
nullptr;
4447 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createImageNode() :
nullptr;
4458 return isSceneGraphInitialized() ?
d->context->sceneGraphContext()->createNinePatchNode() :
nullptr;
4469QQuickWindow::TextRenderType QQuickWindow::textRenderType()
4484void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
4509#ifndef QT_NO_DEBUG_STREAM
4515 debug <<
"QQuickWindow(nullptr)";
4519 debug <<
win->metaObject()->className() <<
'(' <<
static_cast<const void *
>(
win);
4520 if (
win->isActive())
4522 if (
win->isExposed())
4523 debug <<
" exposed";
4524 debug <<
", visibility=" <<
win->visibility() <<
", flags=" <<
win->flags();
4525 if (!
win->title().isEmpty())
4526 debug <<
", title=" <<
win->title();
4530 debug <<
", parent=" <<
static_cast<const void *
>(
win->
parent());
4531 if (
win->transientParent())
4532 debug <<
", transientParent=" <<
static_cast<const void *
>(
win->transientParent());
4533 debug <<
", geometry=";
4542#include "qquickwindow.moc"
4543#include "moc_qquickwindow_p.cpp"
4544#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