From b9e60534cf9409cd00a1e47619399057f6c031b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 28 Feb 2021 20:03:20 +0100 Subject: [PATCH] Fixed: Copying to clipboard does not support transparency --- src/com/jpexs/decompiler/flash/gui/ImagePanel.java | 8 ++++++++ .../jpexs/decompiler/flash/gui/SoundTagPlayer.java | 5 +++++ .../flash/gui/player/FlashPlayerPanel.java | 10 ++++++++++ .../decompiler/flash/gui/player/MediaDisplay.java | 2 ++ .../decompiler/flash/gui/player/PlayerControls.java | 12 +++++++++++- 5 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index f913167cb..b2a246058 100644 --- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -171,6 +171,14 @@ public final class ImagePanel extends JPanel implements MediaDisplay { listeners.remove(listener); } + @Override + public Color getBackgroundColor() { + if (swf != null && swf.getBackgroundColor() != null) { + return swf.getBackgroundColor().backgroundColor.toColor(); + } + return Color.white; + } + private class IconPanel extends JPanel { private SerializableImage _img; diff --git a/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java b/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java index df30ab25d..056bee3ae 100644 --- a/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java +++ b/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java @@ -323,4 +323,9 @@ public class SoundTagPlayer implements MediaDisplay { loopCount--; } } + + @Override + public Color getBackgroundColor() { + return Color.white; + } } diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index 3c7b6c95a..33d446116 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -70,6 +70,8 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis private float frameRate; + private Color bgColor; + @Override public boolean loopAvailable() { return false; @@ -435,4 +437,12 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis public void removeEventListener(MediaDisplayListener listener) { listeners.remove(listener); } + + @Override + public Color getBackgroundColor() { + if (bgColor == null) { + return Color.white; + } + return bgColor; + } } diff --git a/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java b/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java index 65109b8bf..8d9fad9d6 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java +++ b/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java @@ -67,4 +67,6 @@ public interface MediaDisplay extends Closeable { public void addEventListener(MediaDisplayListener listener); public void removeEventListener(MediaDisplayListener listener); + + public Color getBackgroundColor(); } diff --git a/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java b/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java index d873e74e4..3ef3ba4b9 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java +++ b/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java @@ -26,6 +26,7 @@ import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; +import java.awt.Graphics2D; import java.awt.Image; import java.awt.Insets; import java.awt.Toolkit; @@ -585,7 +586,16 @@ public class PlayerControls extends JPanel implements MediaDisplayListener { if (img == null) { return; } - TransferableImage trans = new TransferableImage(img); + + //Copy to clipboard does not support transparency + BufferedImage newImage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); + Graphics2D g = newImage.createGraphics(); + g.setColor(display.getBackgroundColor()); + g.fillRect(0, 0, img.getWidth(), img.getHeight()); + g.drawImage(img, 0, 0, null); + g.dispose(); + + TransferableImage trans = new TransferableImage(newImage); Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); c.setContents(trans, new ClipboardOwner() { @Override