From 4a14c7f9251e781215c5448447834ac738e2cd4f Mon Sep 17 00:00:00 2001 From: buliabyak Date: Tue, 25 Apr 2006 02:31:04 +0000 Subject: [PATCH] limit the smallest exponent in transforms; anything smaller is written as 0 --- src/svg/svg-affine.cpp | 32 ++++++++++++++++---------------- src/svg/svg-length.cpp | 16 ++++++++++------ src/svg/svg.h | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/svg/svg-affine.cpp b/src/svg/svg-affine.cpp index 660809452..1c8b4211c 100644 --- a/src/svg/svg-affine.cpp +++ b/src/svg/svg-affine.cpp @@ -188,9 +188,9 @@ sp_svg_transform_write(gchar str[], unsigned const size, NRMatrix const *transfo unsigned p = 0; strcpy (c + p, "scale("); p += 6; - p += sp_svg_number_write_de (c + p, transform->c[0], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[0], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[3], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[3], 6, -8, FALSE); c[p++] = ')'; g_assert( p <= sizeof(c) ); p = MIN (p, size - 1 ); @@ -205,9 +205,9 @@ sp_svg_transform_write(gchar str[], unsigned const size, NRMatrix const *transfo unsigned p = 0; strcpy (c + p, "translate("); p += 10; - p += sp_svg_number_write_de (c + p, transform->c[4], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[4], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[5], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[5], 6, -8, FALSE); c[p++] = ')'; g_assert( p <= sizeof(c) ); p = MIN(p, size - 1); @@ -219,17 +219,17 @@ sp_svg_transform_write(gchar str[], unsigned const size, NRMatrix const *transfo unsigned p = 0; strcpy (c + p, "matrix("); p += 7; - p += sp_svg_number_write_de (c + p, transform->c[0], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[0], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[1], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[1], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[2], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[2], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[3], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[3], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[4], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[4], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[5], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[5], 6, -8, FALSE); c[p++] = ')'; g_assert( p <= sizeof(c) ); p = MIN(p, size - 1); @@ -243,17 +243,17 @@ sp_svg_transform_write(gchar str[], unsigned const size, NRMatrix const *transfo unsigned p = 0; strcpy (c + p, "matrix("); p += 7; - p += sp_svg_number_write_de (c + p, transform->c[0], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[0], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[1], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[1], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[2], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[2], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[3], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[3], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[4], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[4], 6, -8, FALSE); c[p++] = ','; - p += sp_svg_number_write_de (c + p, transform->c[5], 6, FALSE); + p += sp_svg_number_write_de (c + p, transform->c[5], 6, -8, FALSE); c[p++] = ')'; g_assert( p <= sizeof(c) ); p = MIN(p, size - 1); diff --git a/src/svg/svg-length.cpp b/src/svg/svg-length.cpp index 102d7b74c..63af37665 100644 --- a/src/svg/svg-length.cpp +++ b/src/svg/svg-length.cpp @@ -127,17 +127,21 @@ static unsigned sp_svg_number_write_d(gchar *buf, double val, unsigned int tprec return end_i; } -unsigned int sp_svg_number_write_de(gchar *buf, double val, unsigned int tprec, unsigned int padf) +unsigned int sp_svg_number_write_de(gchar *buf, double val, unsigned int tprec, int min_exp, unsigned int padf) { if (val == 0.0 || (fabs(val) >= 0.1 && fabs(val) < 10000000)) { return sp_svg_number_write_d(buf, val, tprec, 0, padf); } else { double eval = floor(log10(fabs(val))); - val = val / pow(10.0, eval); - int p = sp_svg_number_write_d(buf, val, tprec, 0, padf); - buf[p++] = 'e'; - p += sp_svg_number_write_i(buf + p, (int) eval); - return p; + if ((int) eval < min_exp) { + return sp_svg_number_write_d(buf, 0, tprec, 0, padf); + } else { + val = val / pow(10.0, eval); + int p = sp_svg_number_write_d(buf, val, tprec, 0, padf); + buf[p++] = 'e'; + p += sp_svg_number_write_i(buf + p, (int) eval); + return p; + } } } diff --git a/src/svg/svg.h b/src/svg/svg.h index 4464f012c..b60777381 100644 --- a/src/svg/svg.h +++ b/src/svg/svg.h @@ -36,7 +36,7 @@ unsigned int sp_svg_number_read_d (const gchar *str, double *val); /* * No buffer overflow checking is done, so better wrap them if needed */ -unsigned int sp_svg_number_write_de (gchar *buf, double val, unsigned int tprec, unsigned int padf); +unsigned int sp_svg_number_write_de (gchar *buf, double val, unsigned int tprec, int min_exp, unsigned int padf); /* Length */ -- 2.30.2