From c1f648f53219f4f5f4243d11ecc39f52b7391cda Mon Sep 17 00:00:00 2001 From: bubblobill Date: Fri, 27 Feb 2026 18:36:34 +0800 Subject: [PATCH 1/3] Revert to copying the id in the AbstractDrawing copy constructor; otherwise it breaks drawing user interactions. Updated ShapeFunctions method drawShape to assign a new ID to the copied ShapeDrawable. --- .../net/rptools/maptool/client/functions/ShapeFunctions.java | 2 ++ .../net/rptools/maptool/model/drawing/AbstractDrawing.java | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java b/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java index f696e8ed56..e9dbf96ddf 100644 --- a/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java +++ b/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java @@ -522,6 +522,8 @@ private Object drawShape( throw new ParserException(I18N.getText(OBJECT_NOT_FOUND, functionName, shapeName)); } ShapeDrawable shapeDrawable = CACHED_SHAPES.get(shapeName); + shapeDrawable.setId( + new GUID()); // this gives the drawn element a separate ID to the cached shape Rectangle bounds = shapeDrawable.getBounds(); /* Sanity checks */ diff --git a/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java b/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java index de6357eebe..ffd4c08460 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java +++ b/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java @@ -46,8 +46,8 @@ protected AbstractDrawing(GUID id) { } protected AbstractDrawing(AbstractDrawing other) { - // The only thing we don't preserve is the ID. - this.id = new GUID(); + // The only thing we don't preserve is the ID. - umm except that we obviously do + this.id = other.id; this.layer = other.layer; this.name = other.name; } From f6ac4a088dcef100146f0dafb5bca1bf6000dc6b Mon Sep 17 00:00:00 2001 From: bubblobill Date: Wed, 18 Mar 2026 19:26:50 +0800 Subject: [PATCH 2/3] Spurious comment removed --- .../java/net/rptools/maptool/model/drawing/AbstractDrawing.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java b/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java index 0aa22585f4..f50d67e4f4 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java +++ b/src/main/java/net/rptools/maptool/model/drawing/AbstractDrawing.java @@ -46,7 +46,6 @@ protected AbstractDrawing(GUID id) { } protected AbstractDrawing(AbstractDrawing other) { - // The only thing we don't preserve is the ID. - umm except that we obviously do this.id = other.id; this.layer = other.layer; this.name = other.name; From a521df4b5f992f5c1d45893d758c42e1ffd25e4c Mon Sep 17 00:00:00 2001 From: bubblobill Date: Fri, 20 Mar 2026 21:43:05 +0800 Subject: [PATCH 3/3] change id of cached shape when using drawShape --- .../net/rptools/maptool/client/functions/ShapeFunctions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java b/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java index 7ab7a21831..714c0ff554 100644 --- a/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java +++ b/src/main/java/net/rptools/maptool/client/functions/ShapeFunctions.java @@ -521,7 +521,7 @@ private Object drawShape( if (!CACHED_SHAPES.containsKey(shapeName)) { throw new ParserException(I18N.getText(OBJECT_NOT_FOUND, functionName, shapeName)); } - ShapeDrawable shapeDrawable = CACHED_SHAPES.get(shapeName); + ShapeDrawable shapeDrawable = new ShapeDrawable(CACHED_SHAPES.get(shapeName)); shapeDrawable.setId( new GUID()); // this gives the drawn element a separate ID to the cached shape Rectangle bounds = shapeDrawable.getBounds();