Use geode.MouseInputEvent for mouse buttons.
Use geode.MouseMoveEvent for movement and geode.ScrollWheelEvent for scrolling.
Return true from a callback to stop propagation to later listeners and the game.
Mouse button callbacks receive a mutable table.
| Field | Type | Notes |
|---|---|---|
button |
number | geode.MouseInputData.Button.* |
action |
number | geode.MouseInputData.Action.* |
modifiers |
number | geode.KeyboardModifier bit mask |
timestamp |
number | native event time |
geode.MouseInputData.Action.Press: number
geode.MouseInputData.Action.Release: number
geode.MouseInputData.Button.Left: number
geode.MouseInputData.Button.Right: number
geode.MouseInputData.Button.Middle: number
geode.MouseInputData.Button.Button4: number
geode.MouseInputData.Button.Button5: numberChanges to the table are written back before later listeners run.
geode.MouseInputEvent.listen(callback: (data: MouseInputData) -> boolean?, priority: number?) -> MouseInputListenerHandleListens to mouse button presses and releases.
local button = geode.MouseInputData.Button
local action = geode.MouseInputData.Action
local listener = geode.MouseInputEvent.listen(function(data)
if data.button == button.Left and data.action == action.Press then
print("left click", data.timestamp)
return true -- This won't let you click on anything.
end
return false
end)geode.MouseMoveEvent.listen(callback: (x: number, y: number) -> boolean?, priority: number?) -> MouseInputListenerHandleListens to mouse movement in native window coordinates.
geode.MouseMoveEvent.listen(function(x, y)
print("mouse", x, y)
return false
end)geode.ScrollWheelEvent.listen(callback: (xOffset: number, yOffset: number) -> boolean?, priority: number?) -> MouseInputListenerHandleListens to horizontal and vertical wheel offsets.
local zoom = 1
geode.ScrollWheelEvent.listen(function(xOffset, yOffset)
zoom = math.clamp(zoom + yOffset * 0.1, 0.5, 2)
print("zoom", zoom)
return false
end)A side button bind:
local button = geode.MouseInputData.Button
local action = geode.MouseInputData.Action
geode.MouseInputEvent.listen(function(data)
if data.button == button.Button4 and data.action == action.Press then
print("back")
return false
end
return false
end)handle:disconnect() -> ()Store the handle while the listener is active. Handles also disconnect during garbage collection and runtime shutdown. The optional priority works like other Geode event listeners. Callback errors and timeouts are logged and let propagation continue.
src/bindings/geode/GeodeMouseBinding.cpptools/luau_codegen/extra_bindings/mouse.dluau