diff --git a/headers/private/servers/app/ServerFont.h b/headers/private/servers/app/ServerFont.h index 71e78de564..e8a3debae0 100644 --- a/headers/private/servers/app/ServerFont.h +++ b/headers/private/servers/app/ServerFont.h @@ -131,7 +131,7 @@ class ServerFont { escapement_delta delta) const; bool GetBoundingBoxesAsString(const char charArray[], - int32 numChars, BRect rectArray[], + int32 numChars, BRect rectArray[], bool string_escapement, font_metric_mode mode, escapement_delta delta); bool GetBoundingBoxesForStrings(char *charArray[], int32 lengthArray[], diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp index 8025364203..9446e875d1 100644 --- a/src/kits/interface/View.cpp +++ b/src/kits/interface/View.cpp @@ -2336,21 +2336,21 @@ BView::DrawChar(char c, BPoint location) void BView::DrawString(const char *string, escapement_delta *delta) { - DrawString(string, strlen(string), PenLocation()); + DrawString(string, strlen(string), PenLocation(), delta); } void BView::DrawString(const char *string, BPoint location, escapement_delta *delta) { - DrawString(string, strlen(string), location); + DrawString(string, strlen(string), location, delta); } void BView::DrawString(const char *string, int32 length, escapement_delta *delta) { - DrawString(string, length, PenLocation()); + DrawString(string, length, PenLocation(), delta); } diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index ba82314d57..4a0edd2507 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -2008,7 +2008,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) font.SetFlags(flags); // TODO implement for real - if (font.GetBoundingBoxesAsString(charArray, numChars, rectArray, mode, delta)) { + if (font.GetBoundingBoxesAsString(charArray, numChars, rectArray, string_escapement, mode, delta)) { fLink.StartMessage(SERVER_TRUE); fLink.Attach(rectArray, sizeof(rectArray)); success = true; diff --git a/src/servers/app/ServerFont.cpp b/src/servers/app/ServerFont.cpp index 11681c6231..dec229ff2c 100644 --- a/src/servers/app/ServerFont.cpp +++ b/src/servers/app/ServerFont.cpp @@ -526,7 +526,7 @@ ServerFont::GetEscapements(const char charArray[], int32 numChars, bool ServerFont::GetBoundingBoxesAsString(const char charArray[], int32 numChars, BRect rectArray[], - font_metric_mode mode, escapement_delta delta) + bool string_escapement, font_metric_mode mode, escapement_delta delta) { if (!fStyle || !charArray || numChars <= 0 || !rectArray) return false; @@ -558,10 +558,18 @@ ServerFont::GetBoundingBoxesAsString(const char charArray[], int32 numChars, BRe numChars = min_c((uint32)numChars, convertedLength / sizeof(uint16)); for (int i = 0; i < numChars; i++) { + if (string_escapement) { + if (i>0) + rectArray[i].OffsetBy(is_white_space(glyphIndex[i-1]) ? delta.space/2.0 : delta.nonspace/2.0, 0.0); + rectArray[i].OffsetBy(is_white_space(glyphIndex[i]) ? delta.space/2.0 : delta.nonspace/2.0, 0.0); + } FT_Load_Char(face, glyphIndex[i], FT_LOAD_NO_BITMAP); if (face->glyph) { - rectArray[i].left = float(face->glyph->metrics.horiBearingX) /64.0; - rectArray[i].right = float(face->glyph->metrics.horiBearingX + if (iglyph->metrics.horiAdvance / 64.0; + rectArray[i].left += float(face->glyph->metrics.horiBearingX) /64.0; + rectArray[i].right += float(face->glyph->metrics.horiBearingX + face->glyph->metrics.width)/64.0; rectArray[i].top = -float(face->glyph->metrics.horiBearingY) /64.0; rectArray[i].bottom = float(face->glyph->metrics.height diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 457cb9a804..35c5307b6a 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -2075,7 +2075,7 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link) if (fCurrentLayer && fCurrentLayer->fLayerData) driver->DrawString(string, length, fCurrentLayer->ConvertToTop(location), - fCurrentLayer->fLayerData); + fCurrentLayer->fLayerData, &delta); free(string); break; diff --git a/src/servers/app/drawing/DisplayDriverPainter.cpp b/src/servers/app/drawing/DisplayDriverPainter.cpp index 79137d2074..a6de4ea907 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.cpp +++ b/src/servers/app/drawing/DisplayDriverPainter.cpp @@ -1075,7 +1075,7 @@ DisplayDriverPainter::DrawString(const char *string, const int32 &length, static DrawData d; d.SetHighColor(color); - DrawString(string, length, pt, &d); + DrawString(string, length, pt, &d, delta); } */ // DrawString @@ -1101,7 +1101,7 @@ DisplayDriverPainter::DrawString(const char* string, int32 length, fGraphicsCard->HideSoftwareCursor(b); //now = system_time(); - BRect touched = fPainter->DrawString(string, length, pt); + BRect touched = fPainter->DrawString(string, length, pt, delta); //printf("drawing string: %lld µs\n", system_time() - now); fGraphicsCard->Invalidate(touched);