made wxNativePixelFormat usable under Mac

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20917 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-06-04 00:50:18 +00:00
parent 77a4354e85
commit b6d5d4548c
3 changed files with 29 additions and 37 deletions

View File

@@ -104,7 +104,7 @@
template <class Channel, template <class Channel,
size_t Bpp, int R, int G, int B, int A = -1, size_t Bpp, int R, int G, int B, int A = -1,
class Pixel = wxUint32> class Pixel = wxUint32>
struct WXDLLEXPORT wxPixelFormat struct WXDLLEXPORT wxPixelFormat
{ {
// iterator over pixels is usually of type "ChannelType *" // iterator over pixels is usually of type "ChannelType *"
@@ -120,7 +120,7 @@ struct WXDLLEXPORT wxPixelFormat
enum { BitsPerPixel = Bpp }; enum { BitsPerPixel = Bpp };
// size of one pixel in ChannelType units (usually bytes) // size of one pixel in ChannelType units (usually bytes)
enum { SizePixel = BitsPerPixel / (8 * sizeof(ChannelType)) }; enum { SizePixel = Bpp / (8 * sizeof(Channel)) };
// the channels indices inside the pixel // the channels indices inside the pixel
enum enum
@@ -143,29 +143,27 @@ struct WXDLLEXPORT wxPixelFormat
typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxImagePixelFormat; typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxImagePixelFormat;
// the (most common) native bitmap format without alpha support // the (most common) native bitmap format without alpha support
typedef wxPixelFormat<unsigned char, 24, #if defined(__WXMSW__)
#if defined(__WXMSW__) // under MSW the RGB components are inversed, they're in BGR order
2, 1, 0 typedef wxPixelFormat<unsigned char, 24, 2, 1, 0> wxNativePixelFormat;
#elif defined(__WXMAC__)
1, 2, 3 #define wxPIXEL_FORMAT_ALPHA 3
#else // default for the others (not supported anyhow) #elif defined(__WXMAC__)
0, 1, 2 // under Mac, first component is unused but still present, hence we use
#endif // platform // 32bpp, not 24
> wxNativePixelFormat; typedef wxPixelFormat<unsigned char, 32, 1, 2, 3> wxNativePixelFormat;
#define wxPIXEL_FORMAT_ALPHA 0
#endif
// the (most common) native format for bitmaps with alpha channel // the (most common) native format for bitmaps with alpha channel
typedef wxPixelFormat<unsigned char, 32, #ifdef wxPIXEL_FORMAT_ALPHA
wxNativePixelFormat::RED, typedef wxPixelFormat<unsigned char, 32,
wxNativePixelFormat::GREEN, wxNativePixelFormat::RED,
wxNativePixelFormat::BLUE, wxNativePixelFormat::GREEN,
#if defined(__WXMSW__) wxNativePixelFormat::BLUE,
3 wxPIXEL_FORMAT_ALPHA> wxAlphaPixelFormat;
#elif defined(__WXMAC__) #endif // wxPIXEL_FORMAT_ALPHA
0
#else // default for the others (not supported anyhow)
3
#endif // platform
> wxAlphaPixelFormat;
// we also define the (default/best) pixel format for the given class: this is // we also define the (default/best) pixel format for the given class: this is
// used as default value for the pixel format in wxPixelIterator template // used as default value for the pixel format in wxPixelIterator template

View File

@@ -1349,14 +1349,11 @@ void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap); GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap);
PixMapHandle hPixMap = GetGWorldPixMap(gworld); PixMapHandle hPixMap = GetGWorldPixMap(gworld);
wxCHECK_MSG( hPixMap, NULL, _T("failed to get PixMap from GWorld?") ); wxCHECK_MSG( hPixMap && *hPixMap, NULL,
_T("GetRawData(): failed to get PixMap from GWorld?") );
if ( (*hPixMap)->pixelSize != bpp ) wxCHECK_MSG( (*hPixMap)->pixelSize == bpp, NULL,
{ _T("GetRawData(): pixel format mismatch") );
wxFAIL_MSG( _T("bpp mismatch in GetRawData()") );
return NULL;
}
if ( !LockPixels(hPixMap) ) if ( !LockPixels(hPixMap) )
{ {

View File

@@ -1349,14 +1349,11 @@ void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap); GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap);
PixMapHandle hPixMap = GetGWorldPixMap(gworld); PixMapHandle hPixMap = GetGWorldPixMap(gworld);
wxCHECK_MSG( hPixMap, NULL, _T("failed to get PixMap from GWorld?") ); wxCHECK_MSG( hPixMap && *hPixMap, NULL,
_T("GetRawData(): failed to get PixMap from GWorld?") );
if ( (*hPixMap)->pixelSize != bpp ) wxCHECK_MSG( (*hPixMap)->pixelSize == bpp, NULL,
{ _T("GetRawData(): pixel format mismatch") );
wxFAIL_MSG( _T("bpp mismatch in GetRawData()") );
return NULL;
}
if ( !LockPixels(hPixMap) ) if ( !LockPixels(hPixMap) )
{ {