]> gitweb.michael.orlitzky.com - libsvgtiny.git/blobdiff - src/svgtiny_gradient.c
add a .gitattributes so .gitignore is not exported
[libsvgtiny.git] / src / svgtiny_gradient.c
index 19f7f1f5cd0e048404cd409789fe722b69b2d191..e33002407be3fc73ed45ed219f3017623e3ab07b 100644 (file)
@@ -105,7 +105,7 @@ svgtiny_code svgtiny_parse_linear_gradient(dom_element *linear,
        if (exc == DOM_NO_ERR && attr != NULL) {
                if (dom_string_data(attr)[0] == (uint8_t) '#') {
                        char *s = strndup(dom_string_data(attr) + 1,
-                                         dom_string_length(attr) - 1);
+                                         dom_string_byte_length(attr) - 1);
                        svgtiny_find_gradient(s, state);
                        free(s);
                }
@@ -155,7 +155,7 @@ svgtiny_code svgtiny_parse_linear_gradient(dom_element *linear,
        if (exc == DOM_NO_ERR && attr != NULL) {
                float a = 1, b = 0, c = 0, d = 1, e = 0, f = 0;
                char *s = strndup(dom_string_data(attr),
-                                 dom_string_length(attr));
+                                 dom_string_byte_length(attr));
                if (s == NULL) {
                        dom_string_unref(attr);
                        return svgtiny_OUT_OF_MEMORY;
@@ -188,7 +188,8 @@ svgtiny_code svgtiny_parse_linear_gradient(dom_element *linear,
                        dom_element *stop;
                        float offset = -1;
                        svgtiny_colour color = svgtiny_TRANSPARENT;
-                       exc = dom_nodelist_item(stops, stopnr, &stop);
+                       exc = dom_nodelist_item(stops, stopnr,
+                                               (dom_node **) (void *) &stop);
                        if (exc != DOM_NO_ERR)
                                continue;
                        exc = dom_element_get_attribute(stop,
@@ -196,7 +197,7 @@ svgtiny_code svgtiny_parse_linear_gradient(dom_element *linear,
                                                        &attr);
                        if (exc == DOM_NO_ERR && attr != NULL) {
                                char *s = strndup(dom_string_data(attr),
-                                                 dom_string_length(attr));
+                                                 dom_string_byte_length(attr));
                                offset = svgtiny_parse_gradient_offset(s);
                                free(s);
                                dom_string_unref(attr);
@@ -213,7 +214,7 @@ svgtiny_code svgtiny_parse_linear_gradient(dom_element *linear,
                                                        &attr);
                        if (exc == DOM_NO_ERR && attr != NULL) {
                                char *content = strndup(dom_string_data(attr),
-                                                       dom_string_length(attr));
+                                                       dom_string_byte_length(attr));
                                const char *s;
                                dom_string *value;
                                if ((s = strstr(content, "stop-color:"))) {
@@ -315,17 +316,6 @@ svgtiny_code svgtiny_add_path_linear_gradient(float *p, unsigned int n,
                        object_x0, object_y0, object_x1, object_y1);
        #endif
 
-       /* compute gradient vector */
-       fprintf(stderr, "x1 %*s, y1 %*s, x2 %*s, y2 %*s\n",
-               dom_string_length(state->gradient_x1),
-               dom_string_data(state->gradient_x1),
-               dom_string_length(state->gradient_y1),
-               dom_string_data(state->gradient_y1),
-               dom_string_length(state->gradient_x2),
-               dom_string_data(state->gradient_x2),
-               dom_string_length(state->gradient_y2),
-               dom_string_data(state->gradient_y2));
-
        if (!state->gradient_user_space_on_use) {
                gradient_x0 = object_x0 +
                                svgtiny_parse_length(state->gradient_x1,
@@ -472,7 +462,13 @@ svgtiny_code svgtiny_add_path_linear_gradient(float *p, unsigned int n,
                                gradient_norm_squared;
 
                /* determine steps from change in r */
-               steps = ceilf(fabsf(r1 - r0) / 0.05);
+
+               if(isnan(r0) || isnan(r1)) {
+                       steps = 1;
+               } else {
+                       steps = ceilf(fabsf(r1 - r0) / 0.05);
+               }
+
                if (steps == 0)
                        steps = 1;
                fprintf(stderr, "r0 %g, r1 %g, steps %i\n",