alignment of metrics improved and disabled
This commit is contained in:
parent
6c82f1a783
commit
c989c61d3f
@ -8,6 +8,8 @@
|
|||||||
#include "QskControl.h"
|
#include "QskControl.h"
|
||||||
#include "QskEvent.h"
|
#include "QskEvent.h"
|
||||||
#include "QskMargins.h"
|
#include "QskMargins.h"
|
||||||
|
#include "QskBoxBorderMetrics.h"
|
||||||
|
#include "QskBoxShapeMetrics.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
@ -16,12 +18,68 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#define ALIGN_VALUES 0
|
||||||
|
|
||||||
|
#if ALIGN_VALUES
|
||||||
|
|
||||||
static inline qreal qskAligned05( qreal value )
|
static inline qreal qskAligned05( qreal value )
|
||||||
{
|
{
|
||||||
// aligned to 0.5
|
// aligned to 0.5
|
||||||
return qRound( 2.0 * value ) / 2.0;
|
return qRound( 2.0 * value ) / 2.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QSizeF qskAligned05( const QSizeF& size )
|
||||||
|
{
|
||||||
|
return QSizeF( qskAligned05( size.width() ), qskAligned05( size.height() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline QskMargins qskAligned05( const QskMargins& margins )
|
||||||
|
{
|
||||||
|
const qreal left = qskAligned05( margins.left() );
|
||||||
|
const qreal top = qskAligned05( margins.top() );
|
||||||
|
const qreal right = qskAligned05( margins.right() );
|
||||||
|
const qreal bottom = qskAligned05( margins.bottom() );
|
||||||
|
|
||||||
|
return QskMargins( left, top, right, bottom );
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline QVariant qskAligned05( const QVariant& value )
|
||||||
|
{
|
||||||
|
if( value.canConvert< QskBoxBorderMetrics >() )
|
||||||
|
{
|
||||||
|
auto metrics = value.value< QskBoxBorderMetrics >();
|
||||||
|
|
||||||
|
if ( metrics.sizeMode() == Qt::AbsoluteSize )
|
||||||
|
{
|
||||||
|
metrics.setWidths( qskAligned05( metrics.widths() ) );
|
||||||
|
return QVariant::fromValue( metrics );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( value.canConvert< QskBoxShapeMetrics >() )
|
||||||
|
{
|
||||||
|
auto metrics = value.value< QskBoxShapeMetrics >();
|
||||||
|
if ( metrics.sizeMode() == Qt::AbsoluteSize )
|
||||||
|
{
|
||||||
|
for ( int i = Qt::TopLeftCorner; i <= Qt::BottomRightCorner; i++ )
|
||||||
|
{
|
||||||
|
const auto corner = static_cast<Qt::Corner>( i );
|
||||||
|
metrics.setRadius( corner, qskAligned05( metrics.radius( corner ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant::fromValue( metrics );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( value.canConvert< QskMargins >() )
|
||||||
|
{
|
||||||
|
const auto margins = value.value< QskMargins >();
|
||||||
|
return QVariant::fromValue( qskAligned05( margins ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline bool qskCheckReceiverThread( const QObject *receiver )
|
static inline bool qskCheckReceiverThread( const QObject *receiver )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -38,31 +96,6 @@ static inline bool qskCheckReceiverThread( const QObject *receiver )
|
|||||||
return ( thread == QThread::currentThread() );
|
return ( thread == QThread::currentThread() );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline QVariant qskAdjustedValue(
|
|
||||||
QskAspect::Aspect aspect, const QVariant& value )
|
|
||||||
{
|
|
||||||
if( value.type() == QVariant::Double )
|
|
||||||
{
|
|
||||||
if ( aspect.metricPrimitive() != QskAspect::Position )
|
|
||||||
{
|
|
||||||
// all beside QskAspect::Position are real metrics,
|
|
||||||
// that will be aligned to the resolution of the paint device
|
|
||||||
// so we can avoid pointless operations by rounding
|
|
||||||
return qskAligned05( value.toReal() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( value.canConvert< QskMargins >() )
|
|
||||||
{
|
|
||||||
const QskMargins m = value.value< QskMargins >();
|
|
||||||
|
|
||||||
return QVariant::fromValue(
|
|
||||||
QskMargins( qskAligned05( m.left() ), qskAligned05( m.top() ),
|
|
||||||
qskAligned05( m.right() ), qskAligned05( m.bottom() ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QskHintAnimator::QskHintAnimator()
|
QskHintAnimator::QskHintAnimator()
|
||||||
{
|
{
|
||||||
@ -88,7 +121,9 @@ void QskHintAnimator::advance( qreal progress )
|
|||||||
|
|
||||||
Inherited::advance( progress );
|
Inherited::advance( progress );
|
||||||
|
|
||||||
setCurrentValue( qskAdjustedValue( m_aspect, currentValue() ) );
|
#if ALIGN_VALUES
|
||||||
|
setCurrentValue( qskAligned05( currentValue() ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( m_control && ( currentValue() != oldValue ) )
|
if ( m_control && ( currentValue() != oldValue ) )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user