only clip at the top border

This commit is contained in:
Uwe Rathmann 2022-06-17 09:24:58 +02:00
parent 54616a5781
commit 112221f123

View File

@ -9,6 +9,7 @@
#include <qtransform.h>
#include <qsgnode.h>
#include <qquickwindow.h>
namespace
{
@ -24,22 +25,20 @@ namespace
void setClipRect( const QRectF& rect )
{
if ( rect.isValid() )
if ( m_clipNode == nullptr )
{
if ( m_clipNode == nullptr )
{
m_clipNode = new QSGClipNode();
m_clipNode->setFlag( QSGNode::OwnedByParent, false );
m_clipNode->setIsRectangular( true );
}
m_clipNode = new QSGClipNode();
m_clipNode->setFlag( QSGNode::OwnedByParent, false );
m_clipNode->setIsRectangular( true );
}
m_clipNode->setClipRect( rect );
}
else
{
delete m_clipNode;
m_clipNode = nullptr;
}
m_clipNode->setClipRect( rect );
}
void resetClip()
{
delete m_clipNode;
m_clipNode = nullptr;
}
void setTranslation( qreal dx, qreal dy )
@ -149,8 +148,17 @@ QSGNode* QskPopupSkinlet::updateExtraNode( const QskPopup* popup, QSGNode* node
auto rootNode = QskSGNode::ensureNode< RootNode >( node );
const auto faderProgress = popup->metric( popup->faderAspect() );
if ( faderProgress > 0.0 && faderProgress < 1.0 )
rootNode->setClipRect( cr );
if ( faderProgress > 0.0 && faderProgress <= 1.0 )
{
auto clipRect = QRectF( popup->mapFromScene( QPointF() ), popup->window()->size() );
clipRect.setTop( cr.top() );
rootNode->setClipRect( clipRect );
}
else
{
rootNode->resetClip();
}
rootNode->setTranslation( 0.0, -faderProgress * cr.height() );