diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index eb2a3b1e..d5a2b8fd 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -71,7 +71,8 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP public static final String RECENT_FILES_KEY = "recentFiles"; public static final String SHOW_RULERS_KEY = "showRulers"; 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_SNAP = 0x40000000; diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index af1be794..d0748117 100644 Binary files a/diylc/diylc-swing/lib/swing-framework.jar and b/diylc/diylc-swing/lib/swing-framework.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java index 56b3181a..ff3c4f16 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java @@ -21,42 +21,42 @@ */ package org.diylc.swing.plugins.canvas; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.GraphicsConfiguration; -import java.awt.GraphicsDevice; -import java.awt.GraphicsEnvironment; -import java.awt.Image; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.dnd.Autoscroll; -import java.awt.dnd.DnDConstants; -import java.awt.dnd.DragSource; -import java.awt.dnd.DropTarget; -import java.awt.event.ActionEvent; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.KeyEvent; -import java.awt.image.VolatileImage; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.swing.AbstractAction; -import javax.swing.JComponent; -import javax.swing.KeyStroke; - -import org.apache.log4j.Logger; -import org.diylc.appframework.miscutils.ConfigurationManager; -import org.diylc.common.ComponentType; -import org.diylc.common.DrawOption; -import org.diylc.common.IBlockProcessor.InvalidBlockException; -import org.diylc.common.IPlugInPort; -import org.diylc.swing.plugins.tree.TreePanel; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Image; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.dnd.Autoscroll; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragSource; +import java.awt.dnd.DropTarget; +import java.awt.event.ActionEvent; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.KeyEvent; +import java.awt.image.VolatileImage; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.swing.AbstractAction; +import javax.swing.JComponent; +import javax.swing.KeyStroke; + +import org.apache.log4j.Logger; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.ComponentType; +import org.diylc.common.DrawOption; +import org.diylc.common.IBlockProcessor.InvalidBlockException; +import org.diylc.common.IPlugInPort; +import org.diylc.swing.plugins.tree.TreePanel; /** * GUI class used to draw onto. @@ -74,7 +74,7 @@ public class CanvasPanel extends JComponent implements Autoscroll { private Image bufferImage; private GraphicsConfiguration screenGraphicsConfiguration; - public static boolean USE_HARDWARE_ACCELLERATION = false; + public boolean useHardwareAcceleration = false; // static final EnumSet DRAW_OPTIONS = // EnumSet.of(DrawOption.GRID, @@ -209,7 +209,7 @@ public class CanvasPanel extends JComponent implements Autoscroll { } protected void createBufferImage() { - if (USE_HARDWARE_ACCELLERATION) { + if (useHardwareAcceleration) { bufferImage = screenGraphicsConfiguration.createCompatibleVolatileImage(getWidth(), getHeight()); ((VolatileImage) bufferImage).validate(screenGraphicsConfiguration); } else { @@ -238,7 +238,7 @@ public class CanvasPanel extends JComponent implements Autoscroll { drawOptions.add(DrawOption.GRID); } plugInPort.draw(g2d, drawOptions, null); - if (USE_HARDWARE_ACCELLERATION) { + if (useHardwareAcceleration) { VolatileImage volatileImage = (VolatileImage) bufferImage; do { try { @@ -301,5 +301,10 @@ public class CanvasPanel extends JComponent implements Autoscroll { public Insets getAutoscrollInsets() { Rectangle rect = getVisibleRect(); 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; } } diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index 8a398564..9e6f8c18 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -124,6 +124,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { } getScrollPane().setRulerVisible(ConfigurationManager.getInstance().readBoolean(IPlugInPort.SHOW_RULERS_KEY, true)); + ConfigurationManager.getInstance().addConfigListener(IPlugInPort.SHOW_RULERS_KEY, new IConfigListener() { @Override @@ -132,6 +133,15 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { 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() { diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java index aa916c53..ba3e8724 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java @@ -72,33 +72,36 @@ public class ConfigPlugin implements IPlugIn { swingUI.injectMenuAction( ActionFactory.getInstance().createConfigAction(plugInPort, "Continuous Creation", 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( ActionFactory.getInstance().createConfigAction(plugInPort, "Export Grid", IPlugInPort.EXPORT_GRID_KEY, false), CONFIG_MENU); + swingUI.injectMenuAction( + ActionFactory.getInstance().createConfigAction(plugInPort, "Hardware Acceleration", IPlugInPort.HARDWARE_ACCELERATION, false), + CONFIG_MENU); swingUI.injectMenuAction( ActionFactory.getInstance().createConfigAction(plugInPort, "Hi-Quality Rendering", 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( ActionFactory.getInstance().createConfigAction(plugInPort, "Mouse Wheel Zoom", IPlugInPort.WHEEL_ZOOM_KEY, false), CONFIG_MENU); swingUI.injectMenuAction( ActionFactory.getInstance().createConfigAction(plugInPort, "Outline Mode", IPlugInPort.OUTLINE_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( ActionFactory.getInstance().createConfigAction(plugInPort, "Snap to Grid", IPlugInPort.SNAP_TO_GRID_KEY, true), CONFIG_MENU); swingUI.injectMenuAction( ActionFactory.getInstance() .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"); if (themeDir.exists()) { diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index b6026d21..f58caf95 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2258,6 +2258,10 @@ 2019-01-16 00:00:00.000 CET + + NEW_FEATURE + Configurable graphics hardware acceleration + IMPROVEMENT Fixed the issue with Ohm symbol rendering with some fonts and changed default project font back to "Square721 BT"