elliptic scaling fixed

This commit is contained in:
Uwe Rathmann 2023-02-04 11:55:37 +01:00
parent 1dcdca3489
commit 67b10cca0a

View File

@ -89,45 +89,32 @@ QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const no
if ( m_sizeMode != Qt::RelativeSize ) if ( m_sizeMode != Qt::RelativeSize )
return *this; return *this;
QskBoxShapeMetrics absoluted = *this;
absoluted.m_sizeMode = Qt::AbsoluteSize;
if ( size.isEmpty() ) if ( size.isEmpty() )
{ return QskBoxShapeMetrics();
for ( int i = 0; i < 4; i++ )
absoluted.m_radii[ i ] = QSizeF( 0.0, 0.0 );
return absoluted; QskBoxShapeMetrics shape = *this;
shape.m_sizeMode = Qt::AbsoluteSize;
for ( int i = 0; i < 4; i++ )
{
auto& radius = shape.m_radii[ i ];
if ( radius.isEmpty() )
{
radius.rheight() = radius.rwidth() = 0.0;
continue;
} }
const qreal rx = qskAbsoluted( size.width(), radius.width() );
const qreal ry = qskAbsoluted( size.height(), radius.height() );
if ( m_scalingMode == Circular ) if ( m_scalingMode == Circular )
{ {
for ( int i = 0; i < 4; i++ )
{
auto& radius = absoluted.m_radii[ i ];
const qreal rx = qskAbsoluted( size.width(), radius.width() );
const qreal ry = qskAbsoluted( size.height(), radius.height() );
radius.rheight() = radius.rwidth() = std::min( rx, ry ); radius.rheight() = radius.rwidth() = std::min( rx, ry );
} }
}
else else
{ {
const auto ratio = size.height() / size.width(); const auto ratio = radius.height() / radius.width();
for ( int i = 0; i < 4; i++ )
{
auto& radius = absoluted.m_radii[ i ];
const qreal rx = qskAbsoluted( size.width(), radius.width() );
const qreal ry = qskAbsoluted( size.height(), radius.height() );
if ( rx <= 0.0 || ry <= 0.0 )
{
radius.rwidth() = radius.rheight() = 0.0;
continue;
}
if ( ratio >= 1.0 ) if ( ratio >= 1.0 )
{ {
@ -142,7 +129,7 @@ QskBoxShapeMetrics QskBoxShapeMetrics::toAbsolute( const QSizeF& size ) const no
} }
} }
return absoluted; return shape;
} }
QskBoxShapeMetrics QskBoxShapeMetrics::interpolated( QskBoxShapeMetrics QskBoxShapeMetrics::interpolated(