49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client;
 | |
| 
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import org.joml.Vector2i;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class ScrollWheelHandler {
 | |
| 	private double accumulatedScrollX;
 | |
| 	private double accumulatedScrollY;
 | |
| 
 | |
| 	public Vector2i onMouseScroll(double xOffset, double yOffset) {
 | |
| 		if (this.accumulatedScrollX != 0.0 && Math.signum(xOffset) != Math.signum(this.accumulatedScrollX)) {
 | |
| 			this.accumulatedScrollX = 0.0;
 | |
| 		}
 | |
| 
 | |
| 		if (this.accumulatedScrollY != 0.0 && Math.signum(yOffset) != Math.signum(this.accumulatedScrollY)) {
 | |
| 			this.accumulatedScrollY = 0.0;
 | |
| 		}
 | |
| 
 | |
| 		this.accumulatedScrollX += xOffset;
 | |
| 		this.accumulatedScrollY += yOffset;
 | |
| 		int i = (int)this.accumulatedScrollX;
 | |
| 		int j = (int)this.accumulatedScrollY;
 | |
| 		if (i == 0 && j == 0) {
 | |
| 			return new Vector2i(0, 0);
 | |
| 		} else {
 | |
| 			this.accumulatedScrollX -= i;
 | |
| 			this.accumulatedScrollY -= j;
 | |
| 			return new Vector2i(i, j);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public static int getNextScrollWheelSelection(double yOffset, int selected, int selectionSize) {
 | |
| 		int i = (int)Math.signum(yOffset);
 | |
| 		selected -= i;
 | |
| 		selected = Math.max(-1, selected);
 | |
| 
 | |
| 		while (selected < 0) {
 | |
| 			selected += selectionSize;
 | |
| 		}
 | |
| 
 | |
| 		while (selected >= selectionSize) {
 | |
| 			selected -= selectionSize;
 | |
| 		}
 | |
| 
 | |
| 		return selected;
 | |
| 	}
 | |
| }
 |