Group mouse move events from C API function
Groups together consecutive mouse move events like done in core.step() lua function but on the C side. It does not introduce any meaningful speedup but it theory is more efficient and simplifies the Lua code. The simplification of the Lua code alone is enough to justify this change?
This commit is contained in:
parent
702ab2625c
commit
752ecd5ece
|
@ -949,26 +949,18 @@ end
|
||||||
function core.step()
|
function core.step()
|
||||||
-- handle events
|
-- handle events
|
||||||
local did_keymap = false
|
local did_keymap = false
|
||||||
local mouse_moved = false
|
|
||||||
local mouse = { x = 0, y = 0, dx = 0, dy = 0 }
|
|
||||||
|
|
||||||
|
|
||||||
for type, a,b,c,d in system.poll_event do
|
for type, a,b,c,d in system.poll_event do
|
||||||
if type == "mousemoved" then
|
if type == "textinput" and did_keymap then
|
||||||
mouse_moved = true
|
|
||||||
mouse.x, mouse.y = a, b
|
|
||||||
mouse.dx, mouse.dy = mouse.dx + c, mouse.dy + d
|
|
||||||
elseif type == "textinput" and did_keymap then
|
|
||||||
did_keymap = false
|
did_keymap = false
|
||||||
|
elseif type == "mousemoved" then
|
||||||
|
core.try(core.on_event, type, a, b, c, d)
|
||||||
else
|
else
|
||||||
local _, res = core.try(core.on_event, type, a, b, c, d)
|
local _, res = core.try(core.on_event, type, a, b, c, d)
|
||||||
did_keymap = res or did_keymap
|
did_keymap = res or did_keymap
|
||||||
end
|
end
|
||||||
core.redraw = true
|
core.redraw = true
|
||||||
end
|
end
|
||||||
if mouse_moved then
|
|
||||||
core.try(core.on_event, "mousemoved", mouse.x, mouse.y, mouse.dx, mouse.dy)
|
|
||||||
end
|
|
||||||
|
|
||||||
local width, height = renderer.get_size()
|
local width, height = renderer.get_size()
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,14 @@ top:
|
||||||
return 4;
|
return 4;
|
||||||
|
|
||||||
case SDL_MOUSEMOTION:
|
case SDL_MOUSEMOTION:
|
||||||
|
SDL_PumpEvents();
|
||||||
|
SDL_Event event_plus;
|
||||||
|
while (SDL_PeepEvents(&event_plus, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0) {
|
||||||
|
e.motion.x = event_plus.motion.x;
|
||||||
|
e.motion.y = event_plus.motion.y;
|
||||||
|
e.motion.xrel += event_plus.motion.xrel;
|
||||||
|
e.motion.yrel += event_plus.motion.yrel;
|
||||||
|
}
|
||||||
lua_pushstring(L, "mousemoved");
|
lua_pushstring(L, "mousemoved");
|
||||||
lua_pushnumber(L, e.motion.x);
|
lua_pushnumber(L, e.motion.x);
|
||||||
lua_pushnumber(L, e.motion.y);
|
lua_pushnumber(L, e.motion.y);
|
||||||
|
|
Loading…
Reference in New Issue