Merge branch 'imaglist-destroy'

Add wxImageList::Destroy() and other minor improvements to this class.

See https://github.com/wxWidgets/wxWidgets/pull/2551
This commit is contained in:
Vadim Zeitlin
2021-10-17 19:38:54 +02:00
5 changed files with 46 additions and 4 deletions

View File

@@ -22,10 +22,11 @@ class WXDLLIMPEXP_FWD_CORE wxColour;
class WXDLLIMPEXP_CORE wxGenericImageList: public wxObject
{
public:
wxGenericImageList() { }
wxGenericImageList();
wxGenericImageList( int width, int height, bool mask = true, int initialCount = 1 );
virtual ~wxGenericImageList();
bool Create( int width, int height, bool mask = true, int initialCount = 1 );
void Destroy();
virtual int GetImageCount() const;
virtual bool GetSize( int index, int &width, int &height ) const;

View File

@@ -32,6 +32,7 @@ public:
// from icons), and the initial size of the list.
wxImageList(int width, int height, bool mask = true, int initialCount = 1)
{
m_hImageList = 0;
Create(width, height, mask, initialCount);
}
virtual ~wxImageList();
@@ -58,6 +59,9 @@ public:
// initialNumber is the initial number of images to reserve.
bool Create(int width, int height, bool mask = true, int initialNumber = 1);
// Destroys the image list, Create() may then be called again later.
void Destroy();
// Adds a bitmap, and optionally a mask bitmap.
// Note that wxImageList creates *new* bitmaps, so you may delete
// 'bitmap' and 'mask' after calling Add.

View File

@@ -124,11 +124,29 @@ public:
int Add(const wxIcon& icon);
/**
Initializes the list. See wxImageList() for details.
Initializes the list.
See wxImageList() for details.
This function can be called only once after creating the object using
its default ctor or after calling Destroy().
*/
bool Create(int width, int height, bool mask = true,
int initialCount = 1);
/**
Destroys the current list.
This function resets the object to its initial state and does more than
just RemoveAll() in the native wxMSW version.
After calling it, Create() may be called again to recreate the image
list, e.g. using a different size.
@since 3.1.6
*/
void Destroy();
/**
Draws a specified image onto a device context.

View File

@@ -29,14 +29,26 @@
wxIMPLEMENT_DYNAMIC_CLASS(wxGenericImageList, wxObject);
wxIMPLEMENT_DYNAMIC_CLASS(wxImageList, wxGenericImageList);
wxGenericImageList::wxGenericImageList()
{
Create(0, 0, false);
}
wxGenericImageList::wxGenericImageList( int width, int height, bool mask, int initialCount )
{
(void)Create(width, height, mask, initialCount);
}
wxGenericImageList::~wxGenericImageList()
void wxGenericImageList::Destroy()
{
(void)RemoveAll();
// Make it invalid.
m_size = wxSize(0, 0);
}
wxGenericImageList::~wxGenericImageList()
{
}
int wxGenericImageList::GetImageCount() const

View File

@@ -73,6 +73,8 @@ wxImageList::wxImageList()
// Creates an image list
bool wxImageList::Create(int width, int height, bool mask, int initial)
{
wxASSERT_MSG( m_hImageList == NULL, "Recreating existing wxImageList?" );
// Prevent from storing negative dimensions
m_size = wxSize(wxMax(width, 0), wxMax(height, 0));
UINT flags = 0;
@@ -100,7 +102,7 @@ bool wxImageList::Create(int width, int height, bool mask, int initial)
return m_hImageList != 0;
}
wxImageList::~wxImageList()
void wxImageList::Destroy()
{
if ( m_hImageList )
{
@@ -109,6 +111,11 @@ wxImageList::~wxImageList()
}
}
wxImageList::~wxImageList()
{
Destroy();
}
// ----------------------------------------------------------------------------
// wxImageList attributes
// ----------------------------------------------------------------------------