From f0cf2c754759281a083b7cf7cfbedd3f00e6f34b Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jancsika@yahoo.com>
Date: Mon, 7 Jul 2014 00:00:54 -0400
Subject: [PATCH] make sure polyline, polygon, and line have 2 points init'd to
 0

---
 pd/src/g_template.c | 42 ++++++++++++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 8 deletions(-)

diff --git a/pd/src/g_template.c b/pd/src/g_template.c
index ebed62a0a..260456173 100644
--- a/pd/src/g_template.c
+++ b/pd/src/g_template.c
@@ -1132,8 +1132,11 @@ void *svg_new(t_pd *parent, t_symbol *s, int argc, t_atom *argv)
         nxy =  (argc + (argc & 1));
         /* give basic shapes at least 4 points */
         if (x->x_type == gensym("rect") ||
+            x->x_type == gensym("line") ||
             x->x_type == gensym("circle") ||
-            x->x_type == gensym("ellipse"))
+            x->x_type == gensym("ellipse") ||
+            x->x_type == gensym("polygon") ||
+            x->x_type == gensym("polyline"))
         {
             nxy = 4;
             if (argc > 4) argc = 4;
@@ -1142,8 +1145,11 @@ void *svg_new(t_pd *parent, t_symbol *s, int argc, t_atom *argv)
     }
     x->x_vec = (t_fielddesc *)t_getbytes(nxy * sizeof(t_fielddesc));
     if (x->x_type == gensym("rect") ||
+        x->x_type == gensym("line") ||
         x->x_type == gensym("circle") ||
-        x->x_type == gensym("ellipse"))
+        x->x_type == gensym("ellipse") ||
+        x->x_type == gensym("polygon") ||
+        x->x_type == gensym("polyline"))
     {
         /* set x_vec to all zeros in case the user didn't provide
            enough arguments */
@@ -1604,7 +1610,7 @@ void svg_vis(t_svg *x, t_symbol *s, int argc, t_atom *argv)
     }
 }
 
-/* resize x_vec et all for path or shape coordinate data */
+/* resize x_vec et al for path or shape coordinate data */
 void svg_resizecoords(t_svg *x, int argc, t_atom *argv)
 {
 //    if (x->x_type != gensym("path")) return;
@@ -1631,6 +1637,7 @@ void svg_resizecoords(t_svg *x, int argc, t_atom *argv)
 void svg_data(t_svg *x, t_symbol *s, int argc, t_atom *argv)
 {
     /* only process path data and polygon/polyline points */
+/* fix this!!! */
     if (x->x_type != gensym("path") && s != gensym("points")) return;
     /* resize the path data fields to fit the incoming data */
     svg_resizecoords(x, argc, argv);
@@ -3360,9 +3367,9 @@ static void draw_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
                     parentglist, data, basex, basey);
             }
             int flags = sa->x_flags;
-            t_float pix[200];
-            if (n > 200)
-                n = 200;
+            t_float pix[500];
+            if (n > 500)
+                n = 500;
                 /* calculate the pixel values before we start printing
                 out the TK message so that "error" printout won't be
                 interspersed with it.  Only show up to 100 points so we don't
@@ -6190,6 +6197,13 @@ static void drawnumber_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
     if (vis)
     {
         t_atom at;
+
+        /* hack to keep the font from scaling with the gop */
+        t_float xscale = glist_xtopixels(glist, 1) - glist_xtopixels(glist, 0);
+        t_float yscale = glist_ytopixels(glist, 1) - glist_ytopixels(glist, 0);
+        t_float xinv = xscale == 0 ? 0 : 1 / yscale;
+        t_float yinv = yscale == 0 ? 0 : 1 / xscale;
+
         int fontsize = fielddesc_getfloat(&x->x_fontsize, template, data, 0);
         if (!fontsize) fontsize = glist_getfont(glist);
         /*int xloc = glist_xtopixels(glist,
@@ -6211,11 +6225,12 @@ static void drawnumber_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
         sys_vgui(" -font {{%s} -%d %s}", sys_font,
             sys_hostfontsize(fontsize), sys_fontweight);*/
         sys_vgui(".x%lx.c create ptext %d [expr {[font metrics {{%s} %d} -ascent] + %d}] -textanchor start -fill %s -text {%s}\\\n",
-                glist_getcanvas(glist), xloc, sys_font, sys_hostfontsize(fontsize), yloc, colorstring, buf);
+               glist_getcanvas(glist), xloc, sys_font, sys_hostfontsize(fontsize), yloc, colorstring, buf);
         /* have to remove fontweight for the time being... */
         sys_vgui(" -fontfamily {%s} -fontsize %d", sys_font,
                 fontsize);
         sys_vgui(" -parent .scalar%lx", data);
+        sys_vgui(" -matrix {{%g 0.0} {0.0 %g} {0.0 0.0}}", xinv, yinv);
         sys_vgui(" -tags {.x%lx.x%lx.template%lx scalar%lx}\n", 
             glist_getcanvas(glist), glist, data, sc);
     }
@@ -6552,6 +6567,7 @@ static void drawsymbol_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
 {
     t_drawsymbol *x = (t_drawsymbol *)z;
 
+
     /*// get the universal tag for all nested objects
     t_canvas *tag = x->x_canvas;
     while (tag->gl_owner)
@@ -6565,6 +6581,13 @@ static void drawsymbol_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
     if (vis)
     {
         t_atom at;
+
+        /* hack to keep the font from scaling with the gop */
+        t_float xscale = glist_xtopixels(glist, 1) - glist_xtopixels(glist, 0);
+        t_float yscale = glist_ytopixels(glist, 1) - glist_ytopixels(glist, 0);
+        t_float xinv = xscale == 0 ? 0 : 1 / yscale;
+        t_float yinv = yscale == 0 ? 0 : 1 / xscale;
+
         int fontsize = fielddesc_getfloat(&x->x_fontsize, template, data, 0);
         if (!fontsize) fontsize = glist_getfont(glist);
         /*int xloc = glist_xtopixels(glist,
@@ -6581,6 +6604,8 @@ static void drawsymbol_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
             SETSYMBOL(&at, fielddesc_getsymbol(&x->x_value, template, data, 0));
         else SETFLOAT(&at, fielddesc_getfloat(&x->x_value, template, data, 0));
         drawsymbol_sprintf(x, buf, &at);
+
+
         /*sys_vgui(".x%lx.c create text %d %d -anchor nw -fill %s -text {%s}",
                 glist_getcanvas(glist), xloc, yloc, colorstring, buf);
         sys_vgui(" -font {{%s} -%d %s}", sys_font,
@@ -6588,8 +6613,9 @@ static void drawsymbol_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
         sys_vgui(".x%lx.c create ptext %d [expr {[font metrics {{%s} %d} -ascent] + %d}] -textanchor start -fill %s -text {%s}\\\n",
                 glist_getcanvas(glist), xloc, sys_font, sys_hostfontsize(fontsize), yloc, colorstring, buf);
         sys_vgui(" -fontfamily {%s} -fontsize %d ", sys_font,
-                fontsize);
+               fontsize);
         sys_vgui(" -parent .scalar%lx", data);
+        sys_vgui(" -matrix {{%g 0.0} {0.0 %g} {0.0 0.0}}", xinv, yinv);
         sys_vgui(" -tags {.x%lx.x%lx.template%lx scalar%lx}\n", 
             glist_getcanvas(glist), glist, data, sc);
     }
-- 
GitLab