[Misc] QskGraphicLabel::Stretch mode fixed
This commit is contained in:
parent
960df371b1
commit
dd109b1283
@ -7,6 +7,7 @@
|
||||
#include "QskGraphicLabel.h"
|
||||
#include "QskGraphic.h"
|
||||
#include "QskGraphicTextureFactory.h"
|
||||
#include "QskGraphicNode.h"
|
||||
#include "QskAspect.h"
|
||||
#include "QskSkin.h"
|
||||
#include "QskTextureNode.h"
|
||||
@ -80,10 +81,19 @@ QSGNode* QskGraphicLabelSkinlet::updateSubNode(
|
||||
QSGNode* QskGraphicLabelSkinlet::updateGraphicNode(
|
||||
const QskGraphicLabel* label, QSGNode* node ) const
|
||||
{
|
||||
const QRectF rect = subControlRect( label, QskGraphicLabel::Graphic );
|
||||
const auto colorFilter = label->graphicFilter();
|
||||
const auto rect = subControlRect( label, QskGraphicLabel::Graphic );
|
||||
|
||||
node = QskSkinlet::updateGraphicNode( label, node,
|
||||
label->graphic(), label->graphicFilter(), rect, Qt::AlignCenter );
|
||||
if ( label->fillMode() == QskGraphicLabel::Stretch )
|
||||
{
|
||||
node = QskSkinlet::updateGraphicNode( label, node,
|
||||
label->graphic(), colorFilter, rect );
|
||||
}
|
||||
else
|
||||
{
|
||||
node = QskSkinlet::updateGraphicNode( label, node,
|
||||
label->graphic(), colorFilter, rect, Qt::AlignCenter );
|
||||
}
|
||||
|
||||
if ( node && label->mirror() )
|
||||
{
|
||||
|
@ -56,15 +56,23 @@ static inline QSGNode* qskFindNodeByFlag( QSGNode* parent, int nodeRole )
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static inline QskGraphicTextureFactory::RenderMode qskRenderMode(
|
||||
const QskSkinnable* skinnable )
|
||||
static inline QSGNode* qskUpdateGraphicNode(
|
||||
const QskSkinnable* skinnable, QSGNode* node,
|
||||
const QskGraphic& graphic, const QskColorFilter& colorFilter,
|
||||
const QRect& rect )
|
||||
{
|
||||
const QskControl* control = skinnable->owningControl();
|
||||
auto mode = QskGraphicTextureFactory::OpenGL;
|
||||
|
||||
if ( control->testControlFlag( QskControl::PreferRasterForTextures ) )
|
||||
return QskGraphicTextureFactory::Raster;
|
||||
else
|
||||
return QskGraphicTextureFactory::OpenGL;
|
||||
const QskControl* control = skinnable->owningControl();
|
||||
if ( control && control->testControlFlag( QskControl::PreferRasterForTextures ) )
|
||||
mode = QskGraphicTextureFactory::Raster;
|
||||
|
||||
auto graphicNode = static_cast< QskGraphicNode* >( node );
|
||||
if ( graphicNode == nullptr )
|
||||
graphicNode = new QskGraphicNode();
|
||||
|
||||
graphicNode->setGraphic( graphic, colorFilter, mode, rect );
|
||||
return graphicNode;
|
||||
}
|
||||
|
||||
class QskSkinlet::PrivateData
|
||||
@ -411,30 +419,23 @@ QSGNode* QskSkinlet::updateTextNode(
|
||||
|
||||
QSGNode* QskSkinlet::updateGraphicNode(
|
||||
const QskSkinnable* skinnable, QSGNode* node,
|
||||
const QskGraphic& graphic, const QRectF& rect,
|
||||
QskAspect::Subcontrol subcontrol ) const
|
||||
const QskGraphic& graphic, QskAspect::Subcontrol subcontrol ) const
|
||||
{
|
||||
const QRectF rect = subControlRect( skinnable, subcontrol );
|
||||
|
||||
const Qt::Alignment alignment = skinnable->flagHint< Qt::Alignment >(
|
||||
subcontrol | QskAspect::Alignment, Qt::AlignCenter );
|
||||
|
||||
|
||||
const auto colorFilter = skinnable->effectiveGraphicFilter( subcontrol );
|
||||
|
||||
|
||||
return updateGraphicNode( skinnable, node,
|
||||
graphic, colorFilter, rect, alignment );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateGraphicNode(
|
||||
const QskSkinnable* skinnable, QSGNode* node,
|
||||
const QskGraphic& graphic, QskAspect::Subcontrol subcontrol ) const
|
||||
{
|
||||
return updateGraphicNode( skinnable, node, graphic,
|
||||
subControlRect( skinnable, subcontrol ), subcontrol );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateGraphicNode(
|
||||
const QskSkinnable* skinnable, QSGNode* node, const QskGraphic& graphic,
|
||||
const QskColorFilter& colorFilter, const QRectF& rect,
|
||||
Qt::Alignment alignment ) const
|
||||
const QskGraphic& graphic, const QskColorFilter& colorFilter,
|
||||
const QRectF& rect, Qt::Alignment alignment ) const
|
||||
{
|
||||
if ( graphic.isNull() )
|
||||
return nullptr;
|
||||
@ -445,12 +446,19 @@ QSGNode* QskSkinlet::updateGraphicNode(
|
||||
const QRect r = qskAlignedRect( qskInnerRect( rect ),
|
||||
int( scaledSize.width() ), int( scaledSize.height() ), alignment );
|
||||
|
||||
auto graphicNode = static_cast< QskGraphicNode* >( node );
|
||||
if ( graphicNode == nullptr )
|
||||
graphicNode = new QskGraphicNode();
|
||||
|
||||
graphicNode->setGraphic( graphic, colorFilter, qskRenderMode( skinnable ), r );
|
||||
return graphicNode;
|
||||
return qskUpdateGraphicNode( skinnable, node, graphic, colorFilter, r );
|
||||
}
|
||||
|
||||
QSGNode* QskSkinlet::updateGraphicNode(
|
||||
const QskSkinnable* skinnable, QSGNode* node,
|
||||
const QskGraphic& graphic, const QskColorFilter& colorFilter,
|
||||
const QRectF& rect ) const
|
||||
{
|
||||
if ( graphic.isNull() )
|
||||
return nullptr;
|
||||
|
||||
return qskUpdateGraphicNode( skinnable, node,
|
||||
graphic, colorFilter, rect.toAlignedRect() );
|
||||
}
|
||||
|
||||
#include "moc_QskSkinlet.cpp"
|
||||
|
@ -75,16 +75,18 @@ protected:
|
||||
QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
|
||||
const QString&, const QskTextOptions&, QskAspect::Subcontrol ) const;
|
||||
|
||||
QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
|
||||
const QskGraphic&, const QRectF& , QskAspect::Subcontrol ) const;
|
||||
|
||||
QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
|
||||
const QskGraphic&, QskAspect::Subcontrol ) const;
|
||||
|
||||
// keeping the aspect ratio
|
||||
QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
|
||||
const QskGraphic&, const QskColorFilter&,
|
||||
const QRectF&, Qt::Alignment ) const;
|
||||
|
||||
// stretching to fit
|
||||
QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
|
||||
const QskGraphic&, const QskColorFilter&, const QRectF& ) const;
|
||||
|
||||
void insertRemoveNodes( QSGNode* parentNode,
|
||||
QSGNode* oldNode, QSGNode* newNode, int nodeRole ) const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user