X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2Fsvgtiny_gradient.c;h=e33002407be3fc73ed45ed219f3017623e3ab07b;hb=15d5208a999e91c0f1edf511fd9c2b4a726aa537;hp=19f7f1f5cd0e048404cd409789fe722b69b2d191;hpb=4f6c3034252830b3f4c0a03cbb03a661fdb1d8e8;p=libsvgtiny.git diff --git a/src/svgtiny_gradient.c b/src/svgtiny_gradient.c index 19f7f1f..e330024 100644 --- a/src/svgtiny_gradient.c +++ b/src/svgtiny_gradient.c @@ -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",