]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/metafile.cpp
added a unit test for input/output file streams and fixed the problem it exposed...
[wxWidgets.git] / src / msw / metafile.cpp
index cca6815690841db997c113d15bf7cb32c08e1abd..7152568160d0e7be08d668f5f9ddd9b4ce407de1 100644 (file)
@@ -94,6 +94,16 @@ wxMetafile::~wxMetafile()
 {
 }
 
+wxGDIRefData *wxMetafile::CreateGDIRefData() const
+{
+    return new wxMetafileRefData;
+}
+
+wxGDIRefData *wxMetafile::CloneGDIRefData(const wxGDIRefData *data) const
+{
+    return new wxMetafileRefData(*wx_static_cast(const wxMetafileRefData *, data));
+}
+
 bool wxMetafile::SetClipboard(int width, int height)
 {
 #if !wxUSE_CLIPBOARD
@@ -156,7 +166,8 @@ void wxMetafile::SetWindowsMappingMode(int mm)
 
 // Original constructor that does not takes origin and extent. If you use this,
 // *DO* give origin/extent arguments to wxMakeMetafilePlaceable.
-wxMetafileDC::wxMetafileDC(const wxString& file)
+wxMetafileDCImpl::wxMetafileDCImpl(wxDC *owner, const wxString& file)
+    : wxMSWDCImpl(owner)
 {
     m_metaFile = NULL;
     m_minX = 10000;
@@ -183,7 +194,9 @@ wxMetafileDC::wxMetafileDC(const wxString& file)
 
 // New constructor that takes origin and extent. If you use this, don't
 // give origin/extent arguments to wxMakeMetafilePlaceable.
-wxMetafileDC::wxMetafileDC(const wxString& file, int xext, int yext, int xorg, int yorg)
+wxMetafileDCImpl::wxMetafileDCImpl(wxDC *owner, const wxString& file,
+                                   int xext, int yext, int xorg, int yorg)
+    : wxMSWDCImpl(owner)
 {
     m_minX = 10000;
     m_minY = 10000;
@@ -191,7 +204,7 @@ wxMetafileDC::wxMetafileDC(const wxString& file, int xext, int yext, int xorg, i
     m_maxY = -10000;
     if ( !file.empty() && wxFileExists(file) )
         wxRemoveFile(file);
-    m_hDC = (WXHDC) CreateMetaFile(file.empty() ? NULL : file.c_str());
+    m_hDC = (WXHDC) CreateMetaFile(file.empty() ? NULL : file.wx_str());
 
     m_ok = true;
 
@@ -204,28 +217,27 @@ wxMetafileDC::wxMetafileDC(const wxString& file, int xext, int yext, int xorg, i
     SetMapMode(wxMM_TEXT); // NOTE: does not set HDC mapmode (this is correct)
 }
 
-wxMetafileDC::~wxMetafileDC()
+wxMetafileDCImpl::~wxMetafileDCImpl()
 {
     m_hDC = 0;
 }
 
-void wxMetafileDC::DoGetTextExtent(const wxString& string,
-                                   wxCoord *x, wxCoord *y,
-                                   wxCoord *descent, wxCoord *externalLeading,
-                                   const wxFont *theFont) const
+void wxMetafileDCImpl::DoGetTextExtent(const wxString& string,
+                                       wxCoord *x, wxCoord *y,
+                                       wxCoord *descent, wxCoord *externalLeading,
+                                       const wxFont *theFont) const
 {
     const wxFont *fontToUse = theFont;
     if (!fontToUse)
         fontToUse = &m_font;
 
-    HDC dc = GetDC(NULL);
+    ScreenHDC dc;
+    SelectInHDC selFont(dc, GetHfontOf(*fontToUse));
 
     SIZE sizeRect;
     TEXTMETRIC tm;
     ::GetTextExtentPoint32(dc, WXSTRINGCAST string, wxStrlen(WXSTRINGCAST string), &sizeRect);
-    GetTextMetrics(dc, &tm);
-
-    ReleaseDC(NULL, dc);
+    ::GetTextMetrics(dc, &tm);
 
     if ( x )
         *x = sizeRect.cx;
@@ -237,7 +249,7 @@ void wxMetafileDC::DoGetTextExtent(const wxString& string,
         *externalLeading = tm.tmExternalLeading;
 }
 
-void wxMetafileDC::DoGetSize(int *width, int *height) const
+void wxMetafileDCImpl::DoGetSize(int *width, int *height) const
 {
     wxCHECK_RET( m_refData, _T("invalid wxMetafileDC") );
 
@@ -247,7 +259,7 @@ void wxMetafileDC::DoGetSize(int *width, int *height) const
         *height = M_METAFILEDATA->m_height;
 }
 
-wxMetafile *wxMetafileDC::Close()
+wxMetafile *wxMetafileDCImpl::Close()
 {
     SelectOldObjects(m_hDC);
     HANDLE mf = CloseMetaFile((HDC) m_hDC);
@@ -262,7 +274,7 @@ wxMetafile *wxMetafileDC::Close()
     return NULL;
 }
 
-void wxMetafileDC::SetMapMode(int mode)
+void wxMetafileDCImpl::SetMapMode(int mode)
 {
     m_mappingMode = mode;