From: Jean-Philippe Bruyère Date: Fri, 17 Dec 2021 02:42:01 +0000 (+0100) Subject: limit check for radial grad X-Git-Tag: v0.2.0~16 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=9e9e9707849764e5c16fc6edaac736980f2a5055;p=jp%2Fvkvg.git limit check for radial grad --- diff --git a/src/vkvg_pattern.c b/src/vkvg_pattern.c index 202f4d4..128c596 100644 --- a/src/vkvg_pattern.c +++ b/src/vkvg_pattern.c @@ -58,8 +58,20 @@ VkvgPattern vkvg_pattern_create_radial (float cx0, float cy0, float radius0, vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); - grad->cp[0] = (vec4){{cx0}, {cy0},{radius0},{0}}; - grad->cp[1] = (vec4){{cx1}, {cy1},{radius1},{0}}; + vec2 c0 = {cx0, cy0}; + vec2 c1 = {cx1, cy1}; + + if (radius0 > radius1 - 1.0f) + radius0 = radius1 - 1.0f; + vec2 u = vec2_sub (c0, c1); + float l = vec2_length(u); + if (l + radius0 + 1.0f >= radius1) { + vec2 v = vec2_div_s(u, l); + c0 = vec2_add(c1, vec2_mult_s (v, radius1 - radius0 - 1.0f)); + } + + grad->cp[0] = (vec4){{c0.x}, {c0.y},{radius0},{0}}; + grad->cp[1] = (vec4){{c1.x}, {c1.y},{radius1},{0}}; pat->data = grad;