// Modified by: VZ 07.01.00: implemented wxMetaFileDataObject
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Copyright: (c) Julian Smart
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "metafile.h"
#endif
#include "wx/setup.h"
#endif
-#if wxUSE_METAFILE
-
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/app.h"
#endif
#include "wx/metafile.h"
+
+#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH)
+
#include "wx/clipbrd.h"
#include "wx/msw/private.h"
M_METAFILEDATA->m_windowsMappingMode = wxMM_ANISOTROPIC;
M_METAFILEDATA->m_metafile = 0;
- if (!file.IsNull() && (file.Cmp(wxT("")) == 0))
+ if (!file.IsNull() && (file.Cmp(wxEmptyString) == 0))
M_METAFILEDATA->m_metafile = (WXHANDLE) GetMetaFile(file);
}
bool wxMetafile::SetClipboard(int width, int height)
{
+#if !wxUSE_CLIPBOARD
+ return FALSE;
+#else
if (!m_refData)
return FALSE;
wxCloseClipboard();
return success;
+#endif
}
bool wxMetafile::Play(wxDC *dc)
dc->BeginDrawing();
if (dc->GetHDC() && M_METAFILEDATA->m_metafile)
- PlayMetaFile(GetHdcOf(*dc), (HMETAFILE) M_METAFILEDATA->m_metafile);
+ {
+ if ( !::PlayMetaFile(GetHdcOf(*dc), (HMETAFILE)
+ M_METAFILEDATA->m_metafile) )
+ {
+ wxLogLastError(_T("PlayMetaFile"));
+ }
+ }
dc->EndDrawing();
if (!file.IsNull() && wxFileExists(file))
wxRemoveFile(file);
- if (!file.IsNull() && (file != wxT("")))
+ if (!file.IsNull() && (file != wxEmptyString))
m_hDC = (WXHDC) CreateMetaFile(file);
else
m_hDC = (WXHDC) CreateMetaFile(NULL);
break;
}
}
- m_windowExtX = 100;
- m_windowExtY = 100;
}
// ----------------------------------------------------------------------------
p < (WORD *)&pMFHead ->checksum; ++p)
pMFHead ->checksum ^= *p;
- FILE *fd = fopen(filename.fn_str(), "rb");
+ FILE *fd = wxFopen(filename.fn_str(), "rb");
if (!fd) return FALSE;
wxChar tempFileBuf[256];
wxGetTempFileName(wxT("mf"), tempFileBuf);
- FILE *fHandle = fopen(wxConvFile.cWX2MB(tempFileBuf), "wb");
+ FILE *fHandle = wxFopen(wxConvFile.cWX2MB(tempFileBuf), "wb");
if (!fHandle)
return FALSE;
fwrite((void *)&header, sizeof(unsigned char), sizeof(mfPLACEABLEHEADER), fHandle);
bool wxMetafileDataObject::GetDataHere(void *buf) const
{
METAFILEPICT *mfpict = (METAFILEPICT *)buf;
- const wxMetafile mf = GetMetafile();
- mfpict->mm = mf.GetWindowsMappingMode();
+ const wxMetafile& mf = GetMetafile();
+
+ wxCHECK_MSG( mf.GetHMETAFILE(), FALSE, _T("copying invalid metafile") );
+
+ // doesn't seem to work with any other mapping mode...
+ mfpict->mm = MM_ANISOTROPIC; //mf.GetWindowsMappingMode();
mfpict->xExt = mf.GetWidth();
mfpict->yExt = mf.GetHeight();
- mfpict->hMF = (HMETAFILE)mf.GetHMETAFILE();
- wxCHECK_MSG( mfpict->hMF, FALSE, _T("copying invalid metafile") );
+ // transform the picture size to HIMETRIC units (0.01mm) - as we don't know
+ // what DC the picture will be rendered to, use the default display one
+ PixelToHIMETRIC(&mfpict->xExt, &mfpict->yExt);
+
+ mfpict->hMF = CopyMetaFile((HMETAFILE)mf.GetHMETAFILE(), NULL);
return TRUE;
}
wxMetafile mf;
mf.SetWindowsMappingMode(mfpict->mm);
- mf.SetWidth(mfpict->xExt);
- mf.SetHeight(mfpict->yExt);
+
+ LONG w = mfpict->xExt,
+ h = mfpict->yExt;
+ if ( mfpict->mm == MM_ANISOTROPIC )
+ {
+ // in this case xExt and yExt contain suggested size in HIMETRIC units
+ // (0.01 mm) - transform this to something more reasonable (pixels)
+ HIMETRICToPixel(&w, &h);
+ }
+
+ mf.SetWidth(w);
+ mf.SetHeight(h);
mf.SetHMETAFILE((WXHANDLE)mfpict->hMF);
wxCHECK_MSG( mfpict->hMF, FALSE, _T("pasting invalid metafile") );