From 9e9e9707849764e5c16fc6edaac736980f2a5055 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Fri, 17 Dec 2021 03:42:01 +0100 Subject: [PATCH] limit check for radial grad --- src/vkvg_pattern.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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; -- 2.47.3