265void QQuickPaintedItem::setPerformanceHint(QQuickPaintedItem::PerformanceHint hint,
bool enabled)
267 Q_D(QQuickPaintedItem);
268 PerformanceHints oldHints = d->performanceHints;
270 d->performanceHints |= hint;
272 d->performanceHints &= ~hint;
273 if (oldHints != d->performanceHints)
508QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
511 Q_D(QQuickPaintedItem);
513 if (width() <= 0 || height() <= 0) {
515 if (d->textureProvider) {
516 d->textureProvider->node =
nullptr;
517 d->textureProvider->fireTextureChanged();
522 QSGPainterNode *node =
static_cast<QSGPainterNode *>(oldNode);
524 node = d->sceneGraphContext()->createPainterNode(
this);
528 bool hasTextureSize = d->textureSize.width() > 0 && d->textureSize.height() > 0;
533 && (d->contentsScale != 1
534 || (d->contentsSize.width() > 0 && d->contentsSize.height() > 0))) {
535 QRectF br = contentsBoundingRect();
536 node->setContentsScale(d->contentsScale);
537 QSize size = QSize(qRound(br.width()), qRound(br.height()));
539 node->setTextureSize(size);
542 node->setContentsScale(1);
543 QSize itemSize(qRound(width()), qRound(height()));
544 node->setSize(itemSize);
545 QSize textureSize = (hasTextureSize ? d->textureSize : itemSize)
546 * d->effectiveDevicePixelRatio();
547 node->setTextureSize(textureSize);
550 node->setPreferredRenderTarget(d->renderTarget);
551 node->setFastFBOResizing(d->performanceHints & FastFBOResizing);
552 node->setSmoothPainting(antialiasing());
553 node->setLinearFiltering(d->smooth);
554 node->setMipmapping(d->mipmap);
555 node->setOpaquePainting(d->opaquePainting);
556 node->setFillColor(d->fillColor);
557 node->setDirty(d->dirtyRect);
560 d->dirtyRect = QRect();
562 if (d->textureProvider) {
563 d->textureProvider->node = node;
564 d->textureProvider->fireTextureChanged();
602QSGTextureProvider *QQuickPaintedItem::textureProvider()
const
608 if (QQuickItem::isTextureProvider())
609 return QQuickItem::textureProvider();
611 Q_D(
const QQuickPaintedItem);
612 QQuickWindow *w = window();
613 if (!w || !w->isSceneGraphInitialized() || QThread::currentThread() != d->sceneGraphContext()->thread()) {
614 qWarning(
"QQuickPaintedItem::textureProvider: can only be queried on the rendering thread of an exposed window");
617 if (!d->textureProvider)
618 d->textureProvider =
new QQuickPaintedItemTextureProvider();
619 d->textureProvider->node = d->node;
620 return d->textureProvider;
void fireTextureChanged()
QSGTexture * texture() const override
Returns a pointer to the texture object.