diff --git a/src/servers/app/drawing/DrawingEngine.cpp b/src/servers/app/drawing/DrawingEngine.cpp index 572035e79f..247c8d987b 100644 --- a/src/servers/app/drawing/DrawingEngine.cpp +++ b/src/servers/app/drawing/DrawingEngine.cpp @@ -942,9 +942,11 @@ DrawingEngine::StrokeLineArray(int32 numLines, data = (const LineArrayData *)&(linedata[0]); DrawState context; - context.SetDrawingMode(B_OP_COPY); + context.SetDrawingMode(d->GetDrawingMode()); + context.SetLowColor(d->LowColor()); context.SetHighColor(data->color); context.SetPenSize(d->PenSize()); + // pen size is already correctly scaled fPainter->SetDrawState(&context); diff --git a/src/servers/app/drawing/Painter/Painter.cpp b/src/servers/app/drawing/Painter/Painter.cpp index ead40e5309..c4a6570b36 100644 --- a/src/servers/app/drawing/Painter/Painter.cpp +++ b/src/servers/app/drawing/Painter/Painter.cpp @@ -937,6 +937,11 @@ Painter::DrawString(const char* utf8String, uint32 length, { CHECK_CLIPPING + if (!fSubpixelPrecise) { + baseLine.x = roundf(baseLine.x); + baseLine.y = roundf(baseLine.y); + } + BRect bounds(0.0, 0.0, -1.0, -1.0); SetPattern(B_SOLID_HIGH); @@ -958,9 +963,14 @@ Painter::DrawString(const char* utf8String, uint32 length, // BoundingBox BRect Painter::BoundingBox(const char* utf8String, uint32 length, - const BPoint& baseLine, BPoint* penLocation, + BPoint baseLine, BPoint* penLocation, const escapement_delta* delta) const { + if (!fSubpixelPrecise) { + baseLine.x = roundf(baseLine.x); + baseLine.y = roundf(baseLine.y); + } + static BRect dummy; return fTextRenderer->RenderString(utf8String, length, diff --git a/src/servers/app/drawing/Painter/Painter.h b/src/servers/app/drawing/Painter/Painter.h index db4cfefc1b..e22ddd1dc6 100644 --- a/src/servers/app/drawing/Painter/Painter.h +++ b/src/servers/app/drawing/Painter/Painter.h @@ -179,7 +179,7 @@ class Painter { BRect BoundingBox( const char* utf8String, uint32 length, - const BPoint& baseLine, + BPoint baseLine, BPoint* penLocation, const escapement_delta* delta = NULL) const;