using the scene root node
This commit is contained in:
parent
7615cffdd4
commit
048e76d021
|
@ -8,6 +8,8 @@
|
||||||
#include "SceneTexture.h"
|
#include "SceneTexture.h"
|
||||||
|
|
||||||
#include <private/qquickitem_p.h>
|
#include <private/qquickitem_p.h>
|
||||||
|
#include <private/qquickwindow_p.h>
|
||||||
|
#include <private/qsgrenderer_p.h>
|
||||||
#include <private/qquickitemchangelistener_p.h>
|
#include <private/qquickitemchangelistener_p.h>
|
||||||
|
|
||||||
#include <qpointer.h>
|
#include <qpointer.h>
|
||||||
|
@ -63,12 +65,16 @@ class OverlayPrivate final : public QQuickItemPrivate, public QQuickItemChangeLi
|
||||||
|
|
||||||
QSGRootNode* grabbedNode()
|
QSGRootNode* grabbedNode()
|
||||||
{
|
{
|
||||||
|
if ( grabbedItem )
|
||||||
return grabbedItem ? get( grabbedItem )->rootNode() : nullptr;
|
return grabbedItem ? get( grabbedItem )->rootNode() : nullptr;
|
||||||
|
|
||||||
|
if ( auto window = q_func()->window() )
|
||||||
|
{
|
||||||
|
if ( auto renderer = QQuickWindowPrivate::get( window )->renderer )
|
||||||
|
return renderer->rootNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
QSGTransformNode* grabbedItemNode()
|
return nullptr;
|
||||||
{
|
|
||||||
return grabbedItem ? get( grabbedItem )->itemNode() : nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QPointer< QQuickItem > grabbedItem;
|
QPointer< QQuickItem > grabbedItem;
|
||||||
|
@ -110,8 +116,6 @@ void Overlay::geometryChange(
|
||||||
const QRectF& newGeometry, const QRectF& oldGeometry )
|
const QRectF& newGeometry, const QRectF& oldGeometry )
|
||||||
{
|
{
|
||||||
Inherited::geometryChange( newGeometry, oldGeometry );
|
Inherited::geometryChange( newGeometry, oldGeometry );
|
||||||
|
|
||||||
if ( d_func()->grabbedItem )
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +123,12 @@ QSGNode* Overlay::updatePaintNode( QSGNode* oldNode, UpdatePaintNodeData* )
|
||||||
{
|
{
|
||||||
Q_D( Overlay );
|
Q_D( Overlay );
|
||||||
|
|
||||||
if ( d->grabbedItemNode() == nullptr || size().isEmpty() )
|
auto grabbedNode = d->grabbedNode();
|
||||||
|
|
||||||
|
if ( grabbedNode == nullptr )
|
||||||
|
QMetaObject::invokeMethod( this, &QQuickItem::update );
|
||||||
|
|
||||||
|
if ( grabbedNode == nullptr || size().isEmpty() )
|
||||||
{
|
{
|
||||||
delete oldNode;
|
delete oldNode;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -146,7 +155,7 @@ QSGNode* Overlay::updatePaintNode( QSGNode* oldNode, UpdatePaintNodeData* )
|
||||||
auto texture = static_cast< SceneTexture* >( node->texture() );
|
auto texture = static_cast< SceneTexture* >( node->texture() );
|
||||||
texture->setFiltering( smooth() ? QSGTexture::Linear : QSGTexture::Nearest );
|
texture->setFiltering( smooth() ? QSGTexture::Linear : QSGTexture::Nearest );
|
||||||
|
|
||||||
texture->render( d->grabbedNode(), itemNode,
|
texture->render( grabbedNode, itemNode,
|
||||||
QRectF( x(), y(), width(), height() ) );
|
QRectF( x(), y(), width(), height() ) );
|
||||||
|
|
||||||
itemNode->isBlocked = false;
|
itemNode->isBlocked = false;
|
||||||
|
|
|
@ -50,8 +50,6 @@ class OverlayBox : public Overlay
|
||||||
OverlayBox( QQuickItem* parent = nullptr )
|
OverlayBox( QQuickItem* parent = nullptr )
|
||||||
: Inherited( parent )
|
: Inherited( parent )
|
||||||
{
|
{
|
||||||
if ( parent )
|
|
||||||
setGrabbedItem( parent );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Reference in New Issue