wxMac Unicode support

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2003-03-27 20:33:32 +00:00
parent 44c44c82a3
commit 427ff66291
99 changed files with 1718 additions and 2166 deletions

View File

@@ -55,6 +55,8 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
case wxDF_TEXT:
break;
case wxDF_UNICODETEXT:
break;
case wxDF_BITMAP :
case wxDF_METAFILE :
break ;
@@ -77,15 +79,21 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
{
if (( err = GetScrapFlavorSize( scrapRef, dataFormat.GetFormatId(), &byteCount )) == noErr)
{
if ( dataFormat.GetType() == wxDF_TEXT )
byteCount++ ;
Size allocSize = byteCount ;
if ( dataFormat.GetType() == wxDF_TEXT )
allocSize += 1 ;
else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
allocSize += 2 ;
data = new char[ byteCount ] ;
data = new char[ allocSize ] ;
if (( err = GetScrapFlavorData( scrapRef, dataFormat.GetFormatId(), &byteCount , data )) == noErr )
{
*len = byteCount ;
*len = allocSize ;
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
if ( dataFormat.GetType() == wxDF_UNICODETEXT )
((wxChar*)data)[byteCount/2] = 0 ;
}
else
{
@@ -105,14 +113,19 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
if ( GetHandleSize( datahandle ) > 0 )
{
byteCount = GetHandleSize( datahandle ) ;
Size allocSize = byteCount ;
if ( dataFormat.GetType() == wxDF_TEXT )
data = new char[ byteCount + 1] ;
else
data = new char[ byteCount ] ;
allocSize += 1 ;
else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
allocSize += 2 ;
data = new char[ allocSize ] ;
memcpy( (char*) data , (char*) *datahandle , byteCount ) ;
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
if ( dataFormat.GetType() == wxDF_UNICODETEXT )
((wxChar*)data)[byteCount/2] = 0 ;
*len = byteCount ;
}
DisposeHandle( datahandle ) ;
@@ -123,10 +136,21 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
return NULL ;
}
if ( dataFormat.GetType() == wxDF_TEXT && wxApp::s_macDefaultEncodingIsPC )
{
wxMacConvertToPC((char*)data,(char*)data,byteCount) ;
wxString st = wxMacMakeStringFromCString( (char*) data ) ;
#if wxUSE_UNICODE
wxCharBuffer buf = st.ToAscii() ;
#else
char* buf = st ;
#endif
char* newdata = new char[strlen(buf)+1] ;
memcpy( newdata , buf , strlen(buf)+1 ) ;
delete[] ((char*) data ) ;
data = newdata ;
}
return data;
}
@@ -234,19 +258,19 @@ bool wxClipboard::AddData( wxDataObject *data )
{
wxTextDataObject* textDataObject = (wxTextDataObject*) data;
wxString str(textDataObject->GetText());
wxString mac ;
if ( wxApp::s_macDefaultEncodingIsPC )
{
mac = wxMacMakeMacStringFromPC(textDataObject->GetText()) ;
}
else
{
mac = textDataObject->GetText() ;
}
err = UMAPutScrap( mac.Length() , 'TEXT' , (void*) mac.c_str() ) ;
wxCharBuffer buf = wxMacStringToCString( str ) ;
err = UMAPutScrap( strlen(buf) , kScrapFlavorTypeText , (void*) buf.data() ) ;
}
break ;
#if wxUSE_UNICODE
case wxDF_UNICODETEXT :
{
wxTextDataObject* textDataObject = (wxTextDataObject*) data;
wxString str(textDataObject->GetText());
err = UMAPutScrap( str.Length() * sizeof(wxChar) , kScrapFlavorTypeUnicode , (void*) str.wc_str() ) ;
}
break ;
#endif
#if wxUSE_DRAG_AND_DROP
case wxDF_METAFILE:
{
@@ -255,7 +279,7 @@ bool wxClipboard::AddData( wxDataObject *data )
wxMetafile metaFile = metaFileDataObject->GetMetafile();
PicHandle pict = (PicHandle) metaFile.GetHMETAFILE() ;
HLock( (Handle) pict ) ;
err = UMAPutScrap( GetHandleSize( (Handle) pict ) , 'PICT' , *pict ) ;
err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
HUnlock( (Handle) pict ) ;
}
break ;
@@ -270,7 +294,7 @@ bool wxClipboard::AddData( wxDataObject *data )
pict = (PicHandle) bitmapDataObject->GetBitmap().GetPict( &created ) ;
HLock( (Handle) pict ) ;
err = UMAPutScrap( GetHandleSize( (Handle) pict ) , 'PICT' , *pict ) ;
err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
HUnlock( (Handle) pict ) ;
if ( created )
KillPicture( pict ) ;