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:
@@ -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); }
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user