]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/enhmeta.cpp
fix compilation without wxUSE_STREAMS (closes #10900)
[wxWidgets.git] / src / msw / enhmeta.cpp
index d2c39001f7f286f823a83bcb33be1211fffdf7bf..fd2e73ac75e16e09d4a650250b4aad0a34bd31b3 100644 (file)
@@ -209,7 +209,7 @@ bool wxEnhMetaFile::SetClipboard(int WXUNUSED(width), int WXUNUSED(height))
 }
 
 // ----------------------------------------------------------------------------
-// wxEnhMetaFileDC
+// wxEnhMetaFileDCImpl
 // ----------------------------------------------------------------------------
 
 class wxEnhMetaFileDCImpl : public wxMSWDCImpl
@@ -218,6 +218,10 @@ public:
     wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
                          const wxString& filename, int width, int height,
                          const wxString& description );
+    wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
+                         const wxDC& referenceDC,
+                         const wxString& filename, int width, int height,
+                         const wxString& description );
     virtual ~wxEnhMetaFileDCImpl();
 
     // obtain a pointer to the new metafile (caller should delete it)
@@ -227,30 +231,39 @@ protected:
     virtual void DoGetSize(int *width, int *height) const;
 
 private:
+    void Create(HDC hdcRef,
+                const wxString& filename, int width, int height,
+                const wxString& description);
+
     // size passed to ctor and returned by DoGetSize()
     int m_width,
         m_height;
 };
 
 
-IMPLEMENT_ABSTRACT_CLASS(wxEnhMetaFileDC, wxDC)
-
-wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename,
+wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
+                                 const wxString& filename,
                                  int width, int height,
-                                 const wxString& description)
-               : wxDC(new wxEnhMetaFileDCImpl(this,
-                                              filename,
-                                              width, height,
-                                              description))
+                                 const wxString& description )
+                   : wxMSWDCImpl( owner )
 {
+    Create(ScreenHDC(), filename, width, height, description);
 }
 
-
 wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
+                                 const wxDC& referenceDC,
                                  const wxString& filename,
                                  int width, int height,
                                  const wxString& description )
-   : wxMSWDCImpl( owner )
+                   : wxMSWDCImpl( owner )
+{
+    Create(GetHdcOf(referenceDC), filename, width, height, description);
+}
+
+void wxEnhMetaFileDCImpl::Create(HDC hdcRef,
+                                 const wxString& filename,
+                                 int width, int height,
+                                 const wxString& description)
 {
     m_width = width;
     m_height = height;
@@ -265,7 +278,7 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
         rect.bottom = height;
 
         // CreateEnhMetaFile() wants them in HIMETRIC
-        PixelToHIMETRIC(&rect.right, &rect.bottom);
+        PixelToHIMETRIC(&rect.right, &rect.bottom, hdcRef);
 
         pRect = ▭
     }
@@ -275,7 +288,6 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
         pRect = (LPRECT)NULL;
     }
 
-    ScreenHDC hdcRef;
     m_hDC = (WXHDC)::CreateEnhMetaFile(hdcRef, GetMetaFileName(filename),
                                        pRect, description.wx_str());
     if ( !m_hDC )
@@ -315,6 +327,43 @@ wxEnhMetaFileDCImpl::~wxEnhMetaFileDCImpl()
     m_hDC = 0;
 }
 
+// ----------------------------------------------------------------------------
+// wxEnhMetaFileDC
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxEnhMetaFileDC, wxDC)
+
+wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename,
+                                 int width, int height,
+                                 const wxString& description)
+               : wxDC(new wxEnhMetaFileDCImpl(this,
+                                              filename,
+                                              width, height,
+                                              description))
+{
+}
+
+wxEnhMetaFileDC::wxEnhMetaFileDC(const wxDC& referenceDC,
+                                 const wxString& filename,
+                                 int width, int height,
+                                 const wxString& description)
+               : wxDC(new wxEnhMetaFileDCImpl(this,
+                                              referenceDC,
+                                              filename,
+                                              width, height,
+                                              description))
+{
+}
+
+wxEnhMetaFile *wxEnhMetaFileDC::Close()
+{
+    wxEnhMetaFileDCImpl * const
+        impl = static_cast<wxEnhMetaFileDCImpl *>(GetImpl());
+    wxCHECK_MSG( impl, NULL, _T("no wxEnhMetaFileDC implementation") );
+
+    return impl->Close();
+}
+
 #if wxUSE_DRAG_AND_DROP
 
 // ----------------------------------------------------------------------------