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