diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 2215344bfe..f5de83948d 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -1094,7 +1094,7 @@ void RootLayer::MouseEventHandler(int32 code, BPortLink& msg) else { // NOTE: focus may be NULL - if (fLastMouseMoved->fOwner && fLastMouseMoved->fOwner == FocusWinBorder()) + if (fLastMouseMoved->Window() && fLastMouseMoved->fOwner == FocusWinBorder()) { // send B_MOUSE_UP for regular Layers/BViews BMessage upmsg(B_MOUSE_UP); diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 0c2288039f..8c47d5b87f 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -1237,11 +1237,7 @@ void ServerApp::DispatchMessage(int32 code, LinkMsgReader &msg) font.SetSize(size); font.SetSpacing(spacing); - DrawData drawdata; - drawdata.SetFont(font); - // TODO: make a DisplayDriver::StringWidth() function that takes - // just a ServerFont - width = desktop->GetDisplayDriver()->StringWidth(string, length, &drawdata); + width = desktop->GetDisplayDriver()->StringWidth(string, length, font); replylink.StartMessage(SERVER_TRUE); replylink.Attach(width); diff --git a/src/servers/app/drawing/DisplayDriverPainter.cpp b/src/servers/app/drawing/DisplayDriverPainter.cpp index 49da8e7bba..a22650dbe0 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.cpp +++ b/src/servers/app/drawing/DisplayDriverPainter.cpp @@ -927,6 +927,23 @@ DisplayDriverPainter::StringWidth(const char *string, int32 length, return width; } +// StringWidth +float +DisplayDriverPainter::StringWidth(const char *string, int32 length, + const ServerFont &font) +{ + float width = 0.0; + if (Lock()) { + DrawData d; + d.SetFont(font); + fPainter->SetDrawData(&d); + BPoint dummy(0.0, 0.0); + width = fPainter->BoundingBox(string, length, dummy).Width(); + Unlock(); + } + return width; +} + // StringHeight float DisplayDriverPainter::StringHeight(const char *string, int32 length, diff --git a/src/servers/app/drawing/DisplayDriverPainter.h b/src/servers/app/drawing/DisplayDriverPainter.h index db15f6e373..300675c412 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.h +++ b/src/servers/app/drawing/DisplayDriverPainter.h @@ -189,6 +189,10 @@ class DisplayDriverPainter : public DisplayDriver { int32 length, const DrawData *d); + virtual float StringWidth( const char *string, + int32 length, + const ServerFont &font); + virtual float StringHeight( const char *string, int32 length, const DrawData *d);