app_server: Update and use the fill rule in all cases.

* It was previously not used for gradient rendering.
 * It was not updated when the DrawState was set.
 * Not actually tested, yet.
This commit is contained in:
Stephan Aßmus
2014-03-11 21:06:26 +01:00
parent eb43166326
commit b74fecd7aa
2 changed files with 9 additions and 10 deletions
+9 -9
View File
@@ -1,7 +1,7 @@
/*
* Copyright 2009, Christian Packmann.
* Copyright 2008, Andrej Spielmann <[email protected]>.
* Copyright 2005-2009, Stephan Aßmus <[email protected]>.
* Copyright 2005-2014, Stephan Aßmus <[email protected]>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
@@ -199,7 +199,6 @@ Painter::Painter()
fLineCapMode(B_BUTT_CAP),
fLineJoinMode(B_MITER_JOIN),
fMiterLimit(B_DEFAULT_MITER_LIMIT),
fFillRule(B_NONZERO),
fPatternHandler(),
fTextRenderer(fSubpixRenderer, fRenderer, fRendererBin, fUnpackedScanline,
@@ -316,6 +315,8 @@ Painter::SetDrawState(const DrawState* state, int32 xOffset, int32 yOffset)
fLineJoinMode = state->LineJoinMode();
fMiterLimit = state->MiterLimit();
SetFillRule(state->FillRule());
// adopt the color *after* the pattern is set
// to set the renderers to the correct color
SetHighColor(state->HighColor());
@@ -427,7 +428,12 @@ Painter::SetStrokeMode(cap_mode lineCap, join_mode joinMode, float miterLimit)
void
Painter::SetFillRule(int32 fillRule)
{
fFillRule = fillRule;
agg::filling_rule_e aggFillRule = fillRule == B_EVEN_ODD
? agg::fill_even_odd : agg::fill_non_zero;
fRasterizer.filling_rule(aggFillRule);
fSubpixRasterizer.filling_rule(aggFillRule);
fRasterizer.filling_rule(aggFillRule);
}
@@ -2835,22 +2841,16 @@ Painter::_RasterizePath(VertexSource& path) const
if (fMaskedUnpackedScanline != NULL) {
// TODO: we can't do both alpha-masking and subpixel AA.
fRasterizer.reset();
fRasterizer.filling_rule(
fFillRule == B_EVEN_ODD ? agg::fill_even_odd : agg::fill_non_zero);
fRasterizer.add_path(path);
agg::render_scanlines(fRasterizer, *fMaskedUnpackedScanline,
fRenderer);
} else if (gSubpixelAntialiasing) {
fSubpixRasterizer.reset();
fSubpixRasterizer.filling_rule(
fFillRule == B_EVEN_ODD ? agg::fill_even_odd : agg::fill_non_zero);
fSubpixRasterizer.add_path(path);
agg::render_scanlines(fSubpixRasterizer,
fSubpixPackedScanline, fSubpixRenderer);
} else {
fRasterizer.reset();
fRasterizer.filling_rule(
fFillRule == B_EVEN_ODD ? agg::fill_even_odd : agg::fill_non_zero);
fRasterizer.add_path(path);
agg::render_scanlines(fRasterizer, fPackedScanline, fRenderer);
}
@@ -395,7 +395,6 @@ private:
cap_mode fLineCapMode;
join_mode fLineJoinMode;
float fMiterLimit;
int32 fFillRule;
PatternHandler fPatternHandler;