Canvas: default fill-rule to evenodd and make it configurable
This commit is contained in:
parent
cd7a02ca69
commit
f462dfdfac
1 changed files with 19 additions and 1 deletions
|
@ -44,6 +44,7 @@ namespace canvas
|
||||||
_paint_fill(VG_INVALID_HANDLE),
|
_paint_fill(VG_INVALID_HANDLE),
|
||||||
_attributes_dirty(~0),
|
_attributes_dirty(~0),
|
||||||
_mode(0),
|
_mode(0),
|
||||||
|
_fill_rule(VG_EVEN_ODD),
|
||||||
_stroke_width(1),
|
_stroke_width(1),
|
||||||
_stroke_linecap(VG_CAP_BUTT)
|
_stroke_linecap(VG_CAP_BUTT)
|
||||||
{
|
{
|
||||||
|
@ -112,6 +113,21 @@ namespace canvas
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set path fill rule ("pseudo-nonzero" or "evenodd")
|
||||||
|
*
|
||||||
|
* @warning As the current nonzero implementation causes sever artifacts
|
||||||
|
* for every concave path we call it pseudo-nonzero, so that
|
||||||
|
* everyone is warned that it won't work as expected :)
|
||||||
|
*/
|
||||||
|
void setFillRule(const std::string& fill_rule)
|
||||||
|
{
|
||||||
|
if( fill_rule == "pseudo-nonzero" )
|
||||||
|
_fill_rule = VG_NON_ZERO;
|
||||||
|
else // if( fill_rule == "evenodd" )
|
||||||
|
_fill_rule = VG_EVEN_ODD;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set path stroke paint ("none" if no stroke)
|
* Set path stroke paint ("none" if no stroke)
|
||||||
*/
|
*/
|
||||||
|
@ -232,7 +248,7 @@ namespace canvas
|
||||||
{
|
{
|
||||||
vgSetPaint(_paint_fill, VG_FILL_PATH);
|
vgSetPaint(_paint_fill, VG_FILL_PATH);
|
||||||
|
|
||||||
vgSeti(VG_FILL_RULE, VG_NON_ZERO); // TODO make user configurable
|
vgSeti(VG_FILL_RULE, _fill_rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
// And finally draw the path
|
// And finally draw the path
|
||||||
|
@ -297,6 +313,7 @@ namespace canvas
|
||||||
|
|
||||||
VGbitfield _mode;
|
VGbitfield _mode;
|
||||||
osg::Vec4f _fill_color;
|
osg::Vec4f _fill_color;
|
||||||
|
VGFillRule _fill_rule;
|
||||||
osg::Vec4f _stroke_color;
|
osg::Vec4f _stroke_color;
|
||||||
VGfloat _stroke_width;
|
VGfloat _stroke_width;
|
||||||
std::vector<VGfloat> _stroke_dash;
|
std::vector<VGfloat> _stroke_dash;
|
||||||
|
@ -383,6 +400,7 @@ namespace canvas
|
||||||
PathDrawable *path = _path.get();
|
PathDrawable *path = _path.get();
|
||||||
|
|
||||||
addStyle("fill", &PathDrawable::setFill, path);
|
addStyle("fill", &PathDrawable::setFill, path);
|
||||||
|
addStyle("fill-rule", &PathDrawable::setFillRule, path);
|
||||||
addStyle("stroke", &PathDrawable::setStroke, path);
|
addStyle("stroke", &PathDrawable::setStroke, path);
|
||||||
addStyle("stroke-width", &PathDrawable::setStrokeWidth, path);
|
addStyle("stroke-width", &PathDrawable::setStrokeWidth, path);
|
||||||
addStyle("stroke-dasharray", &PathDrawable::setStrokeDashArray, path);
|
addStyle("stroke-dasharray", &PathDrawable::setStrokeDashArray, path);
|
||||||
|
|
Loading…
Add table
Reference in a new issue