From 52eeaca3addab4068c35d80ed8d67eb144706bfc Mon Sep 17 00:00:00 2001 From: "blizzard%redhat.com" Date: Tue, 8 Jun 1999 02:40:24 +0000 Subject: [PATCH] port performance enhancements from gtk fonts git-svn-id: svn://10.0.0.236/trunk@34165 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/gfx/src/xlib/nsFontMetricsXlib.cpp | 10 ++++++++++ mozilla/gfx/src/xlib/nsFontMetricsXlib.h | 3 +++ mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/mozilla/gfx/src/xlib/nsFontMetricsXlib.cpp b/mozilla/gfx/src/xlib/nsFontMetricsXlib.cpp index 09556ebc554..89925125dff 100644 --- a/mozilla/gfx/src/xlib/nsFontMetricsXlib.cpp +++ b/mozilla/gfx/src/xlib/nsFontMetricsXlib.cpp @@ -62,6 +62,7 @@ nsFontMetricsXlib::nsFontMetricsXlib() mStrikeoutOffset = 0; mUnderlineSize = 0; mUnderlineOffset = 0; + mSpaceWidth = 0; } nsFontMetricsXlib::~nsFontMetricsXlib() @@ -419,6 +420,8 @@ void nsFontMetricsXlib::RealizeFont() // 56% of ascent, best guess for non-true type mXHeight = NSToCoordRound((float) mFontHandle->ascent* f * 0.56f); + int rawWidth = XTextWidth(mFontHandle, " ", 1); + mSpaceWidth = NSToCoordRound(rawWidth * f); unsigned long pr = 0; if (::XGetFontProperty(mFontHandle, XA_X_HEIGHT, &pr)) @@ -2184,4 +2187,11 @@ nsFontMetricsXlib::DrawString(nsDrawingSurfaceXlib* aSurface, nsFontXlib* aFont, aX, aY, buf, (len / 2)); } +nsresult +nsFontMetricsXlib::GetSpaceWidth(nscoord &aSpaceWidth) +{ + aSpaceWidth = mSpaceWidth; + return NS_OK; +} + #endif /* FONT_SWITCHING */ diff --git a/mozilla/gfx/src/xlib/nsFontMetricsXlib.h b/mozilla/gfx/src/xlib/nsFontMetricsXlib.h index 658fb4dfd3f..8a227eaa823 100644 --- a/mozilla/gfx/src/xlib/nsFontMetricsXlib.h +++ b/mozilla/gfx/src/xlib/nsFontMetricsXlib.h @@ -102,6 +102,8 @@ public: NS_IMETHOD GetFont(const nsFont *&aFont); NS_IMETHOD GetFontHandle(nsFontHandle &aHandle); + virtual nsresult GetSpaceWidth(nscoord &aSpaceWidth); + #ifdef FONT_SWITCHING nsFontXlib* FindFont(PRUnichar aChar); @@ -152,6 +154,7 @@ protected: nscoord mStrikeoutOffset; nscoord mUnderlineSize; nscoord mUnderlineOffset; + nscoord mSpaceWidth; #ifdef FONT_SWITCHING diff --git a/mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp b/mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp index 0a87387c157..19f156fffc5 100644 --- a/mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp +++ b/mozilla/gfx/src/xlib/nsRenderingContextXlib.cpp @@ -958,6 +958,12 @@ NS_IMETHODIMP nsRenderingContextXlib::GetWidth(char aC, nscoord& aWidth) { printf("nsRenderingContextXlib::GetWidth()\n"); + // Check for the very common case of trying to get the width of a single + // space. + if ((aC == ' ') && (nsnull != mFontMetrics)) { + nsFontMetricsXlib* fontMetricsXlib = (nsFontMetricsXlib*)mFontMetrics; + return fontMetricsXlib->GetSpaceWidth(aWidth); + } return GetWidth(&aC, 1, aWidth); }