diff --git a/src/common/bmpbndl.cpp b/src/common/bmpbndl.cpp index bd00552003..9b376a230c 100644 --- a/src/common/bmpbndl.cpp +++ b/src/common/bmpbndl.cpp @@ -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. diff --git a/tests/graphics/bmpbundle.cpp b/tests/graphics/bmpbundle.cpp index 17367b02b4..5d9da96b44 100644 --- a/tests/graphics/bmpbundle.cpp +++ b/tests/graphics/bmpbundle.cpp @@ -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 ); }