Regard Painter's transformation when rendering text.
This commit is contained in:
@@ -34,7 +34,8 @@ AGGTextRenderer::AGGTextRenderer(renderer_subpix_type& subpixRenderer,
|
|||||||
scanline_unpacked_type& scanline,
|
scanline_unpacked_type& scanline,
|
||||||
scanline_unpacked_subpix_type& subpixScanline,
|
scanline_unpacked_subpix_type& subpixScanline,
|
||||||
rasterizer_subpix_type& subpixRasterizer,
|
rasterizer_subpix_type& subpixRasterizer,
|
||||||
scanline_unpacked_masked_type*& maskedScanline)
|
scanline_unpacked_masked_type*& maskedScanline,
|
||||||
|
agg::trans_affine& viewTransformation)
|
||||||
:
|
:
|
||||||
fPathAdaptor(),
|
fPathAdaptor(),
|
||||||
fGray8Adaptor(),
|
fGray8Adaptor(),
|
||||||
@@ -59,7 +60,8 @@ AGGTextRenderer::AGGTextRenderer(renderer_subpix_type& subpixRenderer,
|
|||||||
fHinted(true),
|
fHinted(true),
|
||||||
fAntialias(true),
|
fAntialias(true),
|
||||||
fKerning(true),
|
fKerning(true),
|
||||||
fEmbeddedTransformation()
|
fEmbeddedTransformation(),
|
||||||
|
fViewTransformation(viewTransformation)
|
||||||
{
|
{
|
||||||
fCurves.approximation_scale(2.0);
|
fCurves.approximation_scale(2.0);
|
||||||
fContour.auto_detect_orientation(false);
|
fContour.auto_detect_orientation(false);
|
||||||
@@ -339,6 +341,7 @@ AGGTextRenderer::RenderString(const char* string, uint32 length,
|
|||||||
|
|
||||||
Transformable transform(fEmbeddedTransformation);
|
Transformable transform(fEmbeddedTransformation);
|
||||||
transform.TranslateBy(baseLine);
|
transform.TranslateBy(baseLine);
|
||||||
|
transform *= fViewTransformation;
|
||||||
|
|
||||||
fCurves.approximation_scale(transform.scale());
|
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);
|
//printf("RenderString(\"%s\", length: %ld, dry: %d)\n", string, length, dryRun);
|
||||||
|
|
||||||
Transformable transform(fEmbeddedTransformation);
|
Transformable transform(fEmbeddedTransformation);
|
||||||
|
transform *= fViewTransformation;
|
||||||
|
|
||||||
fCurves.approximation_scale(transform.scale());
|
fCurves.approximation_scale(transform.scale());
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ public:
|
|||||||
subpixScanline,
|
subpixScanline,
|
||||||
rasterizer_subpix_type& subpixRasterizer,
|
rasterizer_subpix_type& subpixRasterizer,
|
||||||
scanline_unpacked_masked_type*&
|
scanline_unpacked_masked_type*&
|
||||||
maskedScanline);
|
maskedScanline,
|
||||||
|
agg::trans_affine& viewTransformation);
|
||||||
virtual ~AGGTextRenderer();
|
virtual ~AGGTextRenderer();
|
||||||
|
|
||||||
void SetFont(const ServerFont &font);
|
void SetFont(const ServerFont &font);
|
||||||
@@ -99,6 +100,7 @@ private:
|
|||||||
bool fKerning;
|
bool fKerning;
|
||||||
Transformable fEmbeddedTransformation;
|
Transformable fEmbeddedTransformation;
|
||||||
// rotated or sheared font?
|
// rotated or sheared font?
|
||||||
|
agg::trans_affine& fViewTransformation;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AGG_TEXT_RENDERER_H
|
#endif // AGG_TEXT_RENDERER_H
|
||||||
|
|||||||
@@ -201,7 +201,8 @@ Painter::Painter()
|
|||||||
|
|
||||||
fPatternHandler(),
|
fPatternHandler(),
|
||||||
fTextRenderer(fSubpixRenderer, fRenderer, fRendererBin, fUnpackedScanline,
|
fTextRenderer(fSubpixRenderer, fRenderer, fRendererBin, fUnpackedScanline,
|
||||||
fSubpixUnpackedScanline, fSubpixRasterizer, fMaskedUnpackedScanline)
|
fSubpixUnpackedScanline, fSubpixRasterizer, fMaskedUnpackedScanline,
|
||||||
|
fTransform)
|
||||||
{
|
{
|
||||||
fPixelFormat.SetDrawingMode(fDrawingMode, fAlphaSrcMode, fAlphaFncMode,
|
fPixelFormat.SetDrawingMode(fDrawingMode, fAlphaSrcMode, fAlphaFncMode,
|
||||||
false);
|
false);
|
||||||
|
|||||||
Reference in New Issue
Block a user