initial attempts to get raw bitmaps working under Mac

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20878 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-06-03 00:44:43 +00:00
parent eb7f8ac545
commit 55e18dbe2f
3 changed files with 285 additions and 151 deletions

View File

@@ -19,13 +19,14 @@
#include "wx/palette.h"
// Bitmap
class WXDLLEXPORT wxDC;
class WXDLLEXPORT wxControl;
class WXDLLEXPORT wxBitmap;
class WXDLLEXPORT wxBitmapHandler;
class WXDLLEXPORT wxIcon;
class WXDLLEXPORT wxControl;
class WXDLLEXPORT wxCursor;
class WXDLLEXPORT wxDC;
class WXDLLEXPORT wxIcon;
class WXDLLEXPORT wxImage;
class WXDLLEXPORT wxPixelDataBase;
// A mask is a bitmap used for drawing bitmaps
// it can be a monochrome bitmap or a multi-bit bitmap which transfers to alpha channels
@@ -197,6 +198,13 @@ public:
inline bool operator != (const wxBitmap& bitmap) const { return m_refData != bitmap.m_refData; }
static void InitStandardHandlers();
// raw bitmap access support functions
void *GetRawData(wxPixelDataBase& data, int bpp);
void UngetRawData(wxPixelDataBase& data);
void UseAlpha();
public:
WXHBITMAP GetHBITMAP() const;
inline WXHICON GetHICON() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_hIcon : 0); }

View File

@@ -21,6 +21,8 @@
#include "wx/image.h"
#include "wx/xpmdecod.h"
#include "wx/rawbmp.h"
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject )
@@ -1325,3 +1327,64 @@ void wxBitmap::InitStandardHandlers()
AddHandler(new wxPICTResourceHandler) ;
AddHandler(new wxICONResourceHandler) ;
}
// ----------------------------------------------------------------------------
// raw bitmap access support
// ----------------------------------------------------------------------------
void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
{
if ( !Ok() )
{
// no bitmap, no data (raw or otherwise)
return NULL;
}
if ( M_BITMAPDATA->m_bitmapType != kMacBitmapTypeGrafWorld )
{
wxFAIL_MSG( _T("GetRawData() only supported for GWorlds") );
return NULL;
}
GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap);
PixMapHandle hPixMap = GetGWorldPixMap(gworld);
wxCHECK_MSG( hPixMap, NULL, _T("failed to get PixMap from GWorld?") );
if ( (*hPixMap)->pixelSize != bpp )
{
wxFAIL_MSG( _T("bpp mismatch in GetRawData()") );
return NULL;
}
if ( !LockPixels(hPixMap) )
{
wxFAIL_MSG( _T("failed to lock PixMap in GetRawData()") );
return NULL;
}
data.m_width = GetWidth();
data.m_height = GetHeight();
data.m_stride = (*hPixMap)->rowBytes & 0x7fff;
return GetPixBaseAddr(hPixMap);
}
void wxBitmap::UngetRawData(wxPixelDataBase& data)
{
if ( !Ok() )
return;
GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap);
PixMapHandle hPixMap = GetGWorldPixMap(gworld);
if ( hPixMap )
UnlockPixels(hPixMap);
}
void wxBitmap::UseAlpha()
{
// nothing to do here so far
}

View File

@@ -21,6 +21,8 @@
#include "wx/image.h"
#include "wx/xpmdecod.h"
#include "wx/rawbmp.h"
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject )
@@ -1325,3 +1327,64 @@ void wxBitmap::InitStandardHandlers()
AddHandler(new wxPICTResourceHandler) ;
AddHandler(new wxICONResourceHandler) ;
}
// ----------------------------------------------------------------------------
// raw bitmap access support
// ----------------------------------------------------------------------------
void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
{
if ( !Ok() )
{
// no bitmap, no data (raw or otherwise)
return NULL;
}
if ( M_BITMAPDATA->m_bitmapType != kMacBitmapTypeGrafWorld )
{
wxFAIL_MSG( _T("GetRawData() only supported for GWorlds") );
return NULL;
}
GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap);
PixMapHandle hPixMap = GetGWorldPixMap(gworld);
wxCHECK_MSG( hPixMap, NULL, _T("failed to get PixMap from GWorld?") );
if ( (*hPixMap)->pixelSize != bpp )
{
wxFAIL_MSG( _T("bpp mismatch in GetRawData()") );
return NULL;
}
if ( !LockPixels(hPixMap) )
{
wxFAIL_MSG( _T("failed to lock PixMap in GetRawData()") );
return NULL;
}
data.m_width = GetWidth();
data.m_height = GetHeight();
data.m_stride = (*hPixMap)->rowBytes & 0x7fff;
return GetPixBaseAddr(hPixMap);
}
void wxBitmap::UngetRawData(wxPixelDataBase& data)
{
if ( !Ok() )
return;
GWorldPtr gworld = MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap);
PixMapHandle hPixMap = GetGWorldPixMap(gworld);
if ( hPixMap )
UnlockPixels(hPixMap);
}
void wxBitmap::UseAlpha()
{
// nothing to do here so far
}