From b9f9a48a5958842de62f93e47706348386afd63a Mon Sep 17 00:00:00 2001 From: Tyler Hobbs Date: Sun, 22 Mar 2020 19:54:28 -0500 Subject: [PATCH] Fix PGraphicsJava2D.copy() when src is of same class --- core/src/processing/awt/PGraphicsJava2D.java | 21 +++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/core/src/processing/awt/PGraphicsJava2D.java b/core/src/processing/awt/PGraphicsJava2D.java index 7d6e1c5972..1aa36a545e 100644 --- a/core/src/processing/awt/PGraphicsJava2D.java +++ b/core/src/processing/awt/PGraphicsJava2D.java @@ -3001,9 +3001,24 @@ public void copy(int sx, int sy, int sw, int sh, public void copy(PImage src, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh) { - g2.drawImage((Image) src.getNative(), - dx, dy, dx + dw, dy + dh, - sx, sy, sx + sw, sy + sh, null); + + if (src instanceof PGraphicsJava2D) { + // getNative() returns g2 for this class, need to use getImage() instead + g2.drawImage(src.getImage(), + dx, dy, dx + dw, dy + dh, + sx, sy, sx + sw, sy + sh, null); + } else { + // normally we can use getNative() + Object srcImage = src.getNative(); + if (srcImage instanceof Image) { + g2.drawImage((Image) srcImage, + dx, dy, dx + dw, dy + dh, + sx, sy, sx + sw, sy + sh, null); + } else { + // fall back to using PImage.blend() with REPLACE mode + super.copy(src, sx, sy, sw, sh, dx, dy, dw, dh); + } + } }