Skip to content

Commit

Permalink
Added scrollwheel support
Browse files Browse the repository at this point in the history
  • Loading branch information
Pegacraft committed Feb 17, 2021
1 parent cacaf6e commit b63e110
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/main/java/engine/Display.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ private void createWindow() {

canvas.addKeyListener(keyListener);
canvas.addMouseListener(mouseListener);
canvas.addMouseWheelListener(mouseListener);
}

/**
Expand Down
24 changes: 23 additions & 1 deletion src/main/java/engine/listeners/Mouse.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.util.EnumMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
Expand All @@ -18,7 +20,7 @@
*
* @see Mouse#addEvent
*/
public class Mouse implements MouseListener {
public class Mouse implements MouseListener, MouseWheelListener {
private final EnumMap<MouseButtons, CopyOnWriteArrayList<Predicate<MouseEvent>>> onMouseEvent =
new EnumMap<>(MouseButtons.class);
private final Display display;
Expand All @@ -27,6 +29,15 @@ public class Mouse implements MouseListener {
private boolean held = false;
private int mouseEvent;
private boolean isMouseInside = true;
/**
* negative when scrolling upwards<br>
* positive downwards<br>
* dependant on system setting
*/
public int scrollDirection;
private int scrollDirectionBuffer;
public int scrollingSpeed;
private int scrollingSpeedBuffer;

public Mouse(Display display) {
this.display = display;
Expand Down Expand Up @@ -73,6 +84,11 @@ public void mouseExited(MouseEvent e) {
* Internal function. it shall not be used.
*/
public void mouseLoop(Display display) {
scrollDirection = scrollDirectionBuffer;
scrollingSpeed = scrollingSpeedBuffer;
scrollDirectionBuffer = 0;
scrollingSpeedBuffer = 0;

try {
x = (int) Math.round(MouseInfo.getPointerInfo().getLocation().getX()
- display.getCanvas().getLocationOnScreen().getX());
Expand Down Expand Up @@ -153,4 +169,10 @@ private double scaledX(int x) {
private double scaledY(int y) {
return (y / ((double) (display.getHeight()) / Graphics.stdHeight));
}

@Override
public void mouseWheelMoved(MouseWheelEvent e) {
scrollingSpeedBuffer = Math.abs(e.getUnitsToScroll());
scrollDirectionBuffer = (int) Math.signum(e.getUnitsToScroll());
}
}

0 comments on commit b63e110

Please sign in to comment.