summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2006-04-25 02:31:04 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2006-04-25 02:31:04 +0000
commit2ec26e71bbc4bed23c3ce990081120a6ad7c942d (patch)
tree4ac610c8467015b1f37192283b76c233ec14485c /src
parentrevert 11172, synthesized events are used to update controls spinbuttons (diff)
downloadinkscape-2ec26e71bbc4bed23c3ce990081120a6ad7c942d.tar.gz
inkscape-2ec26e71bbc4bed23c3ce990081120a6ad7c942d.zip
limit the smallest exponent in transforms; anything smaller is written as 0
(bzr r583)
Diffstat (limited to 'src')
-rw-r--r--src/svg/svg-affine.cpp32
-rw-r--r--src/svg/svg-length.cpp16
-rw-r--r--src/svg/svg.h2
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 */