#endif
#include "wx/metafile.h"
+#include "wx/filename.h"
#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH)
wxMetafileRefData::wxMetafileRefData()
{
m_metafile = 0;
- m_windowsMappingMode = wxMM_ANISOTROPIC;
+ m_windowsMappingMode = MM_ANISOTROPIC;
m_width = m_height = 0;
}
{
m_refData = new wxMetafileRefData;
- M_METAFILEDATA->m_windowsMappingMode = wxMM_ANISOTROPIC;
+ M_METAFILEDATA->m_windowsMappingMode = MM_ANISOTROPIC;
M_METAFILEDATA->m_metafile = 0;
if (!file.empty())
M_METAFILEDATA->m_metafile = (WXHANDLE) GetMetaFile(file);
{
}
+wxGDIRefData *wxMetafile::CreateGDIRefData() const
+{
+ return new wxMetafileRefData;
+}
+
+wxGDIRefData *wxMetafile::CloneGDIRefData(const wxGDIRefData *data) const
+{
+ return new wxMetafileRefData(*static_cast<const wxMetafileRefData *>(data));
+}
+
bool wxMetafile::SetClipboard(int width, int height)
{
#if !wxUSE_CLIPBOARD
// 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;
// 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;
::SetWindowExtEx((HDC) m_hDC,xext,yext, NULL);
// Actual Windows mapping mode, for future reference.
- m_windowsMappingMode = wxMM_ANISOTROPIC;
+ m_windowsMappingMode = MM_ANISOTROPIC;
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;
*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") );
*height = M_METAFILEDATA->m_height;
}
-wxMetafile *wxMetafileDC::Close()
+wxMetafile *wxMetafileDCImpl::Close()
{
SelectOldObjects(m_hDC);
HANDLE mf = CloseMetaFile((HDC) m_hDC);
return NULL;
}
-void wxMetafileDC::SetMapMode(int mode)
+void wxMetafileDCImpl::SetMapMode(wxMappingMode mode)
{
m_mappingMode = mode;
FILE *fd = wxFopen(filename.fn_str(), _T("rb"));
if (!fd) return false;
- wxChar tempFileBuf[256];
- wxGetTempFileName(wxT("mf"), tempFileBuf);
- FILE *fHandle = wxFopen(wxFNCONV(tempFileBuf), _T("wb"));
+ wxString tempFileBuf = wxFileName::CreateTempFileName(wxT("mf"));
+ if (tempFileBuf.empty())
+ return false;
+
+ FILE *fHandle = wxFopen(tempFileBuf.fn_str(), _T("wb"));
if (!fHandle)
return false;
fwrite((void *)&header, sizeof(unsigned char), sizeof(mfPLACEABLEHEADER), fHandle);