}
#endif
+#if defined(__WXMSW__) && wxUSE_ENH_METAFILE
+wxGCDC::wxGCDC(const wxEnhMetaFileDC& dc)
+ : wxDC(new wxGCDCImpl(this, dc))
+{
+}
+#endif
+
+wxGCDC::wxGCDC(wxGraphicsContext* context) :
+ wxDC( new wxGCDCImpl( this ) )
+{
+ SetGraphicsContext(context);
+}
+
wxGCDC::wxGCDC() :
wxDC( new wxGCDCImpl( this ) )
{
{
Init();
wxGraphicsContext* context;
-#if wxUSE_CAIRO
- wxGraphicsRenderer* renderer = wxGraphicsRenderer::GetCairoRenderer();
- context = renderer->CreateContext(dc);
-#else
context = wxGraphicsContext::Create(dc);
-#endif
-
SetGraphicsContext( context );
}
}
#endif
+#if defined(__WXMSW__) && wxUSE_ENH_METAFILE
+wxGCDCImpl::wxGCDCImpl(wxDC *owner, const wxEnhMetaFileDC& dc)
+ : wxDCImpl(owner)
+{
+ Init();
+ SetGraphicsContext(wxGraphicsContext::Create(dc));
+}
+#endif
+
void wxGCDCImpl::Init()
{
m_ok = false;
return false;
}
+ wxRect subrect(source->LogicalToDeviceX(xsrc),
+ source->LogicalToDeviceY(ysrc),
+ source->LogicalToDeviceXRel(srcWidth),
+ source->LogicalToDeviceYRel(srcHeight));
+ // clip the subrect down to the size of the source DC
+ wxRect clip;
+ source->GetSize(&clip.width, &clip.height);
+ subrect.Intersect(clip);
+ if (subrect.width == 0)
+ return true;
+
bool retval = true;
wxCompositionMode formerMode = m_graphicContext->GetCompositionMode();
ysrcMask = ysrc;
}
- wxRect subrect(source->LogicalToDeviceX(xsrc),
- source->LogicalToDeviceY(ysrc),
- source->LogicalToDeviceXRel(srcWidth),
- source->LogicalToDeviceYRel(srcHeight));
-
- // if needed clip the subrect down to the size of the source DC
- wxCoord sw, sh;
- source->GetSize(&sw, &sh);
- sw = source->LogicalToDeviceXRel(sw);
- sh = source->LogicalToDeviceYRel(sh);
- if (subrect.x + subrect.width > sw)
- subrect.width = sw - subrect.x;
- if (subrect.y + subrect.height > sh)
- subrect.height = sh - subrect.y;
-
wxBitmap blit = source->GetAsBitmap( &subrect );
if ( blit.IsOk() )