mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
better threading for image renderers
This commit is contained in:
+10
-7
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user