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"
|
#include "wx/palette.h"
|
||||||
|
|
||||||
// Bitmap
|
// Bitmap
|
||||||
class WXDLLEXPORT wxDC;
|
|
||||||
class WXDLLEXPORT wxControl;
|
|
||||||
class WXDLLEXPORT wxBitmap;
|
class WXDLLEXPORT wxBitmap;
|
||||||
class WXDLLEXPORT wxBitmapHandler;
|
class WXDLLEXPORT wxBitmapHandler;
|
||||||
class WXDLLEXPORT wxIcon;
|
class WXDLLEXPORT wxControl;
|
||||||
class WXDLLEXPORT wxCursor;
|
class WXDLLEXPORT wxCursor;
|
||||||
|
class WXDLLEXPORT wxDC;
|
||||||
|
class WXDLLEXPORT wxIcon;
|
||||||
class WXDLLEXPORT wxImage;
|
class WXDLLEXPORT wxImage;
|
||||||
|
class WXDLLEXPORT wxPixelDataBase;
|
||||||
|
|
||||||
// A mask is a bitmap used for drawing bitmaps
|
// 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
|
// 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; }
|
inline bool operator != (const wxBitmap& bitmap) const { return m_refData != bitmap.m_refData; }
|
||||||
|
|
||||||
static void InitStandardHandlers();
|
static void InitStandardHandlers();
|
||||||
|
|
||||||
|
// raw bitmap access support functions
|
||||||
|
void *GetRawData(wxPixelDataBase& data, int bpp);
|
||||||
|
void UngetRawData(wxPixelDataBase& data);
|
||||||
|
|
||||||
|
void UseAlpha();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WXHBITMAP GetHBITMAP() const;
|
WXHBITMAP GetHBITMAP() const;
|
||||||
inline WXHICON GetHICON() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_hIcon : 0); }
|
inline WXHICON GetHICON() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_hIcon : 0); }
|
||||||
|
@@ -21,6 +21,8 @@
|
|||||||
#include "wx/image.h"
|
#include "wx/image.h"
|
||||||
#include "wx/xpmdecod.h"
|
#include "wx/xpmdecod.h"
|
||||||
|
|
||||||
|
#include "wx/rawbmp.h"
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject )
|
IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject )
|
||||||
@@ -1325,3 +1327,64 @@ void wxBitmap::InitStandardHandlers()
|
|||||||
AddHandler(new wxPICTResourceHandler) ;
|
AddHandler(new wxPICTResourceHandler) ;
|
||||||
AddHandler(new wxICONResourceHandler) ;
|
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/image.h"
|
||||||
#include "wx/xpmdecod.h"
|
#include "wx/xpmdecod.h"
|
||||||
|
|
||||||
|
#include "wx/rawbmp.h"
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject )
|
IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject )
|
||||||
@@ -1325,3 +1327,64 @@ void wxBitmap::InitStandardHandlers()
|
|||||||
AddHandler(new wxPICTResourceHandler) ;
|
AddHandler(new wxPICTResourceHandler) ;
|
||||||
AddHandler(new wxICONResourceHandler) ;
|
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