From 9b772ac0a0537ac7a9862be4bac96581d250a139 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@vt.edu>
Date: Wed, 18 Sep 2013 21:27:27 -0400
Subject: [PATCH] fixed regression of drawing ellipses/circles and their redraw
 in response to move command

---
 pd/tkpath/ChangeLog               |  1 +
 pd/tkpath/generic/path.c          |  2 +-
 pd/tkpath/generic/tkCanvEllipse.c | 18 +++++++++++-------
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/pd/tkpath/ChangeLog b/pd/tkpath/ChangeLog
index ad4cc27e9..f0731b813 100755
--- a/pd/tkpath/ChangeLog
+++ b/pd/tkpath/ChangeLog
@@ -18,6 +18,7 @@
 	* tclconfig/tcl.m4:
 	* configure, configure.in: Updated to TEA 3.9.
 	* generic/*.c: Various fixes for mingw32/mingw64.
+	* configure, configure.in: Bumped revision to 0.3.3
 
 2011-10-28  Peter Spjuth  <peter.spjuth@gmail.com>
 
diff --git a/pd/tkpath/generic/path.c b/pd/tkpath/generic/path.c
index 9a4e5060c..b421bc982 100644
--- a/pd/tkpath/generic/path.c
+++ b/pd/tkpath/generic/path.c
@@ -18,7 +18,7 @@
 
 /* Keep patch level release numbers odd and set even only on release. */
 #define TKPATH_VERSION    "0.3"
-#define TKPATH_PATCHLEVEL "0.3.2"
+#define TKPATH_PATCHLEVEL "0.3.3"
 #define TKPATH_REQUIRE    "8.5"
 
 int gAntiAlias = 1;
diff --git a/pd/tkpath/generic/tkCanvEllipse.c b/pd/tkpath/generic/tkCanvEllipse.c
index 25f973149..432ffb0a6 100644
--- a/pd/tkpath/generic/tkCanvEllipse.c
+++ b/pd/tkpath/generic/tkCanvEllipse.c
@@ -215,6 +215,8 @@ CreateAny(Tcl_Interp *interp, Tk_PathCanvas canvas, struct Tk_PathItem *itemPtr,
     itemExPtr->canvas = canvas;
     itemExPtr->styleObj = NULL;
     itemExPtr->styleInst = NULL;
+    itemPtr->bbox = NewEmptyPathRect();
+    itemPtr->totalBbox = NewEmptyPathRect();
     ellPtr->type = type;
 
     if (ellPtr->type == kOvalTypeCircle) {
@@ -290,7 +292,6 @@ ComputeEllipseBbox(Tk_PathCanvas canvas, EllipseItem *ellPtr)
     Tk_PathItem *itemPtr = &itemExPtr->header;
     Tk_PathStyle style;
     Tk_PathState state = itemExPtr->header.state;
-    PathRect totalBbox, bbox;
 
     if(state == TK_PATHSTATE_NULL) {
 	state = TkPathCanvasState(canvas);
@@ -301,9 +302,9 @@ ComputeEllipseBbox(Tk_PathCanvas canvas, EllipseItem *ellPtr)
         return;
     }
     style = TkPathCanvasInheritStyle(itemPtr, kPathMergeStyleNotFill);
-    bbox = GetBareBbox(ellPtr);
-    totalBbox = GetGenericPathTotalBboxFromBare(NULL, &style, &bbox);
-    SetGenericPathHeaderBbox(&itemExPtr->header, style.matrixPtr, &totalBbox);
+    itemPtr->bbox = GetBareBbox(ellPtr);
+    itemPtr->totalBbox = GetGenericPathTotalBboxFromBare(NULL, &style, &itemPtr->bbox);
+    SetGenericPathHeaderBbox(&itemExPtr->header, style.matrixPtr, &itemPtr->totalBbox);
     TkPathCanvasFreeInheritedStyle(&style);
 }
 
@@ -399,7 +400,7 @@ DisplayEllipse(Tk_PathCanvas canvas, Tk_PathItem *itemPtr, Display *display, Dra
 {
     EllipseItem *ellPtr = (EllipseItem *) itemPtr;
     TMatrix m = GetCanvasTMatrix(canvas);
-    PathRect bbox;
+    //PathRect bbox;
     PathAtom *atomPtr;
     EllipseAtom ellAtom;
     Tk_PathStyle style;    
@@ -419,9 +420,9 @@ DisplayEllipse(Tk_PathCanvas canvas, Tk_PathItem *itemPtr, Display *display, Dra
     ellAtom.rx = ellPtr->rx;
     ellAtom.ry = ellPtr->ry;
     
-    bbox = GetBareBbox(ellPtr);
+    itemPtr->bbox = GetBareBbox(ellPtr);
     style = TkPathCanvasInheritStyle(itemPtr, 0);
-    TkPathDrawPath(Tk_PathCanvasTkwin(canvas), drawable, atomPtr, &style, &m, &bbox);
+    TkPathDrawPath(Tk_PathCanvasTkwin(canvas), drawable, atomPtr, &style, &m, &itemPtr->bbox);
     TkPathCanvasFreeInheritedStyle(&style);
 }
 
@@ -630,6 +631,9 @@ TranslateEllipse(Tk_PathCanvas canvas, Tk_PathItem *itemPtr, double deltaX, doub
 
     ellPtr->center[0] += deltaX;
     ellPtr->center[1] += deltaY;
+    //TranslatePathAtoms(ellPtr->atomPtr, deltaX, deltaY);
+    TranslatePathRect(&itemPtr->bbox, deltaX, deltaY);
+    TranslatePathRect(&itemPtr->totalBbox, deltaX, deltaY);
     TranslateItemHeader(itemPtr, deltaX, deltaY);
 }
 
-- 
GitLab