blit implemented using dc.GetAsBitmap with subrect
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42613 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -714,59 +714,11 @@ bool wxGCDC::DoBlit(
|
|||||||
ysrcMask = ysrc;
|
ysrcMask = ysrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCoord yysrc = source-> LogicalToDeviceY(ysrc);
|
wxRect subrect(source-> LogicalToDeviceX(xsrc),source-> LogicalToDeviceY(ysrc),
|
||||||
wxCoord xxsrc = source-> LogicalToDeviceX(xsrc);
|
source-> LogicalToDeviceXRel(width),source-> LogicalToDeviceYRel(height));
|
||||||
wxCoord wwsrc = source-> LogicalToDeviceXRel(width);
|
|
||||||
wxCoord hhsrc = source-> LogicalToDeviceYRel(height);
|
wxBitmap blit = source->GetAsBitmap( &subrect );
|
||||||
|
|
||||||
wxBitmap blit;
|
|
||||||
wxMemoryDC* memdc = wxDynamicCast(source,wxMemoryDC);
|
|
||||||
if ( memdc )
|
|
||||||
{
|
|
||||||
blit = memdc->GetSelectedBitmap();
|
|
||||||
|
|
||||||
wxASSERT_MSG( blit.Ok() , wxT("Invalid bitmap for blitting") );
|
|
||||||
|
|
||||||
wxCoord bmpwidth = blit.GetWidth();
|
|
||||||
wxCoord bmpheight = blit.GetHeight();
|
|
||||||
|
|
||||||
if ( xxsrc != 0 || yysrc != 0 || bmpwidth != wwsrc || bmpheight != hhsrc )
|
|
||||||
{
|
|
||||||
wwsrc = wxMin( wwsrc , bmpwidth - xxsrc );
|
|
||||||
hhsrc = wxMin( hhsrc , bmpheight - yysrc );
|
|
||||||
if ( wwsrc > 0 && hhsrc > 0 )
|
|
||||||
{
|
|
||||||
if ( xxsrc >= 0 && yysrc >= 0 )
|
|
||||||
{
|
|
||||||
wxRect subrect( xxsrc, yysrc, wwsrc , hhsrc );
|
|
||||||
// TODO we perhaps could add a DrawSubBitmap call to dc for performance reasons
|
|
||||||
blit = blit.GetSubBitmap( subrect );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// in this case we'd probably have to adjust the different coordinates, but
|
|
||||||
// we have to find out proper contract first
|
|
||||||
blit = wxNullBitmap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
blit = wxNullBitmap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxWindowDC* windc = wxDynamicCast(source,wxWindowDC);
|
|
||||||
if (windc)
|
|
||||||
{
|
|
||||||
wxBitmap bmp;
|
|
||||||
bmp = windc->GetAsBitmap();
|
|
||||||
if (bmp.IsOk())
|
|
||||||
blit = bmp.GetSubBitmap( wxRect(xsrc, ysrc, width, height ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( blit.Ok() )
|
if ( blit.Ok() )
|
||||||
{
|
{
|
||||||
m_graphicContext->DrawBitmap( blit, xdest , ydest , width , height );
|
m_graphicContext->DrawBitmap( blit, xdest , ydest , width , height );
|
||||||
|
Reference in New Issue
Block a user