void wxDC::DoDrawSubBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, wxCoord w, wxCoord h, wxCoord destx, wxCoord desty, int rop, bool useMask) { wxCHECK_RET( Ok(), wxT("invalid dc") ); wxCHECK_RET( bmp.Ok(), wxT("invalid bitmap") ); // NB: we could also support XOR here (via DSBLIT_XOR) // and possibly others via SetSrc/DstBlendFunction() wxCHECK_RET( rop == wxCOPY, _T("only wxCOPY function supported") ); if ( bmp.GetDepth() == 1 ) { // Mono bitmaps are handled in special way -- all 1s are drawn in // foreground colours, all 0s in background colour. wxFAIL_MSG( _T("drawing mono bitmaps not implemented") ); return; } if ( useMask && bmp.GetMask() ) { // FIXME_DFB: see MGL sources for a way to do it, but it's not directly // applicable because DirectFB doesn't implement ROPs; OTOH, // it has blitting modes that can be useful; finally, see // DFB's SetSrcBlendFunction() and SetSrcColorKey() wxFAIL_MSG( _T("drawing bitmaps with masks not implemented") ); return; } DoBlitFromSurface(bmp.GetDirectFBSurface(), x, y, w, h, destx, desty); }
void wxMemoryDC::DoSelect(const wxBitmap& bitmap) { m_bmp = bitmap; if ( !bitmap.Ok() ) { // select the bitmap out of the DC m_surface = NULL; return; } // init the DC for drawing to this bitmap DFBInit(bitmap.GetDirectFBSurface()); }