Code

limit the smallest exponent in transforms; anything smaller is written as 0
authorbuliabyak <buliabyak@users.sourceforge.net>
Tue, 25 Apr 2006 02:31:04 +0000 (02:31 +0000)
committerbuliabyak <buliabyak@users.sourceforge.net>
Tue, 25 Apr 2006 02:31:04 +0000 (02:31 +0000)
src/svg/svg-affine.cpp
src/svg/svg-length.cpp
src/svg/svg.h

index 6608094521b1121c4bbf2f9ade6a78d327d44cdd..1c8b4211cf770521128b87848e21963e341e0e0a 100644 (file)
@@ -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);
index 102d7b74c93c6f21d13e891208b0ceb1cbe887e4..63af37665f02ce80858654108eebc02e15958acb 100644 (file)
@@ -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;
+        }
     }
 }
 
index 4464f012cc4f836ade39f6fd7573c1412dfd7498..b607773818b84025bfbfed29bb2059e9057487c4 100644 (file)
@@ -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 */