Break the tie in favour of smaller bitmaps at 1.5x factor
Prefer to use 1x bitmap to 2x one at 150% scaling, as it seems better to use smaller (but still readable) bitmaps than overlarge ones in this case.
This commit is contained in:
@@ -721,10 +721,11 @@ wxBitmapBundleImpl::DoGetPreferredSize(double scaleTarget,
|
||||
|
||||
// Decide whether we should use this one or the previous smaller one
|
||||
// depending on which of them is closer to the target size, breaking
|
||||
// the tie in favour of the bigger size.
|
||||
// the tie in favour of the smaller size as it's arguably better to use
|
||||
// slightly smaller bitmaps than too big ones.
|
||||
const double scaleLast = availableScales[i - 1];
|
||||
|
||||
scaleBest = scaleThis - scaleTarget <= scaleTarget - scaleLast
|
||||
scaleBest = scaleThis - scaleTarget < scaleTarget - scaleLast
|
||||
? scaleThis
|
||||
: scaleLast;
|
||||
break;
|
||||
@@ -740,7 +741,7 @@ wxBitmapBundleImpl::DoGetPreferredSize(double scaleTarget,
|
||||
// But check how far is it from the requested scale: if it's more than
|
||||
// 1.5 times larger, we should still scale it, notably to ensure that
|
||||
// bitmaps of standard size are scaled when 2x DPI scaling is used.
|
||||
if ( scaleTarget >= 1.5*scaleMax )
|
||||
if ( scaleTarget > 1.5*scaleMax )
|
||||
{
|
||||
// However scaling by non-integer scales doesn't work well at all, so
|
||||
// round it to the closest integer in this case.
|
||||
|
||||
@@ -69,10 +69,10 @@ TEST_CASE("BitmapBundle::GetPreferredSize", "[bmpbundle]")
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1 ) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.25) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.4 ) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.5 ) == normal );
|
||||
|
||||
// Once it becomes too big, we're going to need to scale, but we should be
|
||||
// scaling by an integer factor.
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.5 ) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.75) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(2 ) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(2.25) == bigger );
|
||||
@@ -88,14 +88,14 @@ TEST_CASE("BitmapBundle::GetPreferredSize", "[bmpbundle]")
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1 ) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.25) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.4 ) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.5 ) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.5 ) == normal );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(1.75) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(2 ) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(2.5 ) == bigger );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(3 ) == bigger );
|
||||
|
||||
// This scale is too big to use any of the existing bitmaps, so they will
|
||||
// be scaled, but use integer factors.
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(3 ) == triple );
|
||||
CHECK( b.GetPreferredBitmapSizeAtScale(3.33) == triple );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user