better threading for image renderers

This commit is contained in:
Egor.Ushakov
2015-02-11 20:41:55 +03:00
parent 18e24158c6
commit 7a84351a65
4 changed files with 31 additions and 17 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,18 +29,20 @@ import javax.swing.*;
import java.awt.*;
/**
* Created by Egor on 04.10.2014.
* @author egor
*/
public abstract class CustomPopupFullValueEvaluator extends XFullValueEvaluator {
public abstract class CustomPopupFullValueEvaluator<T> extends XFullValueEvaluator {
protected final EvaluationContextImpl myEvaluationContext;
public CustomPopupFullValueEvaluator(@NotNull String linkText, EvaluationContextImpl evaluationContext) {
public CustomPopupFullValueEvaluator(@NotNull String linkText, @NotNull EvaluationContextImpl evaluationContext) {
super(linkText);
myEvaluationContext = evaluationContext;
setShowValuePopup(false);
}
protected abstract JComponent createComponent();
protected abstract T getData();
protected abstract JComponent createComponent(T data);
@Override
public void startEvaluation(@NotNull final XFullValueEvaluationCallback callback) {
@@ -52,10 +54,11 @@ public abstract class CustomPopupFullValueEvaluator extends XFullValueEvaluator
@Override
public void contextAction() throws Exception {
final JComponent comp = createComponent();
final T data = getData();
DebuggerUIUtil.invokeLater(new Runnable() {
@Override
public void run() {
final JComponent comp = createComponent(data);
Project project = myEvaluationContext.getProject();
JBPopup popup = DebuggerUIUtil.createValuePopup(project, comp, null);
JFrame frame = WindowManager.getInstance().getFrame(project);
@@ -63,7 +66,7 @@ public abstract class CustomPopupFullValueEvaluator extends XFullValueEvaluator
Dimension size = new Dimension(frameSize.width / 2, frameSize.height / 2);
popup.setSize(size);
callback.evaluated("");
popup.show(new RelativePoint(frame, new Point((int)size.getWidth() / 2, (int)size.getHeight() / 2)));
popup.show(new RelativePoint(frame, new Point(size.width / 2, size.height / 2)));
}
});
}
@@ -51,11 +51,10 @@ public class GraphicsObjectRenderer extends ToStringBasedRenderer implements Ful
if (!(type instanceof ReferenceType) || !DebuggerUtils.instanceOf(type, "java.awt.Image")) {
return null;
}
return new CustomPopupFullValueEvaluator(DebuggerBundle.message("message.node.show.image"), evaluationContext) {
return new ImageObjectRenderer.IconPopupEvaluator(DebuggerBundle.message("message.node.show.image"), evaluationContext) {
@Override
protected JComponent createComponent() {
return ImageObjectRenderer.createIconViewer(ImageObjectRenderer.getIcon(myEvaluationContext, bufImgValue,
"imageToBytes"));
protected Icon getData() {
return ImageObjectRenderer.getIcon(myEvaluationContext, bufImgValue, "imageToBytes");
}
};
} catch (Exception ignored) {}
@@ -49,10 +49,10 @@ class IconObjectRenderer extends ToStringBasedRenderer implements FullValueEvalu
@Nullable
@Override
public XFullValueEvaluator getFullValueEvaluator(final EvaluationContextImpl evaluationContext, final ValueDescriptorImpl valueDescriptor) {
return new CustomPopupFullValueEvaluator(DebuggerBundle.message("message.node.show.icon"), evaluationContext) {
return new ImageObjectRenderer.IconPopupEvaluator(DebuggerBundle.message("message.node.show.icon"), evaluationContext) {
@Override
protected JComponent createComponent() {
return ImageObjectRenderer.createIconViewer(ImageObjectRenderer.getIcon(myEvaluationContext, valueDescriptor.getValue(), "iconToBytes"));
protected Icon getData() {
return ImageObjectRenderer.getIcon(myEvaluationContext, valueDescriptor.getValue(), "iconToBytes");
}
};
}
@@ -27,6 +27,7 @@ import com.intellij.rt.debugger.ImageSerializer;
import com.intellij.xdebugger.frame.XFullValueEvaluator;
import com.sun.jdi.*;
import org.intellij.images.editor.impl.ImageEditorManagerImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -50,10 +51,10 @@ class ImageObjectRenderer extends ToStringBasedRenderer implements FullValueEval
@Nullable
@Override
public XFullValueEvaluator getFullValueEvaluator(final EvaluationContextImpl evaluationContext, final ValueDescriptorImpl valueDescriptor) {
return new CustomPopupFullValueEvaluator(DebuggerBundle.message("message.node.show.image"), evaluationContext) {
return new IconPopupEvaluator(DebuggerBundle.message("message.node.show.image"), evaluationContext) {
@Override
protected JComponent createComponent() {
return createIconViewer(getIcon(myEvaluationContext, valueDescriptor.getValue(), "imageToBytes"));
protected Icon getData() {
return getIcon(myEvaluationContext, valueDescriptor.getValue(), "imageToBytes");
}
};
}
@@ -118,4 +119,15 @@ class ImageObjectRenderer extends ToStringBasedRenderer implements FullValueEval
}
return null;
}
static abstract class IconPopupEvaluator extends CustomPopupFullValueEvaluator<Icon> {
public IconPopupEvaluator(@NotNull String linkText, @NotNull EvaluationContextImpl evaluationContext) {
super(linkText, evaluationContext);
}
@Override
protected JComponent createComponent(Icon data) {
return createIconViewer(data);
}
}
}