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
This commit is contained in:
Kevin Ollivier 2006-10-26 00:22:56 +00:00
parent 4fa3f8c355
commit ccd67a6af8
3 changed files with 30 additions and 5 deletions

View File

@ -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;

View File

@ -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") );

View File

@ -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 )