]> granicus.if.org Git - graphviz/commitdiff
Fix pos handling code to work with floating point
authorerg <devnull@localhost>
Mon, 15 Sep 2008 17:44:12 +0000 (17:44 +0000)
committererg <devnull@localhost>
Mon, 15 Sep 2008 17:44:12 +0000 (17:44 +0000)
cmd/smyrna/viewport.c

index 2deed8d99c53082e4a5ac46694342590e9c16669..b21a78b1c55f50216602ca326672fe6fa1893675 100755 (executable)
@@ -1006,25 +1006,13 @@ static int init_object_custom_data(Agraph_t * graph, void *obj)
 void move_node(void *obj, float dx, float dy)
 {
     char buf[512];
-    char buf2[512];
-    char *pch;
-    int a = 0;
-    int i = 0;
-    if ((agget(obj, "pos")) && (AGTYPE(obj) == AGNODE)) {
-       //tokenize 
-       strcpy(buf, agget(obj, "pos"));
-
-       pch = strtok(buf, ",");
-       while (pch != NULL) {
-           if (i == 0)
-               a = sprintf(buf2 + a, "%i,", atoi(pch) - (int) dx);
-           else
-               a = sprintf(buf2 + a, "%i,", atoi(pch) - (int) dy);
-           pch = strtok(NULL, ",");
-           i++;
-       }
-       buf2[strlen(buf2) - 1] = '\0';
-       agset(obj, "pos", buf2);
+    double x, y;
+    Agsym_t* pos;
+
+    if ((AGTYPE(obj) == AGNODE) && (pos = agattrsym (obj, "pos"))) {
+       sscanf (agxget (obj, pos), "%lf,%lf", &x, &y);
+       sprintf (buf, "%lf,%lf", x - dx, y - dy);
+       agxset(obj, pos, buf);
     }
 }