Merge branches 'statbmp-bundle', 'upscale-only-bitmap' and 'bitmap-from-icon'

Fixes for wxBitmapBundle behaviour and use it in wxStaticBitmap too now.

See https://github.com/wxWidgets/wxWidgets/pull/2560,
    https://github.com/wxWidgets/wxWidgets/pull/2566,
    https://github.com/wxWidgets/wxWidgets/pull/2567
This commit is contained in:
Vadim Zeitlin
2021-10-26 19:38:21 +02:00
16 changed files with 21 additions and 57 deletions

View File

@@ -223,7 +223,7 @@ public:
#endif // wxUSE_PALETTE
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon) = 0;
bool CopyFromIcon(const wxIcon& icon);
// implementation:
#if WXWIN_COMPATIBILITY_3_0

View File

@@ -63,9 +63,6 @@ public:
virtual void SetPalette(const wxPalette& palette);
#endif
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon);
static void InitStandardHandlers();
// raw bitmap access support functions

View File

@@ -103,9 +103,6 @@ public:
wxImage ConvertToImage() const wxOVERRIDE;
#endif // wxUSE_IMAGE
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon) wxOVERRIDE;
wxMask *GetMask() const wxOVERRIDE;
void SetMask( wxMask *mask ) wxOVERRIDE;

View File

@@ -88,9 +88,6 @@ public:
wxImage ConvertToImage() const;
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon);
wxMask *GetMask() const;
void SetMask( wxMask *mask );

View File

@@ -165,9 +165,6 @@ public:
wxBitmapRefData *GetBitmapData()
{ return (wxBitmapRefData *)m_refData; }
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon) wxOVERRIDE;
int GetWidth() const wxOVERRIDE;
int GetHeight() const wxOVERRIDE;
int GetDepth() const wxOVERRIDE;

View File

@@ -61,9 +61,6 @@ public:
virtual void SetPalette(const wxPalette& palette) wxOVERRIDE;
#endif // wxUSE_PALETTE
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon) wxOVERRIDE;
// implementation:
#if WXWIN_COMPATIBILITY_3_0
wxDEPRECATED(virtual void SetHeight(int height) wxOVERRIDE);

View File

@@ -98,9 +98,6 @@ public:
bool CreateFromImage(const wxImage& image, int depth = -1);
#endif // wxUSE_IMAGE
// copies the contents and mask of the given (colour) icon to the bitmap
virtual bool CopyFromIcon(const wxIcon& icon);
wxMask *GetMask() const;
void SetMask( wxMask *mask );

View File

@@ -196,6 +196,12 @@ public:
wxIMPLEMENT_DYNAMIC_CLASS(wxBitmapBaseModule, wxModule);
bool wxBitmapBase::CopyFromIcon(const wxIcon& icon)
{
*this = icon;
return IsOk();
}
// ----------------------------------------------------------------------------
// Trivial implementations of scale-factor related functions
// ----------------------------------------------------------------------------

View File

@@ -205,7 +205,14 @@ wxSize wxBitmapBundleImplSet::GetPreferredSizeAtScale(double scale) const
// We only get here if the target size is bigger than all the available
// sizes, in which case we have no choice but to use the biggest bitmap.
return m_entries.back().bitmap.GetSize();
const wxSize sizeMax = m_entries.back().bitmap.GetSize();
// But check how far is it from the requested scale: if it's more than 1.5
// times smaller, we should still scale it, notably to ensure that bitmaps
// of standard size are scaled when 2x DPI scaling is used.
return static_cast<double>(sizeTarget.y) / sizeMax.y >= 1.5
? sizeTarget
: sizeMax;
}
wxBitmap wxBitmapBundleImplSet::GetBitmap(const wxSize& size)

View File

@@ -603,12 +603,6 @@ void wxBitmap::SetMask(wxMask *mask)
M_BITMAP->m_mask = mask;
}
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
{
*this = *((wxBitmap*)(&icon));
return true;
}
wxBitmap wxBitmap::GetSubBitmap(const wxRect& rect) const
{
wxCHECK_MSG( IsOk() &&

View File

@@ -988,12 +988,6 @@ void wxBitmap::SetMask( wxMask *mask )
}
}
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
{
*this = icon;
return IsOk();
}
#ifdef __WXGTK3__
bool wxBitmap::CreateScaled(int w, int h, int depth, double scale)
{

View File

@@ -1192,12 +1192,6 @@ void wxBitmap::SetMask( wxMask *mask )
M_BMPDATA->m_mask = mask;
}
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
{
*this = icon;
return true;
}
wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
{
wxCHECK_MSG( IsOk() &&

View File

@@ -782,11 +782,6 @@ wxBitmapRefData::~wxBitmapRefData()
// wxBitmap
// ----------------------------------------------------------------------------
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
{
return Create( icon.OSXGetImage() );
}
wxBitmap::wxBitmap(const char bits[], int the_width, int the_height, int no_bits)
{
m_refData = new wxBitmapRefData( the_width , the_height , no_bits ) ;

View File

@@ -372,13 +372,6 @@ void wxBitmap::SetPalette(const wxPalette& WXUNUSED(palette))
#endif // wxUSE_PALETTE
// copies the contents and mask of the given (colour) icon to the bitmap
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
{
*this = icon;
return IsOk();
}
#if WXWIN_COMPATIBILITY_3_0
void wxBitmap::SetHeight(int height)
{

View File

@@ -993,12 +993,6 @@ void wxBitmap::SetMask( wxMask *mask )
M_BMPDATA->m_mask = mask;
}
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
{
*this = icon;
return true;
}
wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
{
wxCHECK_MSG( IsOk() &&

View File

@@ -57,6 +57,8 @@ TEST_CASE("BitmapBundle::GetPreferredSize", "[bmpbundle]")
const wxBitmapBundle
b = wxBitmapBundle::FromBitmaps(wxBitmap(normal), wxBitmap(bigger));
// Check that the existing bitmaps are used without scaling for most of the
// typical scaling values.
CHECK( b.GetPreferredSizeAtScale(0 ) == normal );
CHECK( b.GetPreferredSizeAtScale(1 ) == normal );
CHECK( b.GetPreferredSizeAtScale(1.25) == normal );
@@ -65,7 +67,10 @@ TEST_CASE("BitmapBundle::GetPreferredSize", "[bmpbundle]")
CHECK( b.GetPreferredSizeAtScale(1.75) == bigger );
CHECK( b.GetPreferredSizeAtScale(2 ) == bigger );
CHECK( b.GetPreferredSizeAtScale(2.5 ) == bigger );
CHECK( b.GetPreferredSizeAtScale(3 ) == bigger );
// This scale is too big to use any of the existing bitmaps, so they will
// be scaled.
CHECK( b.GetPreferredSizeAtScale(3 ) == 3*normal );
}
#ifdef wxHAS_BITMAP_SCALE_FACTOR