// get the given part of bitmap
wxBitmap GetSubBitmap( const wxRect& rect ) const;
+ // NB: This should not be called from user code. It is for wx internal
+ // use only.
+ wxBitmap GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const;
+
// copies the contents and mask of the given (colour) icon to the bitmap
bool CopyFromIcon(const wxIcon& icon,
wxBitmapTransparency transp = wxBitmapTransparency_Auto);
virtual void DoGetSize(int* width, int* height) const;
virtual void DoSelect(const wxBitmap& bitmap);
+ virtual wxBitmap DoGetAsBitmap(const wxRect* subrect) const
+ { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmapOfHDC(*subrect, GetHDC() );}
+
// create DC compatible with the given one or screen if dc == NULL
bool CreateCompatible(wxDC *dc);
// ----------------------------------------------------------------------------
// sub bitmap extraction
// ----------------------------------------------------------------------------
+wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect ) const
+{
+ MemoryHDC dcSrc;
+ SelectInHDC selectSrc(dcSrc, GetHbitmap());
+ return GetSubBitmapOfHDC( rect, (WXHDC)dcSrc );
+}
-wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
+wxBitmap wxBitmap::GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const
{
wxCHECK_MSG( Ok() &&
(rect.x >= 0) && (rect.y >= 0) &&
dcDst;
{
- SelectInHDC selectSrc(dcSrc, GetHbitmap()),
- selectDst(dcDst, GetHbitmapOf(ret));
-
- if ( !selectSrc || !selectDst )
+ SelectInHDC selectDst(dcDst, GetHbitmapOf(ret));
+
+ if ( !selectDst )
{
- wxLogLastError(_T("SelectObjct(hBitmap)"));
+ wxLogLastError(_T("SelectObject(destBitmap)"));
}
if ( !::BitBlt(dcDst, 0, 0, rect.width, rect.height,
- dcSrc, rect.x, rect.y, SRCCOPY) )
+ (HDC)hdc, rect.x, rect.y, SRCCOPY) )
{
wxLogLastError(_T("BitBlt"));
}