[RFC PATCH] mi: reduce missing segments on large ellipse

Olivier Fourdan ofourdan at redhat.com
Wed Jun 3 08:04:19 PDT 2015


Hi

[Copying Keith as well]

Keith, I hope you don't mind if I copy you directly but I have that feeling you're my best hope with this headache generator :-)

Cheers,
Olivier

----- Original Message -----
> With larger ellipses, rounding will cause some spans close to vertical
> tangent to be of zero length, leading to sometimes rather large missing
> portion of the arc.
> 
> Try to detect this case and work around it.
> 
> Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
> ---
>  mi/miarc.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/mi/miarc.c b/mi/miarc.c
> index e8bc87e..be9c94c 100644
> --- a/mi/miarc.c
> +++ b/mi/miarc.c
> @@ -563,6 +563,16 @@ miComputeEllipseSpans(int lw, xArc * parc, miArcSpanData
> * spdata)
>                      outx = x + t;
>              }
>          }
> +        if (ICEIL(xorg + outx) - ICEIL(xorg + inx) < lw ) {
> +            if (inx <= 0.0) {
> +                outx = outx + ICEIL(-r);
> +                inx = inx + ICEIL(r);
> +	    }
> +	    else {
> +                outx = outx + ICEIL(r);
> +                inx = inx + ICEIL(-r);
> +	    }
> +        }
>          span->lx = ICEIL(xorg - outx);
>          if (inx <= 0.0) {
>              spdata->count1++;
> --
> 2.3.5
> 
> 


More information about the xorg-devel mailing list