+wxGraphicsBitmap wxGDIPlusRenderer::CreateBitmap( const wxBitmap &bitmap )
+{
+ ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap);
+ if ( bitmap.Ok() )
+ {
+ wxGraphicsBitmap p;
+ p.SetRefData(new wxGDIPlusBitmapData( this , bitmap ));
+ return p;
+ }
+ else
+ return wxNullGraphicsBitmap;
+}
+
+wxGraphicsBitmap wxGDIPlusRenderer::CreateBitmapFromNativeBitmap( void *bitmap )
+{
+ ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap);
+ if ( bitmap != NULL )
+ {
+ wxGraphicsBitmap p;
+ p.SetRefData(new wxGDIPlusBitmapData( this , (Bitmap*) bitmap ));
+ return p;
+ }
+ else
+ return wxNullGraphicsBitmap;
+}
+
+wxGraphicsBitmap wxGDIPlusRenderer::CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
+{
+ ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap);
+ Bitmap* image = static_cast<wxGDIPlusBitmapData*>(bitmap.GetRefData())->GetGDIPlusBitmap();
+ if ( image )
+ {
+ wxGraphicsBitmap p;
+ p.SetRefData(new wxGDIPlusBitmapData( this , image->Clone( (REAL) x , (REAL) y , (REAL) w , (REAL) h , PixelFormat32bppPARGB) ));
+ return p;
+ }
+ else
+ return wxNullGraphicsBitmap;
+}
+
+// Shutdown GDI+ at app exit, before possible dll unload
+class wxGDIPlusRendererModule : public wxModule
+{
+public:
+ virtual bool OnInit() { return true; }
+ virtual void OnExit() { gs_GDIPlusRenderer.Unload(); }
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxGDIPlusRendererModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxGDIPlusRendererModule, wxModule)
+
+// ----------------------------------------------------------------------------
+// wxMSW-specific parts of wxGCDC
+// ----------------------------------------------------------------------------
+
+WXHDC wxGCDC::AcquireHDC()
+{
+ wxGraphicsContext * const gc = GetGraphicsContext();
+ if ( !gc )
+ return NULL;
+
+ Graphics * const g = static_cast<Graphics *>(gc->GetNativeContext());
+ return g ? g->GetHDC() : NULL;
+}
+
+void wxGCDC::ReleaseHDC(WXHDC hdc)
+{
+ if ( !hdc )
+ return;
+
+ wxGraphicsContext * const gc = GetGraphicsContext();
+ wxCHECK_RET( gc, "can't release HDC because there is no wxGraphicsContext" );
+
+ Graphics * const g = static_cast<Graphics *>(gc->GetNativeContext());
+ wxCHECK_RET( g, "can't release HDC because there is no Graphics" );
+
+ g->ReleaseHDC((HDC)hdc);
+}
+