From: Vadim Zeitlin Date: Sun, 25 Dec 2005 13:06:05 +0000 (+0000) Subject: implemented wxDC::DoGetSize() correctly for metafile DC classes X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/024026be1dddaa0acf1360dc9a3847fd671de7a0 implemented wxDC::DoGetSize() correctly for metafile DC classes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36566 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/enhmeta.h b/include/wx/msw/enhmeta.h index f892b1927b..4fa8d1c8d0 100644 --- a/include/wx/msw/enhmeta.h +++ b/include/wx/msw/enhmeta.h @@ -87,6 +87,12 @@ public: wxEnhMetaFile *Close(); private: + virtual void DoGetSize(int *width, int *height) const; + + // size passed to ctor and returned by DoGetSize() + int m_width, + m_height; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxEnhMetaFileDC) }; diff --git a/include/wx/msw/metafile.h b/include/wx/msw/metafile.h index 9d2ceaddad..5bca9a99f0 100644 --- a/include/wx/msw/metafile.h +++ b/include/wx/msw/metafile.h @@ -107,6 +107,8 @@ public: void SetWindowsMappingMode(int mm) { m_windowsMappingMode = mm; } protected: + virtual void DoGetSize(int *width, int *height) const; + int m_windowsMappingMode; wxMetafile* m_metaFile; diff --git a/src/msw/enhmeta.cpp b/src/msw/enhmeta.cpp index 037b749003..cf6e758b69 100644 --- a/src/msw/enhmeta.cpp +++ b/src/msw/enhmeta.cpp @@ -194,7 +194,9 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, int width, int height, const wxString& description) { - ScreenHDC hdcRef; + m_width = width; + m_height = height; + RECT rect; RECT *pRect; if ( width && height ) @@ -215,6 +217,7 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, pRect = (LPRECT)NULL; } + ScreenHDC hdcRef; m_hDC = (WXHDC)::CreateEnhMetaFile(hdcRef, GetMetaFileName(filename), pRect, description); if ( !m_hDC ) @@ -223,6 +226,14 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, } } +void wxEnhMetaFileDC::DoGetSize(int *width, int *height) const +{ + if ( width ) + *width = m_width; + if ( height ) + *height = m_height; +} + wxEnhMetaFile *wxEnhMetaFileDC::Close() { wxCHECK_MSG( Ok(), NULL, _T("invalid wxEnhMetaFileDC") ); diff --git a/src/msw/metafile.cpp b/src/msw/metafile.cpp index 2889b04b85..dfe59cc8f5 100644 --- a/src/msw/metafile.cpp +++ b/src/msw/metafile.cpp @@ -243,6 +243,16 @@ void wxMetafileDC::GetTextExtent(const wxString& string, long *x, long *y, *externalLeading = tm.tmExternalLeading; } +void wxMetafileDC::DoGetSize(int *width, int *height) const +{ + wxCHECK_RET( m_refData, _T("invalid wxMetafileDC") ); + + if ( width ) + *width = M_METAFILEDATA->m_width; + if ( height ) + *height = M_METAFILEDATA->m_height; +} + wxMetafile *wxMetafileDC::Close() { SelectOldObjects(m_hDC);