X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsvgtiny_gradient.c;h=e33002407be3fc73ed45ed219f3017623e3ab07b;hb=15d5208a999e91c0f1edf511fd9c2b4a726aa537;hp=06e63c49810c456d2a0bab143aada04ec63af11d;hpb=eb5d8ebefd4714b3f20ddd7551450f9e7604a9d1;p=libsvgtiny.git diff --git a/src/svgtiny_gradient.c b/src/svgtiny_gradient.c index 06e63c4..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; @@ -197,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); @@ -214,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:"))) { @@ -316,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, @@ -473,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",