From c9ff9a39d05bc20c6ab6afdb52dacf6448945726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 3 Nov 2005 00:04:18 +0000 Subject: [PATCH] ServerFont::StringWidth() did not set the size of the face, and could therefore return wrong results. Activated it again to work-around the possible font deadlock. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14654 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ServerApp.cpp | 4 ++-- src/servers/app/ServerFont.cpp | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index aa671dabe5..c5140bb2e9 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -1347,13 +1347,13 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) if (!stringArray[i] || lengthArray[i] <= 0) widthArray[i] = 0.0; else { - widthArray[i] = fDesktop->GetDisplayDriver()->StringWidth(stringArray[i], lengthArray[i], font); + //widthArray[i] = fDesktop->GetDisplayDriver()->StringWidth(stringArray[i], lengthArray[i], font); // NOTE: The line below will return the exact same thing. However, // the line above uses the AGG rendering backend, for which glyph caching // actually works. It is about 20 times faster! // TODO: I've disabled the AGG version for now, as it produces a dead lock // (font use), that I am currently too lazy to investigate... -// widthArray[i] = font.StringWidth(stringArray[i], lengthArray[i]); + widthArray[i] = font.StringWidth(stringArray[i], lengthArray[i]); } } diff --git a/src/servers/app/ServerFont.cpp b/src/servers/app/ServerFont.cpp index 48ef156fde..6dc4a1e79a 100644 --- a/src/servers/app/ServerFont.cpp +++ b/src/servers/app/ServerFont.cpp @@ -556,8 +556,9 @@ ServerFont::GetEscapements(const char charArray[], int32 numChars, int32 numByte bool -ServerFont::GetBoundingBoxesAsString(const char charArray[], int32 numChars, BRect rectArray[], - bool string_escapement, font_metric_mode mode, escapement_delta delta) +ServerFont::GetBoundingBoxesAsString(const char charArray[], int32 numChars, + BRect rectArray[], bool string_escapement, font_metric_mode mode, + escapement_delta delta) { if (!fStyle || !charArray || numChars <= 0 || !rectArray) return false; @@ -629,7 +630,7 @@ ServerFont::GetBoundingBoxesForStrings(char *charArray[], int32 lengthArray[], FT_Set_Char_Size(face, 0, int32(fSize * 64), 72, 72); - for (int32 i=0; iglyph->metrics.horiAdvance / 64.0; + width += face->glyph->advance.x / 64.0; } } delete[] convertedBuffer;