diff --git a/src/servers/app/server/ServerApp.cpp b/src/servers/app/server/ServerApp.cpp index c3f0677370..0862cbfae7 100644 --- a/src/servers/app/server/ServerApp.cpp +++ b/src/servers/app/server/ServerApp.cpp @@ -1196,6 +1196,60 @@ void ServerApp::DispatchMessage(int32 code, LinkMsgReader &msg) fontserver->Unlock(); */ + break; + } + case AS_GET_STRING_WIDTH: + { + FTRACE(("ServerApp %s: AS_GET_STRING_WIDTH\n",fSignature.String())); + // Attached Data: + // 1) string String to measure + // 2) int32 string length to measure + // 3) uint16 ID of family + // 4) uint16 ID of style + // 5) float point size of font + // 6) uint8 spacing to use + // 7) port_id reply port + + // Returns: + // 1) float - width of the string in pixels + char *string=NULL; + int32 length; + uint16 family,style; + float size,width=0; + uint8 spacing; + port_id replyport; + DrawData drawdata; + + msg.ReadString(&string); + msg.Read(&length); + msg.Read(&family); + msg.Read(&style); + msg.Read(&size); + msg.Read(&spacing); + msg.Read(&replyport); + + replylink.SetSendPort(replyport); + + if(length>0 && drawdata.font.SetFamilyAndStyle(family,style)==B_OK && + size>0 && string) + { + drawdata.font.SetSize(size); + drawdata.font.SetSpacing(spacing); + width=desktop->GetDisplayDriver()->StringWidth(string,length,&drawdata); + + replylink.StartMessage(SERVER_TRUE); + replylink.Attach(width); + replylink.Flush(); + + free(string); + } + else + { + replylink.StartMessage(SERVER_FALSE); + replylink.Flush(); + } + + break; } case AS_GET_FONT_BOUNDING_BOX: @@ -1323,6 +1377,41 @@ void ServerApp::DispatchMessage(int32 code, LinkMsgReader &msg) fontserver->Unlock(); break; } + case AS_SET_FAMILY_AND_STYLE_FROM_ID: + { + FTRACE(("ServerApp %s: AS_SET_FAMILY_AND_STYLE_FROM_ID\n",fSignature.String())); + // Attached Data: + // 1) uint16 - ID of font family to use + // 2) uint16 - ID of style in family + // 3) port_id - reply port + + // Returns: + // 1) uint16 - face of the font + + port_id replyport; + uint16 fam, sty; + + msg.Read(&fam); + msg.Read(&sty); + msg.Read(&replyport); + + replylink.SetSendPort(replyport); + + ServerFont font; + if(font.SetFamilyAndStyle(fam,sty)==B_OK) + { + replylink.StartMessage(SERVER_TRUE); + replylink.Attach(font.Face()); + replylink.Flush(); + } + else + { + replylink.StartMessage(SERVER_FALSE); + replylink.Flush(); + } + + break; + } case AS_SET_FAMILY_AND_FACE: { FTRACE(("ServerApp %s: AS_SET_FAMILY_AND_FACE unimplmemented\n",fSignature.String()));