diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 22645328..ac64bd27 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 60e129da..4b662540 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ 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 984d4763..f769526a 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 @@ -17,6 +17,7 @@ */ package org.diylc.swing.plugins.canvas; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; @@ -106,6 +107,11 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { private Clipboard clipboard; private double zoomLevel = 1; + + // mouse scroll mode + private boolean mouseScrollMode = false; + private Point mouseScrollPrevLocation = null; + private static double MOUSE_SCROLL_SPEED = 0.8; public CanvasPlugin(ISwingUI swingUI) { this.swingUI = swingUI; @@ -141,8 +147,17 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { @Override public void mouseClicked(MouseEvent e) { - plugInPort.mouseClicked(e.getPoint(), e.getButton(), Utils.isMac() ? e.isMetaDown() : e.isControlDown(), e.isShiftDown(), e.isAltDown(), + if (!mouseScrollMode && e.getButton() == MouseEvent.BUTTON2) { + mouseScrollPrevLocation = null; + mouseScrollMode = true; + canvasPanel.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } else if (mouseScrollMode) { + mouseScrollMode = false; + canvasPanel.setCursor(plugInPort.getCursorAt(e.getPoint())); + } else { + plugInPort.mouseClicked(e.getPoint(), e.getButton(), Utils.isMac() ? e.isMetaDown() : e.isControlDown(), e.isShiftDown(), e.isAltDown(), e.getClickCount()); + } } @Override @@ -210,8 +225,18 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { @Override public void mouseMoved(MouseEvent e) { - canvasPanel.setCursor(plugInPort.getCursorAt(e.getPoint())); - plugInPort.mouseMoved(e.getPoint(), Utils.isMac() ? e.isMetaDown() : e.isControlDown(), e.isShiftDown(), e.isAltDown()); + if (mouseScrollMode) { + if (mouseScrollPrevLocation != null) { + int dx = (int) ((e.getPoint().x - mouseScrollPrevLocation.x) * MOUSE_SCROLL_SPEED); + int dy = (int) ((e.getPoint().y - mouseScrollPrevLocation.y) * MOUSE_SCROLL_SPEED); + scrollPane.getHorizontalScrollBar().setValue(scrollPane.getHorizontalScrollBar().getValue() + dx); + scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getValue() + dy); + } + mouseScrollPrevLocation = e.getPoint(); + } else { + canvasPanel.setCursor(plugInPort.getCursorAt(e.getPoint())); + plugInPort.mouseMoved(e.getPoint(), Utils.isMac() ? e.isMetaDown() : e.isControlDown(), e.isShiftDown(), e.isAltDown()); + } } }); } diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 75cd41c1..dda26e6b 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2206,6 +2206,10 @@ 2018-12-26 00:00:00.000 CET + + NEW_FEATURE + Middle mouse click activates mouse movement scroll mode, similar to web browsers + NEW_FEATURE When "High Quality Rendering" option is checked, some components are rendered with 3D shading for better looks