From fe914c98b4a80f633b63d01be0fbb2acb40f9958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Thu, 9 Aug 2007 09:48:28 +0000 Subject: [PATCH] * added a version of SetFont() that takes a DrawState* to DrawingEngine and Painter, that is needed to be able to tell if anti-aliasing is to be used, since the flags in the font can be overruled by the flags in the view... * fixes aliased fonts reliably, tested with FontDemo git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21869 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ServerWindow.cpp | 3 +-- src/servers/app/drawing/DrawingEngine.cpp | 25 +++++++++++++-------- src/servers/app/drawing/DrawingEngine.h | 1 + src/servers/app/drawing/Painter/Painter.cpp | 15 ++++++++++--- src/servers/app/drawing/Painter/Painter.h | 1 + 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index a1c4e67787..1ff089e4ce 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -1271,9 +1271,8 @@ ServerWindow::_DispatchViewMessage(int32 code, { DTRACE(("ServerWindow %s: Message AS_LAYER_SET_FONT_STATE: ViewLayer name: %s\n", fTitle, fCurrentLayer->Name())); fCurrentLayer->CurrentState()->ReadFontFromLink(link); -// _UpdateDrawState(fCurrentLayer); fWindowLayer->GetDrawingEngine()->SetFont( - fCurrentLayer->CurrentState()->Font()); + fCurrentLayer->CurrentState()); break; } case AS_LAYER_GET_STATE: diff --git a/src/servers/app/drawing/DrawingEngine.cpp b/src/servers/app/drawing/DrawingEngine.cpp index 004e00a374..2f30477d0e 100644 --- a/src/servers/app/drawing/DrawingEngine.cpp +++ b/src/servers/app/drawing/DrawingEngine.cpp @@ -185,28 +185,28 @@ DrawingEngine::ConstrainClippingRegion(const BRegion* region) void DrawingEngine::SetDrawState(const DrawState* state, int32 xOffset, int32 yOffset) { - fPainter->SetDrawState(state, xOffset, yOffset); + fPainter->SetDrawState(state, xOffset, yOffset); } void DrawingEngine::SetHighColor(const rgb_color& color) { - fPainter->SetHighColor(color); + fPainter->SetHighColor(color); } void DrawingEngine::SetLowColor(const rgb_color& color) { - fPainter->SetLowColor(color); + fPainter->SetLowColor(color); } void DrawingEngine::SetPenSize(float size) { - fPainter->SetPenSize(size); + fPainter->SetPenSize(size); } @@ -214,35 +214,42 @@ void DrawingEngine::SetStrokeMode(cap_mode lineCap, join_mode joinMode, float miterLimit) { - fPainter->SetStrokeMode(lineCap, joinMode, miterLimit); + fPainter->SetStrokeMode(lineCap, joinMode, miterLimit); } void DrawingEngine::SetBlendingMode(source_alpha srcAlpha, alpha_function alphaFunc) { - fPainter->SetBlendingMode(srcAlpha, alphaFunc); + fPainter->SetBlendingMode(srcAlpha, alphaFunc); } void DrawingEngine::SetPattern(const struct pattern& pattern) { - fPainter->SetPattern(pattern, false); + fPainter->SetPattern(pattern, false); } void DrawingEngine::SetDrawingMode(drawing_mode mode) { - fPainter->SetDrawingMode(mode); + fPainter->SetDrawingMode(mode); } void DrawingEngine::SetFont(const ServerFont& font) { - fPainter->SetFont(font); + fPainter->SetFont(font); +} + + +void +DrawingEngine::SetFont(const DrawState* state) +{ + fPainter->SetFont(state); } diff --git a/src/servers/app/drawing/DrawingEngine.h b/src/servers/app/drawing/DrawingEngine.h index 3070ac18e4..23f658e069 100644 --- a/src/servers/app/drawing/DrawingEngine.h +++ b/src/servers/app/drawing/DrawingEngine.h @@ -79,6 +79,7 @@ public: void SetBlendingMode(source_alpha srcAlpha, alpha_function alphaFunc); void SetFont(const ServerFont& font); + void SetFont(const DrawState* state); void SuspendAutoSync(); void Sync(); diff --git a/src/servers/app/drawing/Painter/Painter.cpp b/src/servers/app/drawing/Painter/Painter.cpp index 3cd41e3a6a..a9479cfd93 100644 --- a/src/servers/app/drawing/Painter/Painter.cpp +++ b/src/servers/app/drawing/Painter/Painter.cpp @@ -130,9 +130,7 @@ Painter::SetDrawState(const DrawState* data, int32 xOffset, int32 yOffset) // but for now... SetPenSize(data->PenSize()); - SetFont(data->Font()); - fTextRenderer.SetAntialiasing(!(data->ForceFontAliasing() - || data->Font().Flags() & B_DISABLE_ANTIALIASING)); + SetFont(data); fSubpixelPrecise = data->SubPixelPrecise(); @@ -260,6 +258,17 @@ void Painter::SetFont(const ServerFont& font) { fTextRenderer.SetFont(font); + fTextRenderer.SetAntialiasing( + !(font.Flags() & B_DISABLE_ANTIALIASING)); +} + +// SetFont +void +Painter::SetFont(const DrawState* state) +{ + fTextRenderer.SetFont(state->Font()); + fTextRenderer.SetAntialiasing(!(state->ForceFontAliasing() + || state->Font().Flags() & B_DISABLE_ANTIALIASING)); } // #pragma mark - drawing diff --git a/src/servers/app/drawing/Painter/Painter.h b/src/servers/app/drawing/Painter/Painter.h index 198cc2e8aa..bd13fbb712 100644 --- a/src/servers/app/drawing/Painter/Painter.h +++ b/src/servers/app/drawing/Painter/Painter.h @@ -85,6 +85,7 @@ class Painter { alpha_function alphaFunc); void SetFont(const ServerFont& font); + void SetFont(const DrawState* state); inline const ServerFont& Font() const { return fTextRenderer.Font(); }