3
0
mirror of https://github.com/britzl/monarch.git synced 2025-09-27 10:02:21 +02:00

Replace existing transition

Fixes #82
This commit is contained in:
Björn Ritzl
2022-01-13 19:40:24 +01:00
parent 387a1805eb
commit 17df189089
2 changed files with 33 additions and 1 deletions

View File

@@ -121,11 +121,15 @@ local function create()
local current_transition = nil local current_transition = nil
local function create_transition(transition_id, node, fn, easing, duration, delay) local function create_transition(transition_id, node, fn, easing, duration, delay)
assert(transition_id, "You must provide a valid transition id")
assert(node, "You must provide a node")
assert(fn, "You must provide a transition function")
local t = transitions[transition_id] local t = transitions[transition_id]
-- find if there's already a transition for the node in -- find if there's already a transition for the node in
-- question and if so update it instead of creating a new -- question and if so update it instead of creating a new
-- transition -- transition
for _,transition in ipairs(t) do for _,transition in ipairs(t.transitions) do
if transition.node == node then if transition.node == node then
transition.fn = fn transition.fn = fn
transition.easing = easing transition.easing = easing

View File

@@ -8,6 +8,12 @@ local easing = require "monarch.transitions.easings"
return function() return function()
local function wait_timeout(fn, ...)
local args = { ... }
cowait(function() return fn(unpack(args)) end, 5)
return fn(...)
end
describe("transitions", function() describe("transitions", function()
before(function() before(function()
mock_msg.mock() mock_msg.mock()
@@ -22,6 +28,28 @@ describe("transitions", function()
end) end)
it("should replace an existing transition with a new one", function()
local one = false
function dummy_transition1(node, to, easing, duration, delay, cb)
one = true
end
local two = false
function dummy_transition2(node, to, easing, duration, delay, cb)
two = true
end
local node = gui.new_box_node(vmath.vector3(), vmath.vector3(100, 100, 0))
local duration = 2
local t = transitions.create(node)
t.show_in(dummy_transition1, easing.OUT, duration, delay or 0)
t.show_in(dummy_transition2, easing.OUT, duration, delay or 0)
t.handle(monarch.TRANSITION.SHOW_IN)
wait_timeout(function() return one or two end)
assert(two)
assert(not one)
end)
it("should replay and immediately finish on layout change", function() it("should replay and immediately finish on layout change", function()
function dummy_transition(node, to, easing, duration, delay, cb) function dummy_transition(node, to, easing, duration, delay, cb)
print("dummy transition") print("dummy transition")