cleaned up rendering mode swapping

This commit is contained in:
2025-12-12 00:08:25 -05:00
parent 9d8f6aa60d
commit ec73d8c7c8
11 changed files with 1270 additions and 46 deletions

View File

@@ -16,7 +16,9 @@ local originalSearchers = package.searchers or package.loaders
table.insert(originalSearchers, 2, function(modname)
if modname:match("^FlexLove%.modules%.") then
local moduleName = modname:gsub("^FlexLove%.modules%.", "")
return function() return require("modules." .. moduleName) end
return function()
return require("modules." .. moduleName)
end
end
end)
@@ -41,17 +43,17 @@ end
function TestMixedModeEvents:test_immediateChildOfRetainedParentHandlesEvents()
local eventFired = false
local eventType = nil
-- Create retained parent
local parent = FlexLove.new({
mode = "retained",
width = 800,
height = 600,
})
FlexLove.setMode("immediate")
FlexLove.beginFrame()
-- Create immediate child with event handler
local child = FlexLove.new({
mode = "immediate",
@@ -66,19 +68,19 @@ function TestMixedModeEvents:test_immediateChildOfRetainedParentHandlesEvents()
eventType = event.type
end,
})
FlexLove.endFrame()
-- Verify child is positioned correctly
luaunit.assertEquals(child.x, 0)
luaunit.assertEquals(child.y, 0)
-- Manually call the event handler (simulating event processing)
-- In the real app, this would be triggered by mousepressed/released
if child.onEvent then
child.onEvent(child, { type = "release", x = 50, y = 25, button = 1 })
end
-- Verify event was handled
luaunit.assertTrue(eventFired)
luaunit.assertEquals(eventType, "release")
@@ -87,17 +89,17 @@ end
-- Test that hover state is tracked for immediate children
function TestMixedModeEvents:test_immediateChildOfRetainedParentTracksHover()
FlexLove.setMode("retained")
-- Create retained parent
local parent = FlexLove.new({
mode = "retained",
width = 800,
height = 600,
})
FlexLove.setMode("immediate")
FlexLove.beginFrame()
-- Create immediate child
local child = FlexLove.new({
mode = "immediate",
@@ -108,12 +110,12 @@ function TestMixedModeEvents:test_immediateChildOfRetainedParentTracksHover()
width = 100,
height = 50,
})
FlexLove.endFrame()
-- Child should have event handler module
luaunit.assertNotNil(child._eventHandler)
-- Verify child can track hover state (stored in StateManager for immediate mode)
-- The actual hover detection happens in Element's event processing
luaunit.assertEquals(child._elementMode, "immediate")
@@ -123,9 +125,9 @@ end
function TestMixedModeEvents:test_multipleImmediateChildrenHandleEventsIndependently()
local button1Clicked = false
local button2Clicked = false
FlexLove.setMode("retained")
-- Create retained parent
local parent = FlexLove.new({
mode = "retained",
@@ -135,10 +137,10 @@ function TestMixedModeEvents:test_multipleImmediateChildrenHandleEventsIndepende
flexDirection = "horizontal",
gap = 10,
})
FlexLove.setMode("immediate")
FlexLove.beginFrame()
-- Create two immediate button children
local button1 = FlexLove.new({
mode = "immediate",
@@ -152,7 +154,7 @@ function TestMixedModeEvents:test_multipleImmediateChildrenHandleEventsIndepende
end
end,
})
local button2 = FlexLove.new({
mode = "immediate",
id = "button2",
@@ -165,28 +167,31 @@ function TestMixedModeEvents:test_multipleImmediateChildrenHandleEventsIndepende
end
end,
})
FlexLove.endFrame()
-- Verify buttons are positioned correctly
luaunit.assertEquals(button1.x, 0)
luaunit.assertEquals(button2.x, 110) -- 100 + 10 gap
-- Simulate clicking button1
if button1.onEvent then
button1.onEvent(button1, { type = "release", x = 50, y = 25, button = 1 })
end
luaunit.assertTrue(button1Clicked)
luaunit.assertFalse(button2Clicked)
-- Simulate clicking button2
if button2.onEvent then
button2.onEvent(button2, { type = "release", x = 150, y = 25, button = 1 })
end
luaunit.assertTrue(button1Clicked)
luaunit.assertTrue(button2Clicked)
end
os.exit(luaunit.LuaUnit.run())
-- Run tests
if not _G.RUNNING_ALL_TESTS then
os.exit(luaunit.LuaUnit.run())
end