From 4ea56379e36642cc37bef412501bc6043ca0cc4a Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Wed, 1 Dec 2004 21:33:38 +0000 Subject: [PATCH] Added support for static (inlined) wxImages with alpha channel. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30835 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/image.h | 2 ++ src/common/image.cpp | 30 +++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/include/wx/image.h b/include/wx/image.h index 845de80b5b..ceaad75c96 100644 --- a/include/wx/image.h +++ b/include/wx/image.h @@ -139,6 +139,7 @@ public: wxImage(){} wxImage( int width, int height, bool clear = true ); wxImage( int width, int height, unsigned char* data, bool static_data = false ); + wxImage( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false ); wxImage( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 ); wxImage( const wxString& name, const wxString& mimetype, int index = -1 ); @@ -152,6 +153,7 @@ public: bool Create( int width, int height, bool clear = true ); bool Create( int width, int height, unsigned char* data, bool static_data = false ); + bool Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false ); void Destroy(); // creates an identical copy of the image (the = operator diff --git a/src/common/image.cpp b/src/common/image.cpp index a86831b26b..ba3653b18f 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -94,10 +94,11 @@ wxImageRefData::wxImageRefData() wxImageRefData::~wxImageRefData() { - if ( !m_static ) + if (!m_static) + { free( m_data ); - - free(m_alpha); + free( m_alpha ); + } } wxList wxImage::sm_handlers; @@ -120,6 +121,11 @@ wxImage::wxImage( int width, int height, unsigned char* data, bool static_data ) Create( width, height, data, static_data ); } +wxImage::wxImage( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data ) +{ + Create( width, height, data, alpha, static_data ); +} + wxImage::wxImage( const wxString& name, long type, int index ) { LoadFile( name, type, index ); @@ -193,6 +199,24 @@ bool wxImage::Create( int width, int height, unsigned char* data, bool static_da return true; } +bool wxImage::Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data ) +{ + UnRef(); + + wxCHECK_MSG( data, false, _T("NULL data in wxImage::Create") ); + + m_refData = new wxImageRefData(); + + M_IMGDATA->m_data = data; + M_IMGDATA->m_alpha = alpha; + M_IMGDATA->m_width = width; + M_IMGDATA->m_height = height; + M_IMGDATA->m_ok = true; + M_IMGDATA->m_static = static_data; + + return true; +} + void wxImage::Destroy() { UnRef();