From c2239d67e5b549b2e5c7172f48d082debbcaa475 Mon Sep 17 00:00:00 2001 From: Alexey Gulev Date: Sun, 10 Jun 2018 15:31:46 +0300 Subject: [PATCH] Finish transition when layout changes (#21) * If layout changes when transaction in progress we have to finish current transaction --- monarch/transitions/gui.lua | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/monarch/transitions/gui.lua b/monarch/transitions/gui.lua index 5c7ab2b..a63a465 100644 --- a/monarch/transitions/gui.lua +++ b/monarch/transitions/gui.lua @@ -110,22 +110,28 @@ function M.create(node) delay = delay, in_progress = false, urls = {}, + id = nil } end + local function finish_transition(transition) + transition.in_progress = false + local message = { transition = transition.id } + while #transition.urls > 0 do + local url = table.remove(transition.urls) + msg.post(url, monarch.TRANSITION.DONE, message) + end + end + local function start_transition(transition, transition_id, url) table.insert(transition.urls, url) if not transition.in_progress then table.insert(transition.urls, msg.url()) - current_transition = transition transition.in_progress = true + transition.id = transition_id + current_transition = transition transition.fn(node, initial_data, transition.easing, transition.duration, transition.delay or 0, function() - transition.in_progress = false - local message = { transition = transition_id } - while #transition.urls > 0 do - local url = table.remove(transition.urls) - msg.post(url, monarch.TRANSITION.DONE, message) - end + finish_transition(transition) end) end end @@ -139,6 +145,9 @@ function M.create(node) -- were transitioned out if current_transition then current_transition.fn(node, initial_data, current_transition.easing, 0, 0) + if current_transition.in_progress then + finish_transition(current_transition) + end end else local transition = transitions[message_id]