diff --git a/src/kits/interface/Font.cpp b/src/kits/interface/Font.cpp index 8b42071ce2..9afd3df55e 100644 --- a/src/kits/interface/Font.cpp +++ b/src/kits/interface/Font.cpp @@ -1039,13 +1039,21 @@ void BFont::GetBoundingBoxesAsGlyphs(const char charArray[], int32 numChars, font_metric_mode mode, BRect boundingBoxArray[]) const { - GetBoundingBoxesAsString(charArray, numChars, mode, NULL, boundingBoxArray); + _GetBoundingBoxes_(charArray, numChars, mode, false, NULL, boundingBoxArray); } void BFont::GetBoundingBoxesAsString(const char charArray[], int32 numChars, font_metric_mode mode, escapement_delta *delta, BRect boundingBoxArray[]) const +{ + _GetBoundingBoxes_(charArray, numChars, mode, true, delta, boundingBoxArray); +} + + +void +BFont::_GetBoundingBoxes_(const char charArray[], int32 numChars, font_metric_mode mode, + bool string_escapement, escapement_delta *delta, BRect boundingBoxArray[]) const { if (!charArray || numChars < 1 || !boundingBoxArray) return; @@ -1058,8 +1066,10 @@ BFont::GetBoundingBoxesAsString(const char charArray[], int32 numChars, font_met link.Attach(fStyleID); link.Attach(fSize); link.Attach(fRotation); + link.Attach(fShear); link.Attach(fFlags); link.Attach(mode); + link.Attach(string_escapement); if (delta) { link.Attach(*delta); @@ -1096,6 +1106,7 @@ BFont::GetBoundingBoxesForStrings(const char *stringArray[], int32 numStrings, link.Attach(fStyleID); link.Attach(fSize); link.Attach(fRotation); + link.Attach(fShear); link.Attach(fFlags); link.Attach(mode); link.Attach(numStrings); diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 6de4ec54e9..6515d15da3 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -1950,30 +1950,35 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) // 2) uint16 - style ID // 3) float - point size // 4) float - rotation - // 5) uint32 - flags + // 5) shear - shear + // 6) uint32 - flags - // 6) font_metric_mode - mode + // 7) font_metric_mode - mode + // 8) bool - string escapement - // 7) escapement_delta - additional delta + // 9) escapement_delta - additional delta - // 8) int32 - numChars - // 9) int32 - numBytes - // 10) char - the char buffer with size numBytes + // 10) int32 - numChars + // 11) int32 - numBytes + // 12) char - the char buffer with size numBytes // Returns: // 1) BRect - rects with numChar entries uint16 famid, styid; uint32 flags; - float ptsize, rotation; + float ptsize, rotation, shear; font_metric_mode mode; + bool string_escapement; link.Read(&famid); link.Read(&styid); link.Read(&ptsize); link.Read(&rotation); + link.Read(&shear); link.Read(&flags); link.Read(&mode); + link.Read(&string_escapement); escapement_delta delta; link.Read(&delta); @@ -1984,10 +1989,10 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) uint32 numBytes; link.Read(&numBytes); - char* charArray = new char[numBytes]; + char charArray[numBytes]; link.Read(charArray, numBytes); - BRect* rectArray = new BRect[numChars]; + BRect rectArray[numChars]; // figure out escapements ServerFont font; @@ -1995,8 +2000,10 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) if (font.SetFamilyAndStyle(famid, styid) == B_OK) { font.SetSize(ptsize); font.SetRotation(rotation); + font.SetShear(shear); font.SetFlags(flags); + // TODO implement for real if (font.GetBoundingBoxesAsString(charArray, numChars, rectArray, mode, delta)) { fLink.StartMessage(SERVER_TRUE); fLink.Attach(rectArray, sizeof(rectArray)); @@ -2004,9 +2011,6 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) } } - delete[] charArray; - delete[] rectArray; - if (!success) fLink.StartMessage(SERVER_FALSE); @@ -2021,27 +2025,29 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) // 2) uint16 - style ID // 3) float - point size // 4) float - rotation - // 5) uint32 - flags + // 5) float - shear + // 6) uint32 - flags - // 6) font_metric_mode - mode - // 7) int32 numStrings + // 7) font_metric_mode - mode + // 8) int32 numStrings - // 8) escapement_delta - additional delta (numStrings times) - // 9) int32 string length to measure (numStrings times) - // 10) string - string (numStrings times) + // 9) escapement_delta - additional delta (numStrings times) + // 10) int32 string length to measure (numStrings times) + // 11) string - string (numStrings times) // Returns: // 1) BRect - rects with numStrings entries uint16 famid, styid; uint32 flags; - float ptsize, rotation; + float ptsize, rotation, shear; font_metric_mode mode; link.Read(&famid); link.Read(&styid); link.Read(&ptsize); link.Read(&rotation); + link.Read(&shear); link.Read(&flags); link.Read(&mode); @@ -2065,8 +2071,10 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) if (font.SetFamilyAndStyle(famid, styid) == B_OK) { font.SetSize(ptsize); font.SetRotation(rotation); + font.SetShear(shear); font.SetFlags(flags); + // TODO implement for real if (font.GetBoundingBoxesAsStrings(stringArray, lengthArray, numStrings, rectArray, mode, deltaArray)) { fLink.StartMessage(SERVER_TRUE); fLink.Attach(rectArray, sizeof(rectArray));