CoreText is always available on 10.5+, so using all this code unconditionally, committing Vadim's suggestions with two extensions, see #15580
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75050 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -142,9 +142,7 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
void Init(CTFontDescriptorRef descr);
|
void Init(CTFontDescriptorRef descr);
|
||||||
#endif
|
|
||||||
void Init(const wxNativeFontInfo& info);
|
void Init(const wxNativeFontInfo& info);
|
||||||
void Init(int size,
|
void Init(int size,
|
||||||
wxFontFamily family,
|
wxFontFamily family,
|
||||||
|
@@ -30,7 +30,6 @@
|
|||||||
* text rendering system
|
* text rendering system
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define wxOSX_USE_CORE_TEXT 1
|
|
||||||
#define wxOSX_USE_ATSU_TEXT 1
|
#define wxOSX_USE_ATSU_TEXT 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -41,7 +41,6 @@
|
|||||||
* text rendering system
|
* text rendering system
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define wxOSX_USE_CORE_TEXT 1
|
|
||||||
#define wxOSX_USE_ATSU_TEXT 0
|
#define wxOSX_USE_ATSU_TEXT 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -152,9 +152,7 @@ public:
|
|||||||
CGFontRef OSXGetCGFont() const;
|
CGFontRef OSXGetCGFont() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
CTFontRef OSXGetCTFont() const;
|
CTFontRef OSXGetCTFont() const;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
// Returns an ATSUStyle not ATSUStyle*
|
// Returns an ATSUStyle not ATSUStyle*
|
||||||
|
@@ -19,7 +19,6 @@
|
|||||||
* under a certain platform
|
* under a certain platform
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define wxOSX_USE_CORE_TEXT 1
|
|
||||||
#define wxOSX_USE_ATSU_TEXT 0
|
#define wxOSX_USE_ATSU_TEXT 0
|
||||||
#define wxHAS_OPENGL_ES
|
#define wxHAS_OPENGL_ES
|
||||||
|
|
||||||
|
@@ -50,11 +50,9 @@ public:
|
|||||||
|
|
||||||
wxFontRefData(wxOSXSystemFont font, int size);
|
wxFontRefData(wxOSXSystemFont font, int size);
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
wxFontRefData( wxUint32 coreTextFontType );
|
wxFontRefData( wxUint32 coreTextFontType );
|
||||||
wxFontRefData( CTFontRef font );
|
wxFontRefData( CTFontRef font );
|
||||||
wxFontRefData( CTFontDescriptorRef fontdescriptor, int size );
|
wxFontRefData( CTFontDescriptorRef fontdescriptor, int size );
|
||||||
#endif
|
|
||||||
|
|
||||||
virtual ~wxFontRefData();
|
virtual ~wxFontRefData();
|
||||||
|
|
||||||
@@ -146,9 +144,6 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
void Init();
|
void Init();
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
// void Init( CTFontRef font );
|
|
||||||
#endif
|
|
||||||
public:
|
public:
|
||||||
bool m_fontValid;
|
bool m_fontValid;
|
||||||
#if wxOSX_USE_CARBON && wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_CARBON && wxOSX_USE_ATSU_TEXT
|
||||||
@@ -156,9 +151,7 @@ public:
|
|||||||
// information here, as this speeds up and optimizes rendering
|
// information here, as this speeds up and optimizes rendering
|
||||||
ThemeFontID m_macThemeFontID ;
|
ThemeFontID m_macThemeFontID ;
|
||||||
#endif
|
#endif
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
wxCFRef<CTFontRef> m_ctFont;
|
wxCFRef<CTFontRef> m_ctFont;
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
void CreateATSUFont();
|
void CreateATSUFont();
|
||||||
|
|
||||||
@@ -184,9 +177,7 @@ wxFontRefData::wxFontRefData(const wxFontRefData& data) : wxGDIRefData()
|
|||||||
#if wxOSX_USE_CARBON && wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_CARBON && wxOSX_USE_ATSU_TEXT
|
||||||
m_macThemeFontID = data.m_macThemeFontID;
|
m_macThemeFontID = data.m_macThemeFontID;
|
||||||
#endif
|
#endif
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
m_ctFont = data.m_ctFont;
|
m_ctFont = data.m_ctFont;
|
||||||
#endif
|
|
||||||
m_cgFont = data.m_cgFont;
|
m_cgFont = data.m_cgFont;
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
if ( data.m_macATSUStyle != NULL )
|
if ( data.m_macATSUStyle != NULL )
|
||||||
@@ -236,9 +227,7 @@ wxFontRefData::~wxFontRefData()
|
|||||||
|
|
||||||
void wxFontRefData::Free()
|
void wxFontRefData::Free()
|
||||||
{
|
{
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
m_ctFont.reset();
|
m_ctFont.reset();
|
||||||
#endif
|
|
||||||
m_cgFont.reset();
|
m_cgFont.reset();
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
#if wxOSX_USE_CARBON
|
#if wxOSX_USE_CARBON
|
||||||
@@ -272,7 +261,6 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
|
|||||||
wxASSERT( font != wxOSX_SYSTEM_FONT_NONE );
|
wxASSERT( font != wxOSX_SYSTEM_FONT_NONE );
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
{
|
||||||
CTFontUIFontType uifont = kCTFontSystemFontType;
|
CTFontUIFontType uifont = kCTFontSystemFontType;
|
||||||
switch( font )
|
switch( font )
|
||||||
@@ -309,7 +297,6 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
|
|||||||
descr.reset( CTFontCopyFontDescriptor( m_ctFont ) );
|
descr.reset( CTFontCopyFontDescriptor( m_ctFont ) );
|
||||||
m_info.Init(descr);
|
m_info.Init(descr);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
{
|
{
|
||||||
#if !wxOSX_USE_CARBON
|
#if !wxOSX_USE_CARBON
|
||||||
@@ -464,7 +451,6 @@ void wxFontRefData::MacFindFont()
|
|||||||
|
|
||||||
m_info.EnsureValid();
|
m_info.EnsureValid();
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
{
|
||||||
CTFontSymbolicTraits traits = 0;
|
CTFontSymbolicTraits traits = 0;
|
||||||
|
|
||||||
@@ -527,8 +513,6 @@ void wxFontRefData::MacFindFont()
|
|||||||
|
|
||||||
m_cgFont.reset(CTFontCopyGraphicsFont(m_ctFont, NULL));
|
m_cgFont.reset(CTFontCopyGraphicsFont(m_ctFont, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
CreateATSUFont();
|
CreateATSUFont();
|
||||||
#endif
|
#endif
|
||||||
@@ -543,12 +527,8 @@ void wxFontRefData::MacFindFont()
|
|||||||
|
|
||||||
bool wxFontRefData::IsFixedWidth() const
|
bool wxFontRefData::IsFixedWidth() const
|
||||||
{
|
{
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_ctFont);
|
CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_ctFont);
|
||||||
return (traits & kCTFontMonoSpaceTrait) != 0;
|
return (traits & kCTFontMonoSpaceTrait) != 0;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -852,8 +832,6 @@ wxUint32 wxFont::MacGetATSUAdditionalQDStyles() const
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
|
|
||||||
CTFontRef wxFont::OSXGetCTFont() const
|
CTFontRef wxFont::OSXGetCTFont() const
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
|
wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
|
||||||
@@ -864,8 +842,6 @@ CTFontRef wxFont::OSXGetCTFont() const
|
|||||||
return (CTFontRef)(M_FONTDATA->m_ctFont);
|
return (CTFontRef)(M_FONTDATA->m_ctFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if wxOSX_USE_COCOA_OR_CARBON
|
#if wxOSX_USE_COCOA_OR_CARBON
|
||||||
|
|
||||||
CGFontRef wxFont::OSXGetCGFont() const
|
CGFontRef wxFont::OSXGetCGFont() const
|
||||||
@@ -1005,7 +981,6 @@ void wxNativeFontInfo::Init()
|
|||||||
m_descriptorValid = false;
|
m_descriptorValid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
void wxNativeFontInfo::Init(CTFontDescriptorRef descr)
|
void wxNativeFontInfo::Init(CTFontDescriptorRef descr)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
@@ -1028,7 +1003,6 @@ void wxNativeFontInfo::Init(CTFontDescriptorRef descr)
|
|||||||
wxCFStringRef familyName( (CFStringRef) CTFontDescriptorCopyAttribute(descr, kCTFontFamilyNameAttribute));
|
wxCFStringRef familyName( (CFStringRef) CTFontDescriptorCopyAttribute(descr, kCTFontFamilyNameAttribute));
|
||||||
m_faceName = familyName.AsString();
|
m_faceName = familyName.AsString();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void wxNativeFontInfo::EnsureValid()
|
void wxNativeFontInfo::EnsureValid()
|
||||||
{
|
{
|
||||||
|
@@ -76,7 +76,6 @@ wxMacCarbonFontPanelHandler(EventHandlerCallRef WXUNUSED(nextHandler),
|
|||||||
case kEventFontSelection :
|
case kEventFontSelection :
|
||||||
{
|
{
|
||||||
bool setup = false ;
|
bool setup = false ;
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
if ( !setup )
|
if ( !setup )
|
||||||
{
|
{
|
||||||
CTFontDescriptorRef descr;
|
CTFontDescriptorRef descr;
|
||||||
@@ -90,7 +89,6 @@ wxMacCarbonFontPanelHandler(EventHandlerCallRef WXUNUSED(nextHandler),
|
|||||||
setup = true;
|
setup = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
ATSUFontID fontId = 0 ;
|
ATSUFontID fontId = 0 ;
|
||||||
if ( !setup && (cEvent.GetParameter<ATSUFontID>(kEventParamATSUFontID, &fontId) == noErr) )
|
if ( !setup && (cEvent.GetParameter<ATSUFontID>(kEventParamATSUFontID, &fontId) == noErr) )
|
||||||
@@ -240,24 +238,10 @@ int wxFontDialog::ShowModal()
|
|||||||
font = m_fontData.m_initialFont ;
|
font = m_fontData.m_initialFont ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool setup = false;
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
if ( !setup )
|
|
||||||
{
|
|
||||||
CTFontDescriptorRef descr = (CTFontDescriptorRef) CTFontCopyFontDescriptor( (CTFontRef) font.OSXGetCTFont() );
|
CTFontDescriptorRef descr = (CTFontDescriptorRef) CTFontCopyFontDescriptor( (CTFontRef) font.OSXGetCTFont() );
|
||||||
err = SetFontInfoForSelection (kFontSelectionCoreTextType,1, &descr , NULL);
|
err = SetFontInfoForSelection (kFontSelectionCoreTextType,1, &descr , NULL);
|
||||||
CFRelease( descr );
|
CFRelease( descr );
|
||||||
setup = true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
|
||||||
if ( !setup )
|
|
||||||
{
|
|
||||||
ATSUStyle style = (ATSUStyle)font.MacGetATSUStyle();
|
|
||||||
err = SetFontInfoForSelection (kFontSelectionATSUIType,1, &style , NULL);
|
|
||||||
setup = true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// just clicking on ENTER will not send us any font setting event, therefore we have to make sure
|
// just clicking on ENTER will not send us any font setting event, therefore we have to make sure
|
||||||
// that field is already correct
|
// that field is already correct
|
||||||
m_fontData.m_chosenFont = font ;
|
m_fontData.m_chosenFont = font ;
|
||||||
|
@@ -66,8 +66,6 @@ int UMAGetSystemVersion()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define wxOSX_USE_CORE_TEXT 1
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxOSX_USE_COCOA_OR_IPHONE
|
#if wxOSX_USE_COCOA_OR_IPHONE
|
||||||
@@ -146,8 +144,6 @@ CGColorRef wxMacCreateCGColor( const wxColour& col )
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
|
|
||||||
CTFontRef wxMacCreateCTFont( const wxFont& font )
|
CTFontRef wxMacCreateCTFont( const wxFont& font )
|
||||||
{
|
{
|
||||||
#ifdef __WXMAC__
|
#ifdef __WXMAC__
|
||||||
@@ -157,8 +153,6 @@ CTFontRef wxMacCreateCTFont( const wxFont& font )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// CGPattern wrapper class: always allocate on heap, never call destructor
|
// CGPattern wrapper class: always allocate on heap, never call destructor
|
||||||
|
|
||||||
class wxMacCoreGraphicsPattern
|
class wxMacCoreGraphicsPattern
|
||||||
@@ -860,9 +854,7 @@ public:
|
|||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
virtual ATSUStyle GetATSUStyle() { return m_macATSUIStyle; }
|
virtual ATSUStyle GetATSUStyle() { return m_macATSUIStyle; }
|
||||||
#endif
|
#endif
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
CTFontRef OSXGetCTFont() const { return m_ctFont ; }
|
CTFontRef OSXGetCTFont() const { return m_ctFont ; }
|
||||||
#endif
|
|
||||||
wxColour GetColour() const { return m_colour ; }
|
wxColour GetColour() const { return m_colour ; }
|
||||||
|
|
||||||
bool GetUnderlined() const { return m_underlined ; }
|
bool GetUnderlined() const { return m_underlined ; }
|
||||||
@@ -875,9 +867,7 @@ private :
|
|||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
ATSUStyle m_macATSUIStyle;
|
ATSUStyle m_macATSUIStyle;
|
||||||
#endif
|
#endif
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
wxCFRef< CTFontRef > m_ctFont;
|
wxCFRef< CTFontRef > m_ctFont;
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_IPHONE
|
#if wxOSX_USE_IPHONE
|
||||||
UIFont* m_uiFont;
|
UIFont* m_uiFont;
|
||||||
#endif
|
#endif
|
||||||
@@ -888,9 +878,7 @@ wxMacCoreGraphicsFontData::wxMacCoreGraphicsFontData(wxGraphicsRenderer* rendere
|
|||||||
m_colour = col;
|
m_colour = col;
|
||||||
m_underlined = font.GetUnderlined();
|
m_underlined = font.GetUnderlined();
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
m_ctFont.reset( wxMacCreateCTFont( font ) );
|
m_ctFont.reset( wxMacCreateCTFont( font ) );
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_IPHONE
|
#if wxOSX_USE_IPHONE
|
||||||
m_uiFont = CreateUIFont(font);
|
m_uiFont = CreateUIFont(font);
|
||||||
wxMacCocoaRetain( m_uiFont );
|
wxMacCocoaRetain( m_uiFont );
|
||||||
@@ -934,8 +922,6 @@ wxMacCoreGraphicsFontData::wxMacCoreGraphicsFontData(wxGraphicsRenderer* rendere
|
|||||||
|
|
||||||
wxMacCoreGraphicsFontData::~wxMacCoreGraphicsFontData()
|
wxMacCoreGraphicsFontData::~wxMacCoreGraphicsFontData()
|
||||||
{
|
{
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
if ( m_macATSUIStyle )
|
if ( m_macATSUIStyle )
|
||||||
{
|
{
|
||||||
@@ -2303,8 +2289,6 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo
|
|||||||
if (m_composition == wxCOMPOSITION_DEST)
|
if (m_composition == wxCOMPOSITION_DEST)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
|
||||||
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
||||||
wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
|
wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
|
||||||
CTFontRef font = fref->OSXGetCTFont();
|
CTFontRef font = fref->OSXGetCTFont();
|
||||||
@@ -2351,32 +2335,6 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo
|
|||||||
CGContextSetTextMatrix(m_cgContext, textMatrix);
|
CGContextSetTextMatrix(m_cgContext, textMatrix);
|
||||||
CGColorRelease( col );
|
CGColorRelease( col );
|
||||||
CheckInvariants();
|
CheckInvariants();
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
|
||||||
{
|
|
||||||
DrawText(str, x, y, 0.0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_IPHONE
|
|
||||||
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
|
||||||
|
|
||||||
CGContextSaveGState(m_cgContext);
|
|
||||||
|
|
||||||
CGColorRef col = wxMacCreateCGColor( fref->GetColour() );
|
|
||||||
CGContextSetTextDrawingMode (m_cgContext, kCGTextFill);
|
|
||||||
CGContextSetFillColorWithColor( m_cgContext, col );
|
|
||||||
|
|
||||||
wxCFStringRef text(str, wxLocale::GetSystemEncoding() );
|
|
||||||
DrawTextInContext( m_cgContext, CGPointMake( x, y ), fref->GetUIFont() , text.AsNSString() );
|
|
||||||
|
|
||||||
CGContextRestoreGState(m_cgContext);
|
|
||||||
CFRelease( col );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CheckInvariants();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMacCoreGraphicsContext::DoDrawRotatedText(const wxString &str,
|
void wxMacCoreGraphicsContext::DoDrawRotatedText(const wxString &str,
|
||||||
@@ -2391,102 +2349,8 @@ void wxMacCoreGraphicsContext::DoDrawRotatedText(const wxString &str,
|
|||||||
if (m_composition == wxCOMPOSITION_DEST)
|
if (m_composition == wxCOMPOSITION_DEST)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
|
||||||
// default implementation takes care of rotation and calls non rotated DrawText afterwards
|
// default implementation takes care of rotation and calls non rotated DrawText afterwards
|
||||||
wxGraphicsContext::DoDrawRotatedText( str, x, y, angle );
|
wxGraphicsContext::DoDrawRotatedText( str, x, y, angle );
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
|
||||||
{
|
|
||||||
OSStatus status = noErr;
|
|
||||||
ATSUTextLayout atsuLayout;
|
|
||||||
wxMacUniCharBuffer unibuf( str );
|
|
||||||
UniCharCount chars = unibuf.GetChars();
|
|
||||||
|
|
||||||
ATSUStyle style = (((wxMacCoreGraphicsFontData*)m_font.GetRefData())->GetATSUStyle());
|
|
||||||
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") );
|
|
||||||
|
|
||||||
status = ::ATSUSetTransientFontMatching( atsuLayout , true );
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
|
|
||||||
|
|
||||||
int iAngle = int( angle * RAD2DEG );
|
|
||||||
if ( abs(iAngle) > 0 )
|
|
||||||
{
|
|
||||||
Fixed atsuAngle = IntToFixed( iAngle );
|
|
||||||
ATSUAttributeTag atsuTags[] =
|
|
||||||
{
|
|
||||||
kATSULineRotationTag ,
|
|
||||||
};
|
|
||||||
ByteCount atsuSizes[WXSIZEOF(atsuTags)] =
|
|
||||||
{
|
|
||||||
sizeof( Fixed ) ,
|
|
||||||
};
|
|
||||||
ATSUAttributeValuePtr atsuValues[WXSIZEOF(atsuTags)] =
|
|
||||||
{
|
|
||||||
&atsuAngle ,
|
|
||||||
};
|
|
||||||
status = ::ATSUSetLayoutControls(atsuLayout , WXSIZEOF(atsuTags),
|
|
||||||
atsuTags, atsuSizes, atsuValues );
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
ATSUAttributeTag atsuTags[] =
|
|
||||||
{
|
|
||||||
kATSUCGContextTag ,
|
|
||||||
};
|
|
||||||
ByteCount atsuSizes[WXSIZEOF(atsuTags)] =
|
|
||||||
{
|
|
||||||
sizeof( CGContextRef ) ,
|
|
||||||
};
|
|
||||||
ATSUAttributeValuePtr atsuValues[WXSIZEOF(atsuTags)] =
|
|
||||||
{
|
|
||||||
&m_cgContext ,
|
|
||||||
};
|
|
||||||
status = ::ATSUSetLayoutControls(atsuLayout , WXSIZEOF(atsuTags),
|
|
||||||
atsuTags, atsuSizes, atsuValues );
|
|
||||||
}
|
|
||||||
|
|
||||||
ATSUTextMeasurement textBefore, textAfter;
|
|
||||||
ATSUTextMeasurement ascent, descent;
|
|
||||||
|
|
||||||
status = ::ATSUGetUnjustifiedBounds( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
|
||||||
&textBefore , &textAfter, &ascent , &descent );
|
|
||||||
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't measure the rotated text") );
|
|
||||||
|
|
||||||
Rect rect;
|
|
||||||
x += (int)(sin(angle) * FixedToFloat(ascent));
|
|
||||||
y += (int)(cos(angle) * FixedToFloat(ascent));
|
|
||||||
|
|
||||||
status = ::ATSUMeasureTextImage( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
|
||||||
IntToFixed(x) , IntToFixed(y) , &rect );
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't measure the rotated text") );
|
|
||||||
|
|
||||||
CGContextSaveGState(m_cgContext);
|
|
||||||
CGContextTranslateCTM(m_cgContext, (CGFloat) x, (CGFloat) y);
|
|
||||||
CGContextScaleCTM(m_cgContext, 1, -1);
|
|
||||||
status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
|
||||||
IntToFixed(0) , IntToFixed(0) );
|
|
||||||
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't draw the rotated text") );
|
|
||||||
|
|
||||||
CGContextRestoreGState(m_cgContext);
|
|
||||||
|
|
||||||
::ATSUDisposeTextLayout(atsuLayout);
|
|
||||||
CheckInvariants();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_IPHONE
|
|
||||||
// default implementation takes care of rotation and calls non rotated DrawText afterwards
|
|
||||||
wxGraphicsContext::DoDrawRotatedText( str, x, y, angle );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CheckInvariants();
|
CheckInvariants();
|
||||||
}
|
}
|
||||||
@@ -2512,8 +2376,6 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
|
|||||||
if (str.empty())
|
if (str.empty())
|
||||||
strToMeasure = wxS(" ");
|
strToMeasure = wxS(" ");
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
|
||||||
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
||||||
CTFontRef font = fref->OSXGetCTFont();
|
CTFontRef font = fref->OSXGetCTFont();
|
||||||
|
|
||||||
@@ -2540,71 +2402,6 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
|
|||||||
*descent = d;
|
*descent = d;
|
||||||
if ( externalLeading )
|
if ( externalLeading )
|
||||||
*externalLeading = l;
|
*externalLeading = l;
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
|
||||||
{
|
|
||||||
OSStatus status = noErr;
|
|
||||||
|
|
||||||
ATSUTextLayout atsuLayout;
|
|
||||||
wxMacUniCharBuffer unibuf( strToMeasure );
|
|
||||||
UniCharCount chars = unibuf.GetChars();
|
|
||||||
|
|
||||||
ATSUStyle style = (((wxMacCoreGraphicsFontData*)m_font.GetRefData())->GetATSUStyle());
|
|
||||||
status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
|
|
||||||
&chars , &style , &atsuLayout );
|
|
||||||
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't create the layout of the text") );
|
|
||||||
|
|
||||||
status = ::ATSUSetTransientFontMatching( atsuLayout , true );
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
|
|
||||||
|
|
||||||
ATSUTextMeasurement textBefore, textAfter;
|
|
||||||
ATSUTextMeasurement textAscent, textDescent;
|
|
||||||
|
|
||||||
status = ::ATSUGetUnjustifiedBounds( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
|
||||||
&textBefore , &textAfter, &textAscent , &textDescent );
|
|
||||||
|
|
||||||
if ( !str.empty() )
|
|
||||||
{
|
|
||||||
if ( width )
|
|
||||||
*width = FixedToFloat(textAfter - textBefore);
|
|
||||||
if ( height )
|
|
||||||
*height = FixedToFloat(textAscent + textDescent);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( descent )
|
|
||||||
*descent = FixedToFloat(textDescent);
|
|
||||||
if ( externalLeading )
|
|
||||||
*externalLeading = 0;
|
|
||||||
|
|
||||||
::ATSUDisposeTextLayout(atsuLayout);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_IPHONE
|
|
||||||
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
|
||||||
|
|
||||||
wxCFStringRef text(strToMeasure, wxLocale::GetSystemEncoding() );
|
|
||||||
CGSize sz = MeasureTextInContext( fref->GetUIFont() , text.AsNSString() );
|
|
||||||
|
|
||||||
if ( !str.empty() )
|
|
||||||
{
|
|
||||||
if ( width )
|
|
||||||
*width = sz.width;
|
|
||||||
if ( height )
|
|
||||||
*height = sz.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
if ( descent )
|
|
||||||
*descent = FixedToFloat(textDescent);
|
|
||||||
if ( externalLeading )
|
|
||||||
*externalLeading = 0;
|
|
||||||
*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CheckInvariants();
|
CheckInvariants();
|
||||||
}
|
}
|
||||||
@@ -2619,8 +2416,6 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
|
|||||||
if (text.empty())
|
if (text.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
|
||||||
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
|
||||||
CTFontRef font = fref->OSXGetCTFont();
|
CTFontRef font = fref->OSXGetCTFont();
|
||||||
|
|
||||||
@@ -2638,74 +2433,6 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
|
|||||||
widths[pos] = CTLineGetOffsetForStringIndex( line, pos+1 , NULL );
|
widths[pos] = CTLineGetOffsetForStringIndex( line, pos+1 , NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
|
||||||
{
|
|
||||||
OSStatus status = noErr;
|
|
||||||
ATSUTextLayout atsuLayout;
|
|
||||||
wxMacUniCharBuffer unibuf( text );
|
|
||||||
UniCharCount chars = unibuf.GetChars();
|
|
||||||
|
|
||||||
ATSUStyle style = (((wxMacCoreGraphicsFontData*)m_font.GetRefData())->GetATSUStyle());
|
|
||||||
status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
|
|
||||||
&chars , &style , &atsuLayout );
|
|
||||||
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't create the layout of the text") );
|
|
||||||
|
|
||||||
status = ::ATSUSetTransientFontMatching( atsuLayout , true );
|
|
||||||
wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
|
|
||||||
|
|
||||||
// new implementation from JS, keep old one just in case
|
|
||||||
#if 0
|
|
||||||
for ( int pos = 0; pos < (int)chars; pos ++ )
|
|
||||||
{
|
|
||||||
unsigned long actualNumberOfBounds = 0;
|
|
||||||
ATSTrapezoid glyphBounds;
|
|
||||||
|
|
||||||
// We get a single bound, since the text should only require one. If it requires more, there is an issue
|
|
||||||
OSStatus result;
|
|
||||||
result = ATSUGetGlyphBounds( atsuLayout, 0, 0, kATSUFromTextBeginning, pos + 1,
|
|
||||||
kATSUseDeviceOrigins, 1, &glyphBounds, &actualNumberOfBounds );
|
|
||||||
if (result != noErr || actualNumberOfBounds != 1 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
widths[pos] = FixedToFloat( glyphBounds.upperRight.x - glyphBounds.upperLeft.x );
|
|
||||||
//unsigned char uch = s[i];
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
ATSLayoutRecord *layoutRecords = NULL;
|
|
||||||
ItemCount glyphCount = 0;
|
|
||||||
|
|
||||||
// Get the glyph extents
|
|
||||||
OSStatus err = ::ATSUDirectGetLayoutDataArrayPtrFromTextLayout(atsuLayout,
|
|
||||||
0,
|
|
||||||
kATSUDirectDataLayoutRecordATSLayoutRecordCurrent,
|
|
||||||
(void **)
|
|
||||||
&layoutRecords,
|
|
||||||
&glyphCount);
|
|
||||||
wxASSERT(glyphCount == (text.length()+1));
|
|
||||||
|
|
||||||
if ( err == noErr && glyphCount == (text.length()+1))
|
|
||||||
{
|
|
||||||
for ( int pos = 1; pos < (int)glyphCount ; pos ++ )
|
|
||||||
{
|
|
||||||
widths[pos-1] = FixedToFloat( layoutRecords[pos].realPos );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
::ATSUDirectReleaseLayoutDataArrayPtr(NULL,
|
|
||||||
kATSUDirectDataLayoutRecordATSLayoutRecordCurrent,
|
|
||||||
(void **) &layoutRecords);
|
|
||||||
#endif
|
|
||||||
::ATSUDisposeTextLayout(atsuLayout);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_IPHONE
|
|
||||||
// TODO core graphics text implementation here
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CheckInvariants();
|
CheckInvariants();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2853,32 +2853,14 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
|
|||||||
|
|
||||||
HIThemeTextHorizontalFlush hFlush = kHIThemeTextHorizontalFlushLeft;
|
HIThemeTextHorizontalFlush hFlush = kHIThemeTextHorizontalFlushLeft;
|
||||||
HIThemeTextInfo info;
|
HIThemeTextInfo info;
|
||||||
bool setup = false;
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
info.version = kHIThemeTextInfoVersionOne;
|
info.version = kHIThemeTextInfoVersionOne;
|
||||||
info.fontID = kThemeViewsFont;
|
info.fontID = kThemeViewsFont;
|
||||||
if (font.IsOk())
|
if (font.IsOk())
|
||||||
{
|
{
|
||||||
info.fontID = kThemeSpecifiedFont;
|
info.fontID = kThemeSpecifiedFont;
|
||||||
info.font = (CTFontRef) font.OSXGetCTFont();
|
info.font = (CTFontRef) font.OSXGetCTFont();
|
||||||
setup = true;
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
|
||||||
if ( !setup )
|
|
||||||
{
|
|
||||||
info.version = kHIThemeTextInfoVersionZero;
|
|
||||||
info.fontID = kThemeViewsFont;
|
|
||||||
|
|
||||||
if (font.IsOk())
|
|
||||||
{
|
|
||||||
info.fontID = font.MacGetThemeFontID();
|
|
||||||
|
|
||||||
::TextSize( (short)(font.GetPointSize()) ) ;
|
|
||||||
::TextFace( font.MacGetFontStyle() ) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxListItem item;
|
wxListItem item;
|
||||||
list->GetColumn(listColumn, item);
|
list->GetColumn(listColumn, item);
|
||||||
|
@@ -1178,7 +1178,6 @@ void wxMacControl::SuperChangedPosition()
|
|||||||
void wxMacControl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack )
|
void wxMacControl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack )
|
||||||
{
|
{
|
||||||
m_font = font;
|
m_font = font;
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
HIViewPartCode part = 0;
|
HIViewPartCode part = 0;
|
||||||
HIThemeTextHorizontalFlush flush = kHIThemeTextHorizontalFlushDefault;
|
HIThemeTextHorizontalFlush flush = kHIThemeTextHorizontalFlushDefault;
|
||||||
if ( ( windowStyle & wxALIGN_MASK ) & wxALIGN_CENTER_HORIZONTAL )
|
if ( ( windowStyle & wxALIGN_MASK ) & wxALIGN_CENTER_HORIZONTAL )
|
||||||
@@ -1195,7 +1194,6 @@ void wxMacControl::SetFont( const wxFont & font , const wxColour& foreground , l
|
|||||||
fontStyle.flags = kControlUseForeColorMask;
|
fontStyle.flags = kControlUseForeColorMask;
|
||||||
::SetControlFontStyle( m_controlRef , &fontStyle );
|
::SetControlFontStyle( m_controlRef , &fontStyle );
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#if wxOSX_USE_ATSU_TEXT
|
#if wxOSX_USE_ATSU_TEXT
|
||||||
ControlFontStyleRec fontStyle;
|
ControlFontStyleRec fontStyle;
|
||||||
if ( font.MacGetThemeFontID() != kThemeCurrentPortFont )
|
if ( font.MacGetThemeFontID() != kThemeCurrentPortFont )
|
||||||
|
@@ -41,7 +41,6 @@ bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
|
|||||||
|
|
||||||
wxUint32 macEncoding = wxMacGetSystemEncFromFontEnc(encoding) ;
|
wxUint32 macEncoding = wxMacGetSystemEncFromFontEnc(encoding) ;
|
||||||
|
|
||||||
#if wxOSX_USE_CORE_TEXT
|
|
||||||
{
|
{
|
||||||
CFArrayRef cfFontFamilies = nil;
|
CFArrayRef cfFontFamilies = nil;
|
||||||
|
|
||||||
@@ -127,7 +126,6 @@ bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
|
|||||||
|
|
||||||
CFRelease(cfFontFamilies);
|
CFRelease(cfFontFamilies);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
for ( size_t i = 0 ; i < fontFamilies.Count() ; ++i )
|
for ( size_t i = 0 ; i < fontFamilies.Count() ; ++i )
|
||||||
{
|
{
|
||||||
if ( OnFacename( fontFamilies[i] ) == false )
|
if ( OnFacename( fontFamilies[i] ) == false )
|
||||||
|
Reference in New Issue
Block a user