/*! \reimp */ QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) { Q_UNUSED(data); Q_D(QQuickPaintedItem); if (width() <= 0 || height() <= 0) { delete oldNode; return 0; } QSGPainterNode *node = static_cast<QSGPainterNode *>(oldNode); if (!node) node = new QSGPainterNode(this); QRectF br = contentsBoundingRect(); node->setPreferredRenderTarget(d->renderTarget); node->setFastFBOResizing(d->performanceHints & FastFBOResizing); node->setSize(QSize(qRound(br.width()), qRound(br.height()))); node->setSmoothPainting(d->antialiasing); node->setLinearFiltering(d->smooth); node->setMipmapping(d->mipmap); node->setOpaquePainting(d->opaquePainting); node->setFillColor(d->fillColor); node->setContentsScale(d->contentsScale); node->setDirty(d->dirtyRect); node->update(); d->dirtyRect = QRect(); return node; }
/*! \reimp */ QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) { Q_UNUSED(data); Q_D(QQuickPaintedItem); if (width() <= 0 || height() <= 0) { delete oldNode; if (d->textureProvider) { d->textureProvider->node = 0; d->textureProvider->fireTextureChanged(); } return 0; } QSGPainterNode *node = static_cast<QSGPainterNode *>(oldNode); if (!node) { node = d->sceneGraphContext()->createPainterNode(this); d->node = node; } bool hasTextureSize = d->textureSize.width() > 0 && d->textureSize.height() > 0; // Use the compat mode if any of the compat things are set and // textureSize is 0x0. if (!hasTextureSize && (d->contentsScale != 1 || (d->contentsSize.width() > 0 && d->contentsSize.height() > 0))) { QRectF br = contentsBoundingRect(); node->setContentsScale(d->contentsScale); QSize size = QSize(qRound(br.width()), qRound(br.height())); node->setSize(size); node->setTextureSize(size); } else { // The default, use textureSize or item's size * device pixel ratio node->setContentsScale(1); QSize itemSize(qRound(width()), qRound(height())); node->setSize(itemSize); QSize textureSize = (hasTextureSize ? d->textureSize : itemSize) * window()->effectiveDevicePixelRatio(); node->setTextureSize(textureSize); } node->setPreferredRenderTarget(d->renderTarget); node->setFastFBOResizing(d->performanceHints & FastFBOResizing); node->setSmoothPainting(d->antialiasing); node->setLinearFiltering(d->smooth); node->setMipmapping(d->mipmap); node->setOpaquePainting(d->opaquePainting); node->setFillColor(d->fillColor); node->setDirty(d->dirtyRect); node->update(); d->dirtyRect = QRect(); if (d->textureProvider) { d->textureProvider->node = node; d->textureProvider->fireTextureChanged(); } return node; }