mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2025-12-25 01:20:10 +01:00
Fixed round joins to not fall through to miter case
This commit is contained in:
parent
341c446ba2
commit
f93c88efbf
2 changed files with 10 additions and 16 deletions
|
|
@ -135,8 +135,8 @@ _XrStrokerJoin(XrStroker *stroker, XrStrokeFace *in, XrStrokeFace *out)
|
|||
}
|
||||
_XrPolygonInit (&polygon);
|
||||
switch (gstate->line_join) {
|
||||
case XrLineJoinRound: {
|
||||
}
|
||||
case XrLineJoinRound:
|
||||
break;
|
||||
case XrLineJoinMiter: {
|
||||
XDouble c = (-in->vector.x * out->vector.x)+(-in->vector.y * out->vector.y);
|
||||
XDouble ml = gstate->miter_limit;
|
||||
|
|
@ -175,13 +175,12 @@ _XrStrokerJoin(XrStroker *stroker, XrStrokeFace *in, XrStrokeFace *out)
|
|||
}
|
||||
/* fall through ... */
|
||||
}
|
||||
case XrLineJoinBevel: {
|
||||
case XrLineJoinBevel:
|
||||
_XrPolygonAddEdge (&polygon, &in->pt, inpt);
|
||||
_XrPolygonAddEdge (&polygon, inpt, outpt);
|
||||
_XrPolygonAddEdge (&polygon, outpt, &in->pt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
status = _XrTrapsTessellatePolygon (stroker->traps, &polygon, XrFillRuleWinding);
|
||||
_XrPolygonDeinit (&polygon);
|
||||
|
|
@ -201,9 +200,8 @@ _XrStrokerCap(XrStroker *stroker, XrStrokeFace *f)
|
|||
|
||||
_XrPolygonInit (&polygon);
|
||||
switch (gstate->line_cap) {
|
||||
case XrLineCapRound: {
|
||||
case XrLineCapRound:
|
||||
break;
|
||||
}
|
||||
case XrLineCapSquare: {
|
||||
double dx, dy;
|
||||
XPointFixed fvector;
|
||||
|
|
@ -226,10 +224,9 @@ _XrStrokerCap(XrStroker *stroker, XrStrokeFace *f)
|
|||
_XrPolygonAddEdge (&polygon, &f->ccw, &f->cw);
|
||||
break;
|
||||
}
|
||||
case XrLineCapButt: {
|
||||
case XrLineCapButt:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
status = _XrTrapsTessellatePolygon (stroker->traps, &polygon, XrFillRuleWinding);
|
||||
_XrPolygonDeinit (&polygon);
|
||||
|
|
|
|||
13
xrstroker.c
13
xrstroker.c
|
|
@ -135,8 +135,8 @@ _XrStrokerJoin(XrStroker *stroker, XrStrokeFace *in, XrStrokeFace *out)
|
|||
}
|
||||
_XrPolygonInit (&polygon);
|
||||
switch (gstate->line_join) {
|
||||
case XrLineJoinRound: {
|
||||
}
|
||||
case XrLineJoinRound:
|
||||
break;
|
||||
case XrLineJoinMiter: {
|
||||
XDouble c = (-in->vector.x * out->vector.x)+(-in->vector.y * out->vector.y);
|
||||
XDouble ml = gstate->miter_limit;
|
||||
|
|
@ -175,13 +175,12 @@ _XrStrokerJoin(XrStroker *stroker, XrStrokeFace *in, XrStrokeFace *out)
|
|||
}
|
||||
/* fall through ... */
|
||||
}
|
||||
case XrLineJoinBevel: {
|
||||
case XrLineJoinBevel:
|
||||
_XrPolygonAddEdge (&polygon, &in->pt, inpt);
|
||||
_XrPolygonAddEdge (&polygon, inpt, outpt);
|
||||
_XrPolygonAddEdge (&polygon, outpt, &in->pt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
status = _XrTrapsTessellatePolygon (stroker->traps, &polygon, XrFillRuleWinding);
|
||||
_XrPolygonDeinit (&polygon);
|
||||
|
|
@ -201,9 +200,8 @@ _XrStrokerCap(XrStroker *stroker, XrStrokeFace *f)
|
|||
|
||||
_XrPolygonInit (&polygon);
|
||||
switch (gstate->line_cap) {
|
||||
case XrLineCapRound: {
|
||||
case XrLineCapRound:
|
||||
break;
|
||||
}
|
||||
case XrLineCapSquare: {
|
||||
double dx, dy;
|
||||
XPointFixed fvector;
|
||||
|
|
@ -226,10 +224,9 @@ _XrStrokerCap(XrStroker *stroker, XrStrokeFace *f)
|
|||
_XrPolygonAddEdge (&polygon, &f->ccw, &f->cw);
|
||||
break;
|
||||
}
|
||||
case XrLineCapButt: {
|
||||
case XrLineCapButt:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
status = _XrTrapsTessellatePolygon (stroker->traps, &polygon, XrFillRuleWinding);
|
||||
_XrPolygonDeinit (&polygon);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue