X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/521bf4ff3ef47059265beff5d53c9e1162beb122..47af39fbf462db5c9ccf41c8d95a16d53fdb94a7:/src/msw/metafile.cpp?ds=sidebyside diff --git a/src/msw/metafile.cpp b/src/msw/metafile.cpp index 3032a5e2cd..7152568160 100644 --- a/src/msw/metafile.cpp +++ b/src/msw/metafile.cpp @@ -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 @@ -122,8 +132,6 @@ bool wxMetafile::Play(wxDC *dc) if (!m_refData) return false; - dc->BeginDrawing(); - if (dc->GetHDC() && M_METAFILEDATA->m_metafile) { if ( !::PlayMetaFile(GetHdcOf(*dc), (HMETAFILE) @@ -133,8 +141,6 @@ bool wxMetafile::Play(wxDC *dc) } } - dc->EndDrawing(); - return true; } @@ -160,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; @@ -187,15 +194,17 @@ 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; m_maxX = -10000; m_maxY = -10000; - if ( !file.empty() && wxFileExists(file)) + if ( !file.empty() && wxFileExists(file) ) wxRemoveFile(file); - m_hDC = (WXHDC) CreateMetaFile(file); + m_hDC = (WXHDC) CreateMetaFile(file.empty() ? NULL : file.wx_str()); m_ok = true; @@ -208,26 +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::GetTextExtent(const wxString& string, long *x, long *y, - long *descent, long *externalLeading, wxFont *theFont, bool WXUNUSED(use16bit)) const +void wxMetafileDCImpl::DoGetTextExtent(const wxString& string, + wxCoord *x, wxCoord *y, + wxCoord *descent, wxCoord *externalLeading, + const wxFont *theFont) const { - wxFont *fontToUse = theFont; + const wxFont *fontToUse = theFont; if (!fontToUse) - fontToUse = (wxFont*) &m_font; + 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; @@ -239,7 +249,7 @@ void wxMetafileDC::GetTextExtent(const wxString& string, long *x, long *y, *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") ); @@ -249,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); @@ -264,7 +274,7 @@ wxMetafile *wxMetafileDC::Close() return NULL; } -void wxMetafileDC::SetMapMode(int mode) +void wxMetafileDCImpl::SetMapMode(int mode) { m_mappingMode = mode;