]> granicus.if.org Git - graphviz/commitdiff
use input gradient angle rather than computed gradient angle when checking for 0
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 13 Nov 2022 22:22:03 +0000 (14:22 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 17 Nov 2022 03:06:29 +0000 (19:06 -0800)
When using radial gradients, a value of 0 is interpreted differently to other
values:¹

  a value of zero causes the colors to transform radially from the center; for
  non-zero values, the colors transform from a point near the object’s periphery
  as specified by the value.

The code affected in this commit is looking for this situation, but was
unnecessarily using the computed gradient angle. If the original is zero, the
computed angle will also be zero. So we can simplify this code for both human
readers and the compiler by using the original (integer) angle.

This squashes the warnings:

  gvrender_core_dot.c: In function ‘xdot_gradient_fillcolor’:
  gvrender_core_dot.c:644:19: warning: comparing floating-point with ‘==’ or
    ‘!=’ is unsafe [-Wfloat-equal]
    644 |         if (angle == 0) {
        |                   ^~
  gvrender_core_svg.c: In function ‘svg_rgradstyle’:
  gvrender_core_svg.c:602:15: warning: comparing floating-point with ‘==’ or
    ‘!=’ is unsafe [-Wfloat-equal]
    602 |     if (angle == 0.) {
        |               ^~
  gvrender_pango.c:322:19: warning: comparing floating-point with ‘==’ or ‘!=’
    is unsafe [-Wfloat-equal]
    322 |         if (angle == 0) {
        |                   ^~

Gitlab: related to #2313

¹ https://graphviz.org/docs/attrs/gradientangle/

plugin/core/gvrender_core_dot.c
plugin/core/gvrender_core_svg.c
plugin/pango/gvrender_pango.c

index bf34e3bbacebf4fec8ae1b73c45d9e97516a0a05..f30269e739c9f3221e0cffb5c8d3894920a1a52e 100644 (file)
@@ -641,7 +641,7 @@ static void xdot_gradient_fillcolor (GVJ_t* job, int filled, pointf* A, int n)
        get_gradient_points(A, G, n, 0, 3);
          // r2 is outer radius
        double r2 = G[1].y;
-       if (angle == 0) {
+       if (obj->gradient_angle == 0) {
            c1.x = G[0].x;
            c1.y = G[0].y;
        }
index a043ddc43e5eaaeb49844add50342273add58515..0c746c1970e955d1b9da13163da46a4f0d3ae8d1 100644 (file)
@@ -598,10 +598,10 @@ static int svg_rgradstyle(GVJ_t * job)
     int id = rgradId++;
 
     obj_state_t *obj = job->obj;
-    double angle = obj->gradient_angle * M_PI / 180;   //angle of gradient line
-    if (angle == 0.) {
+    if (obj->gradient_angle == 0) {
        ifx = ify = 50;
     } else {
+       double angle = obj->gradient_angle * M_PI / 180;        //angle of gradient line
        ifx = round(50 * (1 + cos(angle)));
        ify = round(50 * (1 - sin(angle)));
     }
index 5b626390d8236e07685edd79d800e29dadd4bd25..fcfc78159d5ca415296a6c58ca099ec84558dea6 100644 (file)
@@ -319,7 +319,7 @@ static void cairo_gradient_fill (cairo_t* cr, obj_state_t* obj, int filled, poin
          //r1 is inner radius, r2 is outer radius
        r1 = G[1].x;    /* Set a r2/4 in get_gradient_points */
        r2 = G[1].y;
-       if (angle == 0) {
+       if (obj->gradient_angle == 0) {
            c1.x = G[0].x;
            c1.y = G[0].y;
        }