X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3bce6687f47dfa5fb8d4bab92702a5b5b1eb3485..e031f1df56a1595c7ebb4027eb89bf1c9f286bdf:/src/msw/enhmeta.cpp diff --git a/src/msw/enhmeta.cpp b/src/msw/enhmeta.cpp index b931e44bdf..cf6e758b69 100644 --- a/src/msw/enhmeta.cpp +++ b/src/msw/enhmeta.cpp @@ -6,7 +6,7 @@ // Created: 13.01.00 // RCS-ID: $Id$ // Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "enhmeta.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -33,6 +29,7 @@ #ifndef WX_PRECOMP #include "wx/string.h" #include "wx/log.h" + #include "wx/intl.h" #endif //WX_PRECOMP #include "wx/metafile.h" @@ -70,6 +67,21 @@ static inline const wxChar *GetMetaFileName(const wxString& fn) // wxEnhMetaFile // ---------------------------------------------------------------------------- +void wxEnhMetaFile::Init() +{ + if ( m_filename.empty() ) + { + m_hMF = 0; + } + else // have valid file name, load metafile from it + { + m_hMF = GetEnhMetaFile(m_filename); + if ( !m_hMF ) + wxLogSysError(_("Failed to load metafile from file \"%s\"."), + m_filename.c_str()); + } +} + void wxEnhMetaFile::Assign(const wxEnhMetaFile& mf) { if ( &mf == this ) @@ -103,8 +115,8 @@ void wxEnhMetaFile::Free() bool wxEnhMetaFile::Play(wxDC *dc, wxRect *rectBound) { - wxCHECK_MSG( Ok(), FALSE, _T("can't play invalid enhanced metafile") ); - wxCHECK_MSG( dc, FALSE, _T("invalid wxDC in wxEnhMetaFile::Play") ); + wxCHECK_MSG( Ok(), false, _T("can't play invalid enhanced metafile") ); + wxCHECK_MSG( dc, false, _T("invalid wxDC in wxEnhMetaFile::Play") ); RECT rect; if ( rectBound ) @@ -128,10 +140,10 @@ bool wxEnhMetaFile::Play(wxDC *dc, wxRect *rectBound) { wxLogLastError(_T("PlayEnhMetaFile")); - return FALSE; + return false; } - return TRUE; + return true; } wxSize wxEnhMetaFile::GetSize() const @@ -164,13 +176,13 @@ wxSize wxEnhMetaFile::GetSize() const bool wxEnhMetaFile::SetClipboard(int WXUNUSED(width), int WXUNUSED(height)) { -#if wxUSE_DRAG_AND_DROP - wxCHECK_MSG( m_hMF, FALSE, _T("can't copy invalid metafile to clipboard") ); +#if wxUSE_DRAG_AND_DROP && wxUSE_CLIPBOARD + wxCHECK_MSG( m_hMF, false, _T("can't copy invalid metafile to clipboard") ); return wxTheClipboard->AddData(new wxEnhMetaFileDataObject(*this)); #else // !wxUSE_DRAG_AND_DROP wxFAIL_MSG(_T("not implemented")); - return FALSE; + return false; #endif // wxUSE_DRAG_AND_DROP/!wxUSE_DRAG_AND_DROP } @@ -182,9 +194,11 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, int width, int height, const wxString& description) { - ScreenHDC hdcRef; + m_width = width; + m_height = height; + RECT rect; - RECT *pRect; + RECT *pRect; if ( width && height ) { rect.top = @@ -193,15 +207,8 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, rect.bottom = height; // CreateEnhMetaFile() wants them in HIMETRIC -#ifdef __WXWINE__ - LONG r, b; - PixelToHIMETRIC(&r, &b); - rect.right = r; - rect.bottom = b; -#else PixelToHIMETRIC(&rect.right, &rect.bottom); -#endif - + pRect = ▭ } else @@ -210,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 ) @@ -218,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") ); @@ -283,7 +299,7 @@ size_t wxEnhMetaFileDataObject::GetDataSize(const wxDataFormat& format) const bool wxEnhMetaFileDataObject::GetDataHere(const wxDataFormat& format, void *buf) const { - wxCHECK_MSG( m_metafile.Ok(), FALSE, _T("copying invalid enh metafile") ); + wxCHECK_MSG( m_metafile.Ok(), false, _T("copying invalid enh metafile") ); HENHMETAFILE hEMF = (HENHMETAFILE)m_metafile.GetHENHMETAFILE(); @@ -294,17 +310,13 @@ bool wxEnhMetaFileDataObject::GetDataHere(const wxDataFormat& format, void *buf) { wxLogLastError(_T("CopyEnhMetaFile")); - return FALSE; + return false; } *(HENHMETAFILE *)buf = hEMFCopy; } else { -#ifdef __WXWINE__ - wxFAIL_MSG( _T("unsupported format") ); - return FALSE; -#else wxASSERT_MSG( format == wxDF_METAFILE, _T("unsupported format") ); // convert to WMF @@ -313,7 +325,7 @@ bool wxEnhMetaFileDataObject::GetDataHere(const wxDataFormat& format, void *buf) // first get the buffer size and alloc memory size_t size = ::GetWinMetaFileBits(hEMF, 0, NULL, MM_ANISOTROPIC, hdc); - wxCHECK_MSG( size, FALSE, _T("GetWinMetaFileBits() failed") ); + wxCHECK_MSG( size, false, _T("GetWinMetaFileBits() failed") ); BYTE *bits = (BYTE *)malloc(size); @@ -324,7 +336,7 @@ bool wxEnhMetaFileDataObject::GetDataHere(const wxDataFormat& format, void *buf) free(bits); - return FALSE; + return false; } // and finally convert them to the WMF @@ -334,7 +346,7 @@ bool wxEnhMetaFileDataObject::GetDataHere(const wxDataFormat& format, void *buf) { wxLogLastError(_T("SetMetaFileBitsEx")); - return FALSE; + return false; } METAFILEPICT *mfpict = (METAFILEPICT *)buf; @@ -346,10 +358,9 @@ bool wxEnhMetaFileDataObject::GetDataHere(const wxDataFormat& format, void *buf) mfpict->yExt = sizeMF.y; PixelToHIMETRIC(&mfpict->xExt, &mfpict->yExt); -#endif } - return TRUE; + return true; } bool wxEnhMetaFileDataObject::SetData(const wxDataFormat& format, @@ -362,7 +373,7 @@ bool wxEnhMetaFileDataObject::SetData(const wxDataFormat& format, { hEMF = *(HENHMETAFILE *)buf; - wxCHECK_MSG( hEMF, FALSE, _T("pasting invalid enh metafile") ); + wxCHECK_MSG( hEMF, false, _T("pasting invalid enh metafile") ); } else { @@ -373,7 +384,7 @@ bool wxEnhMetaFileDataObject::SetData(const wxDataFormat& format, // first get the buffer size size_t size = ::GetMetaFileBitsEx(mfpict->hMF, 0, NULL); - wxCHECK_MSG( size, FALSE, _T("GetMetaFileBitsEx() failed") ); + wxCHECK_MSG( size, false, _T("GetMetaFileBitsEx() failed") ); // then get metafile bits BYTE *bits = (BYTE *)malloc(size); @@ -383,7 +394,7 @@ bool wxEnhMetaFileDataObject::SetData(const wxDataFormat& format, free(bits); - return FALSE; + return false; } ScreenHDC hdcRef; @@ -395,13 +406,13 @@ bool wxEnhMetaFileDataObject::SetData(const wxDataFormat& format, { wxLogLastError(_T("SetWinMetaFileBits")); - return FALSE; + return false; } } m_metafile.SetHENHMETAFILE((WXHANDLE)hEMF); - return TRUE; + return true; } // ---------------------------------------------------------------------------- @@ -416,7 +427,7 @@ size_t wxEnhMetaFileSimpleDataObject::GetDataSize() const bool wxEnhMetaFileSimpleDataObject::GetDataHere(void *buf) const { - wxCHECK_MSG( m_metafile.Ok(), FALSE, _T("copying invalid enh metafile") ); + wxCHECK_MSG( m_metafile.Ok(), false, _T("copying invalid enh metafile") ); HENHMETAFILE hEMF = (HENHMETAFILE)m_metafile.GetHENHMETAFILE(); @@ -425,11 +436,11 @@ bool wxEnhMetaFileSimpleDataObject::GetDataHere(void *buf) const { wxLogLastError(_T("CopyEnhMetaFile")); - return FALSE; + return false; } *(HENHMETAFILE *)buf = hEMFCopy; - return TRUE; + return true; } bool wxEnhMetaFileSimpleDataObject::SetData(size_t WXUNUSED(len), @@ -437,12 +448,13 @@ bool wxEnhMetaFileSimpleDataObject::SetData(size_t WXUNUSED(len), { HENHMETAFILE hEMF = *(HENHMETAFILE *)buf; - wxCHECK_MSG( hEMF, FALSE, _T("pasting invalid enh metafile") ); + wxCHECK_MSG( hEMF, false, _T("pasting invalid enh metafile") ); m_metafile.SetHENHMETAFILE((WXHANDLE)hEMF); - return TRUE; + return true; } + #endif // wxUSE_DRAG_AND_DROP #endif // wxUSE_ENH_METAFILE