Should fix incorrect coordinates in mouse scroll event in scaled GUIs, closing #1212.

This commit is contained in:
Florian Nücke 2015-06-09 21:52:38 +02:00
parent 6bf16b316e
commit fdcdb2c7c5

View File

@ -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