code improved

This commit is contained in:
Uwe Rathmann 2020-10-31 08:06:41 +01:00
parent b1e37876a6
commit b004e6d8d5
1 changed files with 17 additions and 18 deletions

View File

@ -77,32 +77,31 @@ static inline QSGNode* qskUpdateGraphicNode(
if ( rect.isEmpty() ) if ( rect.isEmpty() )
return nullptr; return nullptr;
const auto control = skinnable->owningControl();
if ( control == nullptr )
return nullptr;
auto mode = QskTextureRenderer::OpenGL; auto mode = QskTextureRenderer::OpenGL;
auto graphicNode = static_cast< QskGraphicNode* >( node ); auto graphicNode = static_cast< QskGraphicNode* >( node );
if ( graphicNode == nullptr ) if ( graphicNode == nullptr )
graphicNode = new QskGraphicNode(); graphicNode = new QskGraphicNode();
QRectF r = rect; if ( control->testControlFlag( QskControl::PreferRasterForTextures ) )
mode = QskTextureRenderer::Raster;
if ( const auto control = skinnable->owningControl() ) /*
{ Aligning the rect according to scene coordinates, so that
if ( control->testControlFlag( QskControl::PreferRasterForTextures ) ) we don't run into rounding issues downstream, where values
mode = QskTextureRenderer::Raster; will be floored/ceiled ending up with a slightly different
aspect ratio.
*/
QRectF r(
control->mapToScene( rect.topLeft() ),
rect.size() * QskTextureRenderer::devicePixelRatio() );
/* r = qskInnerRect( r );
Aligning the rect according to scene coordinates, so that r.moveTopLeft( control->mapFromScene( r.topLeft() ) );
we don't run into rounding issues downstream, where values
will be floored/ceiled ending up with a slightly different
aspect ratio.
*/
const QRectF sceneRect(
control->mapToScene( r.topLeft() ),
r.size() * QskTextureRenderer::devicePixelRatio() );
r = qskInnerRect( sceneRect );
r.moveTopLeft( control->mapFromScene( r.topLeft() ) );
}
graphicNode->setGraphic( graphic, colorFilter, mode, r ); graphicNode->setGraphic( graphic, colorFilter, mode, r );