Configurable hw acceleration

This commit is contained in:
Branislav Stojkovic
2019-01-17 11:08:17 +01:00
parent 9757e81500
commit 5dc911776c
6 changed files with 72 additions and 49 deletions
@@ -71,7 +71,8 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP
public static final String RECENT_FILES_KEY = "recentFiles"; public static final String RECENT_FILES_KEY = "recentFiles";
public static final String SHOW_RULERS_KEY = "showRulers"; public static final String SHOW_RULERS_KEY = "showRulers";
public static final String SHOW_GRID_KEY = "showGrid"; public static final String SHOW_GRID_KEY = "showGrid";
public static final String HIGHLIGHT_CONTINUITY_AREA = "highlightContinuityArea"; public static final String HIGHLIGHT_CONTINUITY_AREA = "highlightContinuityArea";
public static final String HARDWARE_ACCELERATION = "hardwareAcceleration";
public static final int DND_TOGGLE_STICKY = 0x1; public static final int DND_TOGGLE_STICKY = 0x1;
public static final int DND_TOGGLE_SNAP = 0x40000000; public static final int DND_TOGGLE_SNAP = 0x40000000;
Binary file not shown.
@@ -21,42 +21,42 @@
*/ */
package org.diylc.swing.plugins.canvas; package org.diylc.swing.plugins.canvas;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration; import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice; import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment; import java.awt.GraphicsEnvironment;
import java.awt.Image; import java.awt.Image;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.dnd.Autoscroll; import java.awt.dnd.Autoscroll;
import java.awt.dnd.DnDConstants; import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragSource; import java.awt.dnd.DragSource;
import java.awt.dnd.DropTarget; import java.awt.dnd.DropTarget;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ComponentAdapter; import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent; import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.image.VolatileImage; import java.awt.image.VolatileImage;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.common.ComponentType; import org.diylc.common.ComponentType;
import org.diylc.common.DrawOption; import org.diylc.common.DrawOption;
import org.diylc.common.IBlockProcessor.InvalidBlockException; import org.diylc.common.IBlockProcessor.InvalidBlockException;
import org.diylc.common.IPlugInPort; import org.diylc.common.IPlugInPort;
import org.diylc.swing.plugins.tree.TreePanel; import org.diylc.swing.plugins.tree.TreePanel;
/** /**
* GUI class used to draw onto. * GUI class used to draw onto.
@@ -74,7 +74,7 @@ public class CanvasPanel extends JComponent implements Autoscroll {
private Image bufferImage; private Image bufferImage;
private GraphicsConfiguration screenGraphicsConfiguration; private GraphicsConfiguration screenGraphicsConfiguration;
public static boolean USE_HARDWARE_ACCELLERATION = false; public boolean useHardwareAcceleration = false;
// static final EnumSet<DrawOption> DRAW_OPTIONS = // static final EnumSet<DrawOption> DRAW_OPTIONS =
// EnumSet.of(DrawOption.GRID, // EnumSet.of(DrawOption.GRID,
@@ -209,7 +209,7 @@ public class CanvasPanel extends JComponent implements Autoscroll {
} }
protected void createBufferImage() { protected void createBufferImage() {
if (USE_HARDWARE_ACCELLERATION) { if (useHardwareAcceleration) {
bufferImage = screenGraphicsConfiguration.createCompatibleVolatileImage(getWidth(), getHeight()); bufferImage = screenGraphicsConfiguration.createCompatibleVolatileImage(getWidth(), getHeight());
((VolatileImage) bufferImage).validate(screenGraphicsConfiguration); ((VolatileImage) bufferImage).validate(screenGraphicsConfiguration);
} else { } else {
@@ -238,7 +238,7 @@ public class CanvasPanel extends JComponent implements Autoscroll {
drawOptions.add(DrawOption.GRID); drawOptions.add(DrawOption.GRID);
} }
plugInPort.draw(g2d, drawOptions, null); plugInPort.draw(g2d, drawOptions, null);
if (USE_HARDWARE_ACCELLERATION) { if (useHardwareAcceleration) {
VolatileImage volatileImage = (VolatileImage) bufferImage; VolatileImage volatileImage = (VolatileImage) bufferImage;
do { do {
try { try {
@@ -301,5 +301,10 @@ public class CanvasPanel extends JComponent implements Autoscroll {
public Insets getAutoscrollInsets() { public Insets getAutoscrollInsets() {
Rectangle rect = getVisibleRect(); Rectangle rect = getVisibleRect();
return new Insets(rect.y - 15, rect.x - 15, rect.y + rect.height + 15, rect.x + rect.width + 15); return new Insets(rect.y - 15, rect.x - 15, rect.y + rect.height + 15, rect.x + rect.width + 15);
}
public void setUseHardwareAcceleration(boolean useHardwareAcceleration) {
this.useHardwareAcceleration = useHardwareAcceleration;
bufferImage = null;
} }
} }
@@ -124,6 +124,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
} }
getScrollPane().setRulerVisible(ConfigurationManager.getInstance().readBoolean(IPlugInPort.SHOW_RULERS_KEY, true)); getScrollPane().setRulerVisible(ConfigurationManager.getInstance().readBoolean(IPlugInPort.SHOW_RULERS_KEY, true));
ConfigurationManager.getInstance().addConfigListener(IPlugInPort.SHOW_RULERS_KEY, new IConfigListener() { ConfigurationManager.getInstance().addConfigListener(IPlugInPort.SHOW_RULERS_KEY, new IConfigListener() {
@Override @Override
@@ -132,6 +133,15 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
getScrollPane().setRulerVisible((Boolean) value); getScrollPane().setRulerVisible((Boolean) value);
} }
}); });
ConfigurationManager.getInstance().addConfigListener(IPlugInPort.HARDWARE_ACCELERATION, new IConfigListener() {
@Override
public void valueChanged(String key, Object value) {
canvasPanel.setUseHardwareAcceleration((Boolean) value);
scrollPane.setUseHardwareAcceleration((Boolean) value);
}
});
} }
public CanvasPanel getCanvasPanel() { public CanvasPanel getCanvasPanel() {
@@ -72,33 +72,36 @@ public class ConfigPlugin implements IPlugIn {
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Continuous Creation", ActionFactory.getInstance().createConfigAction(plugInPort, "Continuous Creation",
IPlugInPort.CONTINUOUS_CREATION_KEY, false), CONFIG_MENU); IPlugInPort.CONTINUOUS_CREATION_KEY, false), CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Show Rulers", IPlugInPort.SHOW_RULERS_KEY, true),
CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Show Grid", IPlugInPort.SHOW_GRID_KEY, true),
CONFIG_MENU);
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Export Grid", IPlugInPort.EXPORT_GRID_KEY, false), ActionFactory.getInstance().createConfigAction(plugInPort, "Export Grid", IPlugInPort.EXPORT_GRID_KEY, false),
CONFIG_MENU); CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Hardware Acceleration", IPlugInPort.HARDWARE_ACCELERATION, false),
CONFIG_MENU);
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Hi-Quality Rendering", ActionFactory.getInstance().createConfigAction(plugInPort, "Hi-Quality Rendering",
IPlugInPort.HI_QUALITY_RENDER_KEY, false), CONFIG_MENU); IPlugInPort.HI_QUALITY_RENDER_KEY, false), CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Highlight Connected Areas",
IPlugInPort.HIGHLIGHT_CONTINUITY_AREA, false, IPlugInPort.HIGHLIGHT_CONTINUITY_AREA), CONFIG_MENU);
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Mouse Wheel Zoom", IPlugInPort.WHEEL_ZOOM_KEY, ActionFactory.getInstance().createConfigAction(plugInPort, "Mouse Wheel Zoom", IPlugInPort.WHEEL_ZOOM_KEY,
false), CONFIG_MENU); false), CONFIG_MENU);
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Outline Mode", IPlugInPort.OUTLINE_KEY, false), ActionFactory.getInstance().createConfigAction(plugInPort, "Outline Mode", IPlugInPort.OUTLINE_KEY, false),
CONFIG_MENU); CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Show Rulers", IPlugInPort.SHOW_RULERS_KEY, true),
CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Show Grid", IPlugInPort.SHOW_GRID_KEY, true),
CONFIG_MENU);
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Snap to Grid", IPlugInPort.SNAP_TO_GRID_KEY, true), ActionFactory.getInstance().createConfigAction(plugInPort, "Snap to Grid", IPlugInPort.SNAP_TO_GRID_KEY, true),
CONFIG_MENU); CONFIG_MENU);
swingUI.injectMenuAction( swingUI.injectMenuAction(
ActionFactory.getInstance() ActionFactory.getInstance()
.createConfigAction(plugInPort, "Sticky Points", IPlugInPort.STICKY_POINTS_KEY, true), CONFIG_MENU); .createConfigAction(plugInPort, "Sticky Points", IPlugInPort.STICKY_POINTS_KEY, true), CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Highlight Connected Areas",
IPlugInPort.HIGHLIGHT_CONTINUITY_AREA, false, IPlugInPort.HIGHLIGHT_CONTINUITY_AREA), CONFIG_MENU);
File themeDir = new File("themes"); File themeDir = new File("themes");
if (themeDir.exists()) { if (themeDir.exists()) {
+4
View File
@@ -2258,6 +2258,10 @@
<releaseDate>2019-01-16 00:00:00.000 CET</releaseDate> <releaseDate>2019-01-16 00:00:00.000 CET</releaseDate>
<name></name> <name></name>
<changes> <changes>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Configurable graphics hardware acceleration</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change> <org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType> <changeType>IMPROVEMENT</changeType>
<description>Fixed the issue with Ohm symbol rendering with some fonts and changed default project font back to "Square721 BT"</description> <description>Fixed the issue with Ohm symbol rendering with some fonts and changed default project font back to "Square721 BT"</description>