diff --git a/src/servers/app/ServerPicture.cpp b/src/servers/app/ServerPicture.cpp index d60f15e1c2..3890545e7e 100644 --- a/src/servers/app/ServerPicture.cpp +++ b/src/servers/app/ServerPicture.cpp @@ -8,6 +8,8 @@ #include #include +#include + #include @@ -162,13 +164,15 @@ fill_shape(ViewLayer *view, BShape *shape) static void -draw_string(ViewLayer *view, char *string, float deltax, float deltay) +draw_string(ViewLayer *view, char *string, float deltaSpace, float deltaNonSpace) { - //int32 len = string ? strlen(string) : 0; - - //view->DrawString(string, len, NULL); - - printf("DrawString(\"%s\", %.2f, %.2f)\n", string, deltax, deltay); + BPoint location = view->CurrentState()->PenLocation(); + escapement_delta delta = {deltaSpace, deltaNonSpace }; + view->ConvertToScreenForDrawing(&location); + view->Window()->GetDrawingEngine()->DrawString(string, strlen(string), location, + view->CurrentState(), &delta); + // TODO: Update pen location ? + } @@ -176,19 +180,18 @@ static void draw_pixels(ViewLayer *view, BRect src, BRect dest, int32 width, int32 height, int32 bytesPerRow, int32 pixelFormat, int32 flags, void *data) { - //ServerBitmap bitmap(BRect(0, 0, width - 1, height - 1), - // (color_space)pixelFormat); + /*BBitmap *bitmap = new (nothrow) BBitmap(BRect(0, 0, width - 1, height - 1), + flags | B_BITMAP_NO_SERVER_LINK, (color_space)pixelFormat); + + if (bitmap == NULL || bitmap->ImportBits(data, bytesPerRow * height, + bitmap->BytesPerRow(), 0, (color_space)pixelFormat) < B_OK) + return; - //bitmap.SetBits(data, bytesPerRow * height, 0, (color_space)pixelFormat); + view->ConvertToScreenForDrawing(&dest); + + view->Window()->GetDrawingEngine()->DrawBitmap(bitmap, src, dest, view->CurrentState()); - //view->DrawBitmap(&bitmap, src, dest); - - printf("DrawPixels(BRect(%.2f, %.2f, %.2f, %.2f),\n" - "BRect(%.2f, %.2f, %.2f, %.2f),\n" - "%ld, %ld, %ld, %ld, %ld)\n", - src.left, src.top, src.right, src.bottom, - dest.left, dest.top, dest.right, dest.bottom, - width, height, bytesPerRow, pixelFormat, flags); + delete bitmap;*/ } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 4dd324624c..5beb25f6da 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -2257,7 +2257,33 @@ ServerWindow::_DispatchPictureMessage(int32 code, BPrivate::LinkReceiver &link) picture->EndOp(); break; } + + case AS_DRAW_STRING: + { + char* string; + int32 length; + BPoint location; + escapement_delta delta; + link.Read(&length); + link.Read(&location); + link.Read(&delta); + link.ReadString(&string); + + picture->BeginOp(B_PIC_MOVE_PEN_BY); + picture->AddCoord(location - fCurrentLayer->CurrentState()->PenLocation()); + picture->EndOp(); + + picture->BeginOp(B_PIC_DRAW_STRING); + picture->AddInt32(length); + picture->AddData(string, length); + picture->AddFloat(delta.space); + picture->AddFloat(delta.nonspace); + picture->EndOp(); + + break; + } + case AS_LAYER_DRAW_BITMAP: { int32 token;