X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..b77b87881bae2e6306366d79e7fe160334b3d4a2:/src/mac/carbon/metafile.cpp?ds=sidebyside diff --git a/src/mac/carbon/metafile.cpp b/src/mac/carbon/metafile.cpp index 5742ba4ce6..aca4bc0ae5 100644 --- a/src/mac/carbon/metafile.cpp +++ b/src/mac/carbon/metafile.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// // Name: metafile.cpp // Purpose: wxMetaFile, wxMetaFileDC etc. These classes are optional. -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -34,13 +34,17 @@ #include "wx/metafile.h" #include "wx/clipbrd.h" +#include "wx/mac/private.h" + #include #include extern bool wxClipboardIsOpen; +#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxMetafile, wxObject) IMPLEMENT_ABSTRACT_CLASS(wxMetafileDC, wxDC) +#endif /* * Metafiles @@ -57,7 +61,7 @@ wxMetafileRefData::~wxMetafileRefData(void) { if (m_metafile) { - KillPicture( m_metafile ) ; + KillPicture( (PicHandle) m_metafile ) ; m_metafile = 0; } } @@ -68,7 +72,7 @@ wxMetaFile::wxMetaFile(const wxString& file) M_METAFILEDATA->m_metafile = 0; - wxASSERT_MSG( file.IsEmpty() , "no file based metafile support yet") ; + wxASSERT_MSG( file.IsEmpty() , wxT("no file based metafile support yet") ) ; /* if (!file.IsNull() && (file.Cmp("") == 0)) M_METAFILEDATA->m_metafile = (WXHANDLE) GetMetaFile(file); @@ -81,47 +85,48 @@ wxMetaFile::~wxMetaFile() bool wxMetaFile::SetClipboard(int width, int height) { +#if wxUSE_DRAG_AND_DROP + //TODO finishi this port , we need the data obj first if (!m_refData) return FALSE; -/* - bool alreadyOpen=wxClipboardOpen(); + + bool alreadyOpen=wxTheClipboard->IsOpened() ; if (!alreadyOpen) { - wxOpenClipboard(); - if (!wxEmptyClipboard()) return FALSE; + wxTheClipboard->Open(); + wxTheClipboard->Clear(); } - bool success = wxSetClipboardData(wxDF_METAFILE, this, width,height); - if (!alreadyOpen) wxCloseClipboard(); + wxDataObject *data = + new wxMetafileDataObject( *this) ; + bool success = wxTheClipboard->SetData(data); + if (!alreadyOpen) + wxTheClipboard->Close(); return (bool) success; - */ +#endif return TRUE ; } -bool wxMetaFile::Play(wxDC *dc) +void wxMetafile::SetHMETAFILE(WXHMETAFILE mf) { - if (!m_refData) - return FALSE; - - if (!dc->Ok() ) - return FALSE; - - dc->MacVerifySetup() ; - - { - PicHandle pict = GetHMETAFILE() ; - DrawPicture( pict , &(**pict).picFrame ) ; - } -/* if (!m_refData) - return FALSE; - - dc->BeginDrawing(); + m_refData = new wxMetafileRefData; - if (dc->GetHDC() && M_METAFILEDATA->m_metafile) - PlayMetaFile((HDC) dc->GetHDC(), (HMETAFILE) M_METAFILEDATA->m_metafile); + M_METAFILEDATA->m_metafile = mf; +} - dc->EndDrawing(); -*/ +bool wxMetaFile::Play(wxDC *dc) +{ + if (!m_refData) + return FALSE; + + if (!dc->Ok() ) + return FALSE; + + { + wxMacPortSetter helper( dc ) ; + PicHandle pict = (PicHandle) GetHMETAFILE() ; + DrawPicture( pict , &(**pict).picFrame ) ; + } return TRUE; } @@ -134,22 +139,22 @@ bool wxMetaFile::Play(wxDC *dc) // *DO* give origin/extent arguments to wxMakeMetaFilePlaceable. wxMetaFileDC::wxMetaFileDC(const wxString& file) { - m_metaFile = NULL; - m_minX = 10000; - m_minY = 10000; - m_maxX = -10000; - m_maxY = -10000; - - wxASSERT_MSG( file.IsEmpty() , "no file based metafile support yet") ; - - m_metaFile = new wxMetaFile("") ; - Rect r={0,0,100,100} ; - - m_metaFile->SetHMETAFILE( OpenPicture( &r ) ) ; - ::GetPort( &m_macPort ) ; - m_ok = TRUE ; - - SetMapMode(wxMM_TEXT); + m_metaFile = NULL; + m_minX = 10000; + m_minY = 10000; + m_maxX = -10000; + m_maxY = -10000; + + wxASSERT_MSG( file.IsEmpty() , wxT("no file based metafile support yet") ) ; + + m_metaFile = new wxMetaFile(wxEmptyString) ; + Rect r={0,0,1000,1000} ; + + m_metaFile->SetHMETAFILE( OpenPicture( &r ) ) ; + ::GetPort( (GrafPtr*) &m_macPort ) ; + m_ok = TRUE ; + + SetMapMode(wxMM_TEXT); } // New constructor that takes origin and extent. If you use this, don't @@ -157,21 +162,21 @@ wxMetaFileDC::wxMetaFileDC(const wxString& file) wxMetaFileDC::wxMetaFileDC(const wxString& file, int xext, int yext, int xorg, int yorg) { - m_minX = 10000; - m_minY = 10000; - m_maxX = -10000; - m_maxY = -10000; - - wxASSERT_MSG( file.IsEmpty() , "no file based metafile support yet") ; - - m_metaFile = new wxMetaFile("") ; - Rect r={yorg,xorg,yorg+yext,xorg+xext} ; - - m_metaFile->SetHMETAFILE( OpenPicture( &r ) ) ; - ::GetPort( &m_macPort ) ; - m_ok = TRUE ; - - SetMapMode(wxMM_TEXT); + m_minX = 10000; + m_minY = 10000; + m_maxX = -10000; + m_maxY = -10000; + + wxASSERT_MSG( file.IsEmpty() , wxT("no file based metafile support yet")) ; + + m_metaFile = new wxMetaFile(wxEmptyString) ; + Rect r={yorg,xorg,yorg+yext,xorg+xext} ; + + m_metaFile->SetHMETAFILE( OpenPicture( &r ) ) ; + ::GetPort( (GrafPtr*) &m_macPort ) ; + m_ok = TRUE ; + + SetMapMode(wxMM_TEXT); } wxMetaFileDC::~wxMetaFileDC() @@ -180,9 +185,30 @@ wxMetaFileDC::~wxMetaFileDC() wxMetaFile *wxMetaFileDC::Close() { - ClosePicture() ; - return m_metaFile; + ClosePicture() ; + return m_metaFile; +} + +#if wxUSE_DATAOBJ +size_t wxMetafileDataObject::GetDataSize() const +{ + return GetHandleSize( (Handle) (*((wxMetafile*)&m_metafile)).GetHMETAFILE() ) ; +} + +bool wxMetafileDataObject::GetDataHere(void *buf) const +{ + memcpy( buf , (*(PicHandle)(*((wxMetafile*)&m_metafile)).GetHMETAFILE()) , + GetHandleSize( (Handle) (*((wxMetafile*)&m_metafile)).GetHMETAFILE() ) ) ; + return true ; } +bool wxMetafileDataObject::SetData(size_t len, const void *buf) +{ + Handle handle = (Handle) m_metafile.GetHMETAFILE() ; + SetHandleSize( handle , len ) ; + memcpy( *handle , buf , len ) ; + return true ; +} +#endif #endif