unifying CFTypes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50577 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2007-12-08 17:48:58 +00:00
parent 504f8052fd
commit dbe4a80c57
29 changed files with 170 additions and 264 deletions

View File

@@ -1443,22 +1443,53 @@ bool wxMacCoreGraphicsContext::SetLogicalFunction( int function )
EnsureIsValid();
bool retval = false;
if ( function == wxCOPY )
bool shouldAntiAlias = true;
CGBlendMode mode = kCGBlendModeNormal;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if ( UMAGetSystemVersion() >= 0x1050 )
{
retval = true;
CGContextSetBlendMode( m_cgContext, kCGBlendModeNormal );
switch ( function )
{
// TODO find best corresponding porter duff modes
case wxCOPY :
mode = kCGBlendModeCopy;
break;
case wxCLEAR :
mode = kCGBlendModeClear;
break;
case wxXOR :
mode = kCGBlendModeXOR;
shouldAntiAlias = false;
break;
default :
retval = false;
break;
}
}
else if ( function == wxINVERT || function == wxXOR )
else
#endif
{
// change color to white
CGContextSetBlendMode( m_cgContext, kCGBlendModeExclusion );
CGContextSetShouldAntialias( m_cgContext, false );
retval = true;
if ( function == wxCOPY )
{
retval = true;
}
else if ( function == wxINVERT || function == wxXOR )
{
// change color to white
mode = kCGBlendModeExclusion;
shouldAntiAlias = false;
retval = true;
}
}
if (retval)
{
m_logicalFunction = function;
CGContextSetBlendMode( m_cgContext, mode );
CGContextSetShouldAntialias(m_cgContext, shouldAntiAlias);
}
return retval ;
}
@@ -1745,7 +1776,7 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
if ( UMAGetSystemVersion() >= 0x1050 )
{
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
wxMacCFStringHolder text(str, wxLocale::GetSystemEncoding() );
wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
CTFontRef font = fref->GetCTFont();
CGColorRef col = fref->GetColour().GetPixel();
CTUnderlineStyle ustyle = fref->GetUnderlined() ? kCTUnderlineStyleSingle : kCTUnderlineStyleNone ;
@@ -1797,34 +1828,11 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
{
OSStatus status = noErr;
ATSUTextLayout atsuLayout;
UniCharCount chars = str.length();
UniChar* ubuf = NULL;
#if SIZEOF_WCHAR_T == 4
wxMBConvUTF16 converter;
#if wxUSE_UNICODE
size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 );
ubuf = (UniChar*) malloc( unicharlen + 2 );
converter.WC2MB( (char*) ubuf , str.wc_str(), unicharlen + 2 );
#else
const wxWCharBuffer wchar = str.wc_str( wxConvLocal );
size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 );
ubuf = (UniChar*) malloc( unicharlen + 2 );
converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 );
#endif
chars = unicharlen / 2;
#else
#if wxUSE_UNICODE
ubuf = (UniChar*) str.wc_str();
#else
wxWCharBuffer wchar = str.wc_str( wxConvLocal );
chars = wxWcslen( wchar.data() );
ubuf = (UniChar*) wchar.data();
#endif
#endif
wxMacUniCharBuffer unibuf( str );
UniCharCount chars = unibuf.GetChars();
ATSUStyle style = (((wxMacCoreGraphicsFontData*)m_font.GetRefData())->GetATSUStyle());
status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) ubuf , 0 , chars , chars , 1 ,
status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
&chars , &style , &atsuLayout );
wxASSERT_MSG( status == noErr , wxT("couldn't create the layout of the rotated text") );
@@ -1897,9 +1905,6 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
::ATSUDisposeTextLayout(atsuLayout);
#if SIZEOF_WCHAR_T == 4
free( ubuf );
#endif
return;
}
#endif
@@ -1932,7 +1937,7 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
CTFontRef font = fref->GetCTFont();
wxMacCFStringHolder text(str, wxLocale::GetSystemEncoding() );
wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
CFStringRef keys[] = { kCTFontAttributeName };
CFTypeRef values[] = { font };
wxCFRef<CFDictionaryRef> attributes( CFDictionaryCreate(kCFAllocatorDefault, (const void**) &keys, (const void**) &values,
@@ -1960,34 +1965,11 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
OSStatus status = noErr;
ATSUTextLayout atsuLayout;
UniCharCount chars = str.length();
UniChar* ubuf = NULL;
#if SIZEOF_WCHAR_T == 4
wxMBConvUTF16 converter;
#if wxUSE_UNICODE
size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 );
ubuf = (UniChar*) malloc( unicharlen + 2 );
converter.WC2MB( (char*) ubuf , str.wc_str(), unicharlen + 2 );
#else
const wxWCharBuffer wchar = str.wc_str( wxConvLocal );
size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 );
ubuf = (UniChar*) malloc( unicharlen + 2 );
converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 );
#endif
chars = unicharlen / 2;
#else
#if wxUSE_UNICODE
ubuf = (UniChar*) str.wc_str();
#else
wxWCharBuffer wchar = str.wc_str( wxConvLocal );
chars = wxWcslen( wchar.data() );
ubuf = (UniChar*) wchar.data();
#endif
#endif
wxMacUniCharBuffer unibuf( str );
UniCharCount chars = unibuf.GetChars();
ATSUStyle style = (((wxMacCoreGraphicsFontData*)m_font.GetRefData())->GetATSUStyle());
status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) ubuf , 0 , chars , chars , 1 ,
status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
&chars , &style , &atsuLayout );
wxASSERT_MSG( status == noErr , wxT("couldn't create the layout of the text") );
@@ -2008,9 +1990,7 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
*width = FixedToInt(textAfter - textBefore);
::ATSUDisposeTextLayout(atsuLayout);
#if SIZEOF_WCHAR_T == 4
free( ubuf ) ;
#endif
return;
}
#endif
@@ -2032,7 +2012,7 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
CTFontRef font = fref->GetCTFont();
wxMacCFStringHolder t(text, wxLocale::GetSystemEncoding() );
wxCFStringRef t(text, wxLocale::GetSystemEncoding() );
CFStringRef keys[] = { kCTFontAttributeName };
CFTypeRef values[] = { font };
wxCFRef<CFDictionaryRef> attributes( CFDictionaryCreate(kCFAllocatorDefault, (const void**) &keys, (const void**) &values,
@@ -2052,34 +2032,11 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
#if wxMAC_USE_ATSU_TEXT
{
ATSUTextLayout atsuLayout;
UniCharCount chars = text.length();
UniChar* ubuf = NULL;
#if SIZEOF_WCHAR_T == 4
wxMBConvUTF16 converter;
#if wxUSE_UNICODE
size_t unicharlen = converter.WC2MB( NULL , text.wc_str() , 0 );
ubuf = (UniChar*) malloc( unicharlen + 2 );
converter.WC2MB( (char*) ubuf , text.wc_str(), unicharlen + 2 );
#else
const wxWCharBuffer wchar = text.wc_str( wxConvLocal );
size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 );
ubuf = (UniChar*) malloc( unicharlen + 2 );
converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 );
#endif
chars = unicharlen / 2;
#else
#if wxUSE_UNICODE
ubuf = (UniChar*) text.wc_str();
#else
wxWCharBuffer wchar = text.wc_str( wxConvLocal );
chars = wxWcslen( wchar.data() );
ubuf = (UniChar*) wchar.data();
#endif
#endif
wxMacUniCharBuffer unibuf( text );
UniCharCount chars = unibuf.GetChars();
ATSUStyle style = (((wxMacCoreGraphicsFontData*)m_font.GetRefData())->GetATSUStyle());
::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) ubuf , 0 , chars , chars , 1 ,
::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
&chars , &style , &atsuLayout );
for ( int pos = 0; pos < (int)chars; pos ++ )
@@ -2099,9 +2056,6 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
}
::ATSUDisposeTextLayout(atsuLayout);
#if SIZEOF_WCHAR_T == 4
free( ubuf ) ;
#endif
}
#endif
#if wxMAC_USE_CG_TEXT