From a8f070e40f1e872edc1066fc8b8abeef23d785da Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Fri, 6 Feb 2015 00:51:02 +0300 Subject: [PATCH] "Show image / show icon" debugger action: chess-like background for popup --- .../debugger/settings/IconObjectRenderer.java | 3 +- .../settings/ImageObjectRenderer.java | 28 ++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java b/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java index 26ddb3ff8155..f74ba0f7105e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java @@ -24,7 +24,6 @@ import com.intellij.debugger.ui.tree.ValueDescriptor; import com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; import com.intellij.icons.AllIcons; -import com.intellij.ui.components.JBLabel; import com.intellij.xdebugger.frame.XFullValueEvaluator; import org.jetbrains.annotations.NotNull; @@ -62,7 +61,7 @@ class IconObjectRenderer extends CompoundReferenceRenderer implements FullValueE return new CustomPopupFullValueEvaluator(" (Show icon)", evaluationContext) { @Override protected JComponent createComponent() { - return new JBLabel(ImageObjectRenderer.getIcon(myEvaluationContext, valueDescriptor.getValue(), "iconToBytes")); + return ImageObjectRenderer.createIconViewer(ImageObjectRenderer.getIcon(myEvaluationContext, valueDescriptor.getValue(), "iconToBytes")); } }; } diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java b/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java index bb43a98f8e79..96f7fbe086a2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/ImageObjectRenderer.java @@ -25,14 +25,19 @@ import com.intellij.debugger.ui.tree.ValueDescriptor; import com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; import com.intellij.rt.debugger.ImageSerializer; +import com.intellij.ui.Gray; +import com.intellij.ui.JBColor; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBScrollPane; +import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.frame.XFullValueEvaluator; import com.sun.jdi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; import java.util.Collections; import java.util.List; @@ -60,11 +65,32 @@ class ImageObjectRenderer extends CompoundReferenceRenderer implements FullValue return new CustomPopupFullValueEvaluator(" (Show image)", evaluationContext) { @Override protected JComponent createComponent() { - return new JBScrollPane(new JBLabel(getIcon(myEvaluationContext, valueDescriptor.getValue(), "imageToBytes"))); + return createIconViewer(getIcon(myEvaluationContext, valueDescriptor.getValue(), "imageToBytes")); } }; } + static JComponent createIconViewer(Icon icon) { + return new JBScrollPane(new JBLabel(icon){ + private BufferedImage myBackgroundImage = UIUtil.createImage(16, 16, BufferedImage.TYPE_INT_ARGB); + { + Graphics2D g = myBackgroundImage.createGraphics(); + g.setColor(new JBColor(Gray._255, Gray._135)); + g.fillRect(0, 0, 17, 17); + g.setColor(new JBColor(Gray._191, Gray._83)); + g.fillRect(0, 0, 8, 8); + g.fillRect(8, 8, 8, 8); + } + @Override + public void paint(Graphics g) { + ((Graphics2D)g).setPaint(new TexturePaint(myBackgroundImage, new Rectangle(0, 0, 16, 16))); + g.fillRect(0, 0, getWidth()+1, getHeight() + 1); + super.paint(g); + } + }); + + } + @Nullable static ImageIcon getIcon(EvaluationContext evaluationContext, Value obj, String methodName) { try {