From b4671bebcf6244601660d4b89388b5eb9f91f921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Thu, 6 Feb 2014 10:51:57 +0100 Subject: [PATCH] Regard Painter's transformation when rendering text. --- src/servers/app/drawing/Painter/AGGTextRenderer.cpp | 8 ++++++-- src/servers/app/drawing/Painter/AGGTextRenderer.h | 4 +++- src/servers/app/drawing/Painter/Painter.cpp | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/servers/app/drawing/Painter/AGGTextRenderer.cpp b/src/servers/app/drawing/Painter/AGGTextRenderer.cpp index 829214f099..64876d571e 100644 --- a/src/servers/app/drawing/Painter/AGGTextRenderer.cpp +++ b/src/servers/app/drawing/Painter/AGGTextRenderer.cpp @@ -34,7 +34,8 @@ AGGTextRenderer::AGGTextRenderer(renderer_subpix_type& subpixRenderer, scanline_unpacked_type& scanline, scanline_unpacked_subpix_type& subpixScanline, rasterizer_subpix_type& subpixRasterizer, - scanline_unpacked_masked_type*& maskedScanline) + scanline_unpacked_masked_type*& maskedScanline, + agg::trans_affine& viewTransformation) : fPathAdaptor(), fGray8Adaptor(), @@ -59,7 +60,8 @@ AGGTextRenderer::AGGTextRenderer(renderer_subpix_type& subpixRenderer, fHinted(true), fAntialias(true), fKerning(true), - fEmbeddedTransformation() + fEmbeddedTransformation(), + fViewTransformation(viewTransformation) { fCurves.approximation_scale(2.0); fContour.auto_detect_orientation(false); @@ -339,6 +341,7 @@ AGGTextRenderer::RenderString(const char* string, uint32 length, Transformable transform(fEmbeddedTransformation); transform.TranslateBy(baseLine); + transform *= fViewTransformation; fCurves.approximation_scale(transform.scale()); @@ -375,6 +378,7 @@ AGGTextRenderer::RenderString(const char* string, uint32 length, //printf("RenderString(\"%s\", length: %ld, dry: %d)\n", string, length, dryRun); Transformable transform(fEmbeddedTransformation); + transform *= fViewTransformation; fCurves.approximation_scale(transform.scale()); diff --git a/src/servers/app/drawing/Painter/AGGTextRenderer.h b/src/servers/app/drawing/Painter/AGGTextRenderer.h index 471f44c7f7..d1521fdb9e 100644 --- a/src/servers/app/drawing/Painter/AGGTextRenderer.h +++ b/src/servers/app/drawing/Painter/AGGTextRenderer.h @@ -31,7 +31,8 @@ public: subpixScanline, rasterizer_subpix_type& subpixRasterizer, scanline_unpacked_masked_type*& - maskedScanline); + maskedScanline, + agg::trans_affine& viewTransformation); virtual ~AGGTextRenderer(); void SetFont(const ServerFont &font); @@ -99,6 +100,7 @@ private: bool fKerning; Transformable fEmbeddedTransformation; // rotated or sheared font? + agg::trans_affine& fViewTransformation; }; #endif // AGG_TEXT_RENDERER_H diff --git a/src/servers/app/drawing/Painter/Painter.cpp b/src/servers/app/drawing/Painter/Painter.cpp index 7b45d9eeb8..f64dd99767 100644 --- a/src/servers/app/drawing/Painter/Painter.cpp +++ b/src/servers/app/drawing/Painter/Painter.cpp @@ -201,7 +201,8 @@ Painter::Painter() fPatternHandler(), fTextRenderer(fSubpixRenderer, fRenderer, fRendererBin, fUnpackedScanline, - fSubpixUnpackedScanline, fSubpixRasterizer, fMaskedUnpackedScanline) + fSubpixUnpackedScanline, fSubpixRasterizer, fMaskedUnpackedScanline, + fTransform) { fPixelFormat.SetDrawingMode(fDrawingMode, fAlphaSrcMode, fAlphaFncMode, false);