From ccd67a6af88981a8c1a2b752a14051fe7698814b Mon Sep 17 00:00:00 2001 From: Kevin Ollivier Date: Thu, 26 Oct 2006 00:22:56 +0000 Subject: [PATCH] Override GetPixelSize on OS X as the base impl creates a wxScreenDC each time, which causes a significant performance hit. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42416 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mac/carbon/font.h | 1 + src/mac/carbon/font.cpp | 16 +++++++++++++++- src/mac/carbon/graphics.cpp | 18 ++++++++++++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/include/wx/mac/carbon/font.h b/include/wx/mac/carbon/font.h index 352a9a79f8..d7a69df50e 100644 --- a/include/wx/mac/carbon/font.h +++ b/include/wx/mac/carbon/font.h @@ -56,6 +56,7 @@ public: // implement base class pure virtuals virtual int GetPointSize() const; + virtual wxSize GetPixelSize() const; virtual int GetFamily() const; virtual int GetStyle() const; virtual int GetWeight() const; diff --git a/src/mac/carbon/font.cpp b/src/mac/carbon/font.cpp index e2c9d4f9a0..75ea3f918a 100644 --- a/src/mac/carbon/font.cpp +++ b/src/mac/carbon/font.cpp @@ -21,7 +21,7 @@ #endif #include "wx/fontutil.h" -#include "wx/fontutil.h" +#include "wx/graphics.h" #include "wx/mac/private.h" @@ -528,6 +528,20 @@ int wxFont::GetPointSize() const return M_FONTDATA->m_pointSize; } +wxSize wxFont::GetPixelSize() const +{ +#if wxUSE_GRAPHICS_CONTEXT + // TODO: consider caching the value + wxGraphicsContext* dc = wxGraphicsContext::CreateFromNative((CGContextRef) NULL); + dc->SetFont(*(wxFont *)this); + wxDouble width, height = 0; + dc->GetTextExtent( wxT("g"), &width, &height, NULL, NULL); + return wxSize(width, height); +#else + wxFontBase::GetPixelSize(); +#endif +} + int wxFont::GetFamily() const { wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") ); diff --git a/src/mac/carbon/graphics.cpp b/src/mac/carbon/graphics.cpp index 57e63acbbd..c9ad6509e1 100755 --- a/src/mac/carbon/graphics.cpp +++ b/src/mac/carbon/graphics.cpp @@ -353,10 +353,20 @@ void wxMacCoreGraphicsContext::Init() wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( CGContextRef cgcontext ) { - Init(); - m_cgContext = cgcontext; - CGContextSaveGState( m_cgContext ); - CGContextSaveGState( m_cgContext ); + Init(); + m_cgContext = cgcontext; + // FIXME: This check is needed because currently we need to use a DC/GraphicsContext + // in order to get font properties, like wxFont::GetPixelSize, but since we don't have + // a native window attached to use, I create a wxGraphicsContext with a NULL CGContextRef + // for this one operation. + + // When wxFont::GetPixelSize on Mac no longer needs a graphics context, this check + // can be removed. + if (m_cgContext) + { + CGContextSaveGState( m_cgContext ); + CGContextSaveGState( m_cgContext ); + } } wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( WindowRef window ) -- 2.47.2