From fdcdb2c7c55822e3a0866baae8ab97e7de8ef143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 9 Jun 2015 21:52:38 +0200 Subject: [PATCH] Should fix incorrect coordinates in mouse scroll event in scaled GUIs, closing #1212. --- .../scala/li/cil/oc/client/gui/Screen.scala | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/gui/Screen.scala b/src/main/scala/li/cil/oc/client/gui/Screen.scala index d6620f499..6966ada48 100644 --- a/src/main/scala/li/cil/oc/client/gui/Screen.scala +++ b/src/main/scala/li/cil/oc/client/gui/Screen.scala @@ -27,13 +27,11 @@ class Screen(val buffer: api.component.TextBuffer, val hasMouse: Boolean, val ha if (hasMouse && Mouse.hasWheel && Mouse.getEventDWheel != 0) { val mouseX = Mouse.getEventX * width / mc.displayWidth val mouseY = height - Mouse.getEventY * height / mc.displayHeight - 1 - val bx = (mouseX - x - bufferMargin) / TextBufferRenderCache.renderer.charRenderWidth.toDouble - val by = (mouseY - y - bufferMargin) / TextBufferRenderCache.renderer.charRenderHeight.toDouble - val bw = buffer.getWidth - val bh = buffer.getHeight - if (bx >= 0 && by >= 0 && bx < bw && by < bh) { - val scroll = math.signum(Mouse.getEventDWheel) - buffer.mouseScroll(bx, by, scroll, null) + toBufferCoordinates(mouseX, mouseY) match { + case Some((bx, by)) => + val scroll = math.signum(Mouse.getEventDWheel) + buffer.mouseScroll(bx, by, scroll, null) + case _ => // Ignore when out of bounds. } } } @@ -60,15 +58,9 @@ class Screen(val buffer: api.component.TextBuffer, val hasMouse: Boolean, val ha super.mouseMovedOrUp(mouseX, mouseY, button) if (hasMouse && button >= 0) { if (didDrag) { - val bx = (mouseX - x - bufferMargin) / scale / TextBufferRenderCache.renderer.charRenderWidth - val by = (mouseY - y - bufferMargin) / scale / TextBufferRenderCache.renderer.charRenderHeight - val bw = buffer.getWidth - val bh = buffer.getHeight - if (bx >= 0 && by >= 0 && bx < bw && by < bh) { - buffer.mouseUp(bx, by, button, null) - } - else { - buffer.mouseUp(-1.0, -1.0, button, null) + toBufferCoordinates(mouseX, mouseY) match { + case Some((bx, by)) => buffer.mouseUp(bx, by, button, null) + case _ => buffer.mouseUp(-1.0, -1.0, button, null) } } didDrag = false @@ -77,6 +69,15 @@ class Screen(val buffer: api.component.TextBuffer, val hasMouse: Boolean, val ha } } + private def toBufferCoordinates(mouseX: Int, mouseY: Int): Option[(Double, Double)] = { + val bx = (mouseX - x - bufferMargin) / scale / TextBufferRenderCache.renderer.charRenderWidth + val by = (mouseY - y - bufferMargin) / scale / TextBufferRenderCache.renderer.charRenderHeight + val bw = buffer.getWidth + val bh = buffer.getHeight + if (bx >= 0 && by >= 0 && bx < bw && by < bh) Some((bx, by)) + else None + } + private def clickOrDrag(mouseX: Int, mouseY: Int, button: Int) { val bx = (mouseX - x - bufferMargin) / scale / TextBufferRenderCache.renderer.charRenderWidth val by = (mouseY - y - bufferMargin) / scale / TextBufferRenderCache.renderer.charRenderHeight