mirror of
https://github.com/britzl/monarch.git
synced 2025-11-26 19:00:53 +01:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5879a5f63 | ||
|
|
97c97e738d | ||
|
|
e4ca53630e | ||
|
|
9afd77e2b0 | ||
|
|
9808c09aa1 | ||
|
|
05f91dd763 |
@@ -20,8 +20,8 @@ jdk:
|
|||||||
#DEFOLD_AUTH=auth token
|
#DEFOLD_AUTH=auth token
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- secure: "1rVLsDcb7dFdgyB9D1JQDr4JhWSosoMvgYgrqZNPxJ/Du3qtY3bk6dgQim+g2fDMQpDOPCQ/EhmhtrLJrIgBhhvOcsrVKT8gl9ZnATw5tHGI6XTw3eod8WgsU8owlc7CaT3XaUgwVshmW3oB/257SDf6kHwsCv/gAJuCEL5RZp76BhTWsfyeDCgz5XXgWx4a21tcIWz96jxEsrYQKLLV2ne55CxU5Hw9IMU7Ig7pkGoYCf1g+iUEA39NC8nIrQibUoJj3yNB2u3ZFwGf2LuDjjkSIsyYWn1LzA2fQYw5uAcjiQ/aDkj6sAEvwrWsIsJhOon5cQBFIU6cIIN2oK3A7BA0zJj0EsTFPUMIeryyoqiuLUDoIvHD/eEqouNduP6Kml02Ql0pDZnjDy/+nzp2e7VA5Sd9Xg1XKd1mmHKx4nc2U+IcIDZWAerFKcqQqeZSwzz5igv07w5zYZ99KCSBMH2K/2H/CNekHa6SQQ29mC8D3lDXOfwEq3fAhsabgUGe2uAgUY1nKwJBKEi7r+KEROBr5ydkWenzbCXv3GNNsuCHKpNFuoZv3QMyjUjlPBxZVndNLSv85juhkBx6wXAh8CxTt78Y8GV0xI8oazSM065gpDmENGVqyO1bUn2CZF8YRC4MLfHK+245QN82ui+YOqVudTX8RGWnX0GFUncjaRQ="
|
- DEFOLD_AUTH=foobar
|
||||||
- DEFOLD_USER=bjorn.ritzl@king.com
|
- DEFOLD_USER=bjorn.ritzl@gmail.com
|
||||||
- DEFOLD_BOOSTRAP_COLLECTION=/test/test.collectionc
|
- DEFOLD_BOOSTRAP_COLLECTION=/test/test.collectionc
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
|||||||
@@ -281,6 +281,11 @@ embedded_instances {
|
|||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" properties {\n"
|
" properties {\n"
|
||||||
|
" id: \"focus_url\"\n"
|
||||||
|
" value: \"about:/go#about\"\n"
|
||||||
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
" id: \"preload\"\n"
|
" id: \"preload\"\n"
|
||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
|
|||||||
@@ -67,6 +67,16 @@ local function pcallfn(fn, ...)
|
|||||||
if not ok then print(err) end
|
if not ok then print(err) end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function cowait(delay)
|
||||||
|
local co = coroutine.running()
|
||||||
|
assert(co, "You must run this form within a coroutine")
|
||||||
|
timer.delay(delay, false, function()
|
||||||
|
assert(coroutine.resume(co))
|
||||||
|
end)
|
||||||
|
coroutine.yield()
|
||||||
|
end
|
||||||
|
|
||||||
local function notify_transition_listeners(message_id, message)
|
local function notify_transition_listeners(message_id, message)
|
||||||
log("notify_transition_listeners()", message_id)
|
log("notify_transition_listeners()", message_id)
|
||||||
for _,url in pairs(transition_listeners) do
|
for _,url in pairs(transition_listeners) do
|
||||||
@@ -364,6 +374,11 @@ local function focus_lost(screen, next_screen)
|
|||||||
log("focus_lost()", screen.id)
|
log("focus_lost()", screen.id)
|
||||||
if screen.focus_url then
|
if screen.focus_url then
|
||||||
msg.post(screen.focus_url, M.FOCUS.LOST, { id = next_screen and next_screen.id })
|
msg.post(screen.focus_url, M.FOCUS.LOST, { id = next_screen and next_screen.id })
|
||||||
|
-- if there's no transition on the screen losing focus and it gets
|
||||||
|
-- unloaded this will happen before the focus_lost message reaches
|
||||||
|
-- the focus_url
|
||||||
|
-- we add a delay to ensure the message queue has time to be processed
|
||||||
|
cowait(0)
|
||||||
else
|
else
|
||||||
log("focus_lost() no focus url - ignoring")
|
log("focus_lost() no focus url - ignoring")
|
||||||
end
|
end
|
||||||
@@ -451,6 +466,11 @@ local function show_in(screen, previous_screen, reload, add_to_stack, cb)
|
|||||||
if reload and screen.loaded then
|
if reload and screen.loaded then
|
||||||
log("show_in() reloading", screen.id)
|
log("show_in() reloading", screen.id)
|
||||||
unload(screen, reload)
|
unload(screen, reload)
|
||||||
|
-- we need to wait here in case the unloaded screen contained any screens
|
||||||
|
-- if this is the case we need to let these sub-screens have their final()
|
||||||
|
-- functions called so that they have time to call unregister()
|
||||||
|
cowait(0)
|
||||||
|
cowait(0)
|
||||||
end
|
end
|
||||||
load(screen)
|
load(screen)
|
||||||
if add_to_stack then
|
if add_to_stack then
|
||||||
@@ -558,13 +578,13 @@ function M.show(id, options, data, cb)
|
|||||||
|
|
||||||
local co
|
local co
|
||||||
co = coroutine.create(function()
|
co = coroutine.create(function()
|
||||||
|
local top = stack[#stack]
|
||||||
-- a screen can ignore the stack by setting the no_stack to true
|
-- a screen can ignore the stack by setting the no_stack to true
|
||||||
local add_to_stack = not options or not options.no_stack
|
local add_to_stack = not options or not options.no_stack
|
||||||
if add_to_stack then
|
if add_to_stack then
|
||||||
-- manipulate the current top
|
-- manipulate the current top
|
||||||
-- close popup(s) if needed
|
-- close popup(s) if needed
|
||||||
-- transition out
|
-- transition out
|
||||||
local top = stack[#stack]
|
|
||||||
if top then
|
if top then
|
||||||
-- keep top popup visible if new screen can be shown on top of a popup
|
-- keep top popup visible if new screen can be shown on top of a popup
|
||||||
if top.popup and screen.popup_on_popup then
|
if top.popup and screen.popup_on_popup then
|
||||||
@@ -574,7 +594,7 @@ function M.show(id, options, data, cb)
|
|||||||
while top.popup do
|
while top.popup do
|
||||||
stack[#stack] = nil
|
stack[#stack] = nil
|
||||||
show_out(top, screen, function()
|
show_out(top, screen, function()
|
||||||
coroutine.resume(co)
|
assert(coroutine.resume(co))
|
||||||
end)
|
end)
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
top = stack[#stack]
|
top = stack[#stack]
|
||||||
@@ -604,7 +624,7 @@ function M.show(id, options, data, cb)
|
|||||||
-- screen that has Preload set to true
|
-- screen that has Preload set to true
|
||||||
if M.is_preloading(id) then
|
if M.is_preloading(id) then
|
||||||
M.when_preloaded(id, function()
|
M.when_preloaded(id, function()
|
||||||
coroutine.resume(co)
|
assert(coroutine.resume(co))
|
||||||
end)
|
end)
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
end
|
end
|
||||||
@@ -612,7 +632,7 @@ function M.show(id, options, data, cb)
|
|||||||
|
|
||||||
if cb then callbacks.when_done(cb) end
|
if cb then callbacks.when_done(cb) end
|
||||||
end)
|
end)
|
||||||
coroutine.resume(co)
|
assert(coroutine.resume(co))
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -104,114 +104,163 @@ function M.fade_in(node, from, easing, duration, delay, cb)
|
|||||||
gui.animate(node, gui.PROP_COLOR, to, easing, duration, delay, cb)
|
gui.animate(node, gui.PROP_COLOR, to, easing, duration, delay, cb)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Create a transition for a node
|
|
||||||
-- @return Transition instance
|
|
||||||
function M.create(node)
|
|
||||||
assert(node, "You must provide a node")
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Create a transition
|
||||||
|
-- @return Transition instance
|
||||||
|
local function create()
|
||||||
local instance = {}
|
local instance = {}
|
||||||
|
|
||||||
local transitions = {}
|
local transitions = {
|
||||||
|
[monarch.TRANSITION.SHOW_IN] = { urls = {}, transitions = {}, in_progress_count = 0, },
|
||||||
|
[monarch.TRANSITION.SHOW_OUT] = { urls = {}, transitions = {}, in_progress_count = 0, },
|
||||||
|
[monarch.TRANSITION.BACK_IN] = { urls = {}, transitions = {}, in_progress_count = 0, },
|
||||||
|
[monarch.TRANSITION.BACK_OUT] = { urls = {}, transitions = {}, in_progress_count = 0, },
|
||||||
|
}
|
||||||
|
|
||||||
local current_transition = nil
|
local current_transition = nil
|
||||||
|
|
||||||
local initial_data = {}
|
|
||||||
initial_data.pos = gui.get_position(node)
|
|
||||||
initial_data.scale = gui.get_scale(node)
|
|
||||||
|
|
||||||
local function create_transition(fn, easing, duration, delay)
|
local function create_transition(transition_id, node, fn, easing, duration, delay)
|
||||||
return {
|
local t = transitions[transition_id]
|
||||||
|
t.transitions[#t.transitions + 1] = {
|
||||||
|
node = node,
|
||||||
|
node_data = {
|
||||||
|
pos = gui.get_position(node),
|
||||||
|
scale = gui.get_scale(node),
|
||||||
|
},
|
||||||
fn = fn,
|
fn = fn,
|
||||||
easing = easing,
|
easing = easing,
|
||||||
duration = duration,
|
duration = duration,
|
||||||
delay = delay,
|
delay = delay,
|
||||||
in_progress = false,
|
id = transition_id
|
||||||
urls = {},
|
|
||||||
id = nil
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local function finish_transition(transition)
|
local function finish_transition(transition_id)
|
||||||
transition.in_progress = false
|
local t = transitions[transition_id]
|
||||||
local message = { transition = transition.id }
|
if #t.urls > 0 then
|
||||||
while #transition.urls > 0 do
|
local message = { transition = transition_id }
|
||||||
local url = table.remove(transition.urls)
|
while #t.urls > 0 do
|
||||||
msg.post(url, monarch.TRANSITION.DONE, message)
|
local url = table.remove(t.urls)
|
||||||
|
msg.post(url, monarch.TRANSITION.DONE, message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
current_transition = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function check_and_finish_transition(transition_id)
|
||||||
|
local t = transitions[transition_id]
|
||||||
|
if t.in_progress_count == 0 then
|
||||||
|
finish_transition(transition_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function start_transition(transition, transition_id, url)
|
local function start_transition(transition_id, url)
|
||||||
table.insert(transition.urls, url)
|
local t = transitions[transition_id]
|
||||||
if not transition.in_progress then
|
table.insert(t.urls, url)
|
||||||
table.insert(transition.urls, msg.url())
|
if t.in_progress_count == 0 then
|
||||||
transition.in_progress = true
|
table.insert(t.urls, msg.url())
|
||||||
transition.id = transition_id
|
current_transition = t
|
||||||
current_transition = transition
|
if #t.transitions > 0 then
|
||||||
transition.fn(node, initial_data, transition.easing, transition.duration, transition.delay or 0, function()
|
for i=1,#t.transitions do
|
||||||
finish_transition(transition)
|
local transition = t.transitions[i]
|
||||||
end)
|
t.in_progress_count = t.in_progress_count + 1
|
||||||
|
transition.fn(transition.node, transition.node_data, transition.easing, transition.duration, transition.delay or 0, function()
|
||||||
|
t.in_progress_count = t.in_progress_count - 1
|
||||||
|
check_and_finish_transition(transition_id)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
check_and_finish_transition(transition_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Forward on_message calls here
|
-- Forward on_message calls here
|
||||||
function instance.handle(message_id, message, sender)
|
function instance.handle(message_id, message, sender)
|
||||||
if message_id == LAYOUT_CHANGED then
|
if message_id == LAYOUT_CHANGED then
|
||||||
initial_data.pos = gui.get_position(node)
|
for _,t in pairs(transitions) do
|
||||||
|
for _,transitions in pairs(t.transitions) do
|
||||||
|
transitions.node_data.pos = gui.get_position(transitions.node)
|
||||||
|
end
|
||||||
|
end
|
||||||
-- replay the current transition if the layout changes
|
-- replay the current transition if the layout changes
|
||||||
-- this will ensure that things are still hidden if they
|
-- this will ensure that things are still hidden if they
|
||||||
-- were transitioned out
|
-- were transitioned out
|
||||||
if current_transition then
|
if current_transition then
|
||||||
current_transition.fn(node, initial_data, current_transition.easing, 0, 0)
|
for _,transition in pairs(current_transition.transitions) do
|
||||||
if current_transition.in_progress then
|
local node = transition.node
|
||||||
finish_transition(current_transition)
|
transition.fn(transition.node, transition.node_data, transition.easing, 0, 0)
|
||||||
|
end
|
||||||
|
if current_transition.in_progress_count > 0 then
|
||||||
|
finish_transition(message_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
elseif message_id == monarch.TRANSITION.SHOW_IN
|
||||||
local transition = transitions[message_id]
|
or message_id == monarch.TRANSITION.SHOW_OUT
|
||||||
if transition then
|
or message_id == monarch.TRANSITION.BACK_IN
|
||||||
start_transition(transition, message_id, sender)
|
or message_id == monarch.TRANSITION.BACK_OUT then
|
||||||
end
|
start_transition(message_id, sender)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Specify the transition function when this node is transitioned
|
-- Specify the transition function when this node is transitioned
|
||||||
-- to
|
-- to
|
||||||
-- @param fn Transition function (see slide_in_left and other above)
|
-- @param fn Transition function (see slide_in_left and other above)
|
||||||
-- @param easing Easing function to use
|
-- @param easing Easing function to use
|
||||||
-- @param duration Transition duration
|
-- @param duration Transition duration
|
||||||
-- @param delay Transition delay
|
-- @param delay Transition delay
|
||||||
function instance.show_in(fn, easing, duration, delay)
|
function instance.show_in(node, fn, easing, duration, delay)
|
||||||
transitions[monarch.TRANSITION.SHOW_IN] = create_transition(fn, easing, duration, delay)
|
create_transition(monarch.TRANSITION.SHOW_IN, node, fn, easing, duration, delay)
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Specify the transition function when this node is transitioned
|
-- Specify the transition function when this node is transitioned
|
||||||
-- from when showing another screen
|
-- from when showing another screen
|
||||||
function instance.show_out(fn, easing, duration, delay)
|
function instance.show_out(node, fn, easing, duration, delay)
|
||||||
transitions[monarch.TRANSITION.SHOW_OUT] = create_transition(fn, easing, duration, delay)
|
create_transition(monarch.TRANSITION.SHOW_OUT, node, fn, easing, duration, delay)
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Specify the transition function when this node is transitioned
|
--- Specify the transition function when this node is transitioned
|
||||||
-- to when navigating back in the screen stack
|
-- to when navigating back in the screen stack
|
||||||
function instance.back_in(fn, easing, duration, delay)
|
function instance.back_in(node, fn, easing, duration, delay)
|
||||||
transitions[monarch.TRANSITION.BACK_IN] = create_transition(fn, easing, duration, delay)
|
create_transition(monarch.TRANSITION.BACK_IN, node, fn, easing, duration, delay)
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Specify the transition function when this node is transitioned
|
--- Specify the transition function when this node is transitioned
|
||||||
-- from when navigating back in the screen stack
|
-- from when navigating back in the screen stack
|
||||||
function instance.back_out(fn, easing, duration, delay)
|
function instance.back_out(node, fn, easing, duration, delay)
|
||||||
transitions[monarch.TRANSITION.BACK_OUT] = create_transition(fn, easing, duration, delay)
|
create_transition(monarch.TRANSITION.BACK_OUT, node, fn, easing, duration, delay)
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
-- set default transitions (instant)
|
return instance
|
||||||
instance.show_in(M.instant)
|
end
|
||||||
instance.show_out(M.instant)
|
|
||||||
instance.back_in(M.instant)
|
function M.create(node)
|
||||||
instance.back_out(M.instant)
|
local instance = create()
|
||||||
|
-- backward compatibility with the old version of create
|
||||||
|
-- where a single node was used
|
||||||
|
if node then
|
||||||
|
local show_in = instance.show_in
|
||||||
|
local show_out = instance.show_out
|
||||||
|
local back_in = instance.back_in
|
||||||
|
local back_out = instance.back_out
|
||||||
|
instance.show_in = function(fn, easing, duration, delay)
|
||||||
|
return show_in(node, fn, easing, duration, delay)
|
||||||
|
end
|
||||||
|
instance.show_out = function(fn, easing, duration, delay)
|
||||||
|
return show_out(node, fn, easing, duration, delay)
|
||||||
|
end
|
||||||
|
instance.back_in = function(fn, easing, duration, delay)
|
||||||
|
return back_in(node, fn, easing, duration, delay)
|
||||||
|
end
|
||||||
|
instance.back_out = function(fn, easing, duration, delay)
|
||||||
|
return back_out(node, fn, easing, duration, delay)
|
||||||
|
end
|
||||||
|
end
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
37
test/data/focus1.collection
Normal file
37
test/data/focus1.collection
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: "focus1"
|
||||||
|
scale_along_z: 0
|
||||||
|
embedded_instances {
|
||||||
|
id: "go"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"focus1\"\n"
|
||||||
|
" component: \"/test/data/focus1.gui\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
131
test/data/focus1.gui
Normal file
131
test/data/focus1.gui
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
script: "/test/data/focus1.gui_script"
|
||||||
|
fonts {
|
||||||
|
name: "example"
|
||||||
|
font: "/assets/example.font"
|
||||||
|
}
|
||||||
|
background_color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 568.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "box"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "1"
|
||||||
|
font: "example"
|
||||||
|
id: "text"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "box"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
}
|
||||||
|
material: "/builtins/materials/gui.material"
|
||||||
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
max_nodes: 512
|
||||||
9
test/data/focus1.gui_script
Normal file
9
test/data/focus1.gui_script
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
local monarch = require "monarch.monarch"
|
||||||
|
|
||||||
|
function on_message(self, message_id, message, sender)
|
||||||
|
if message_id == monarch.FOCUS.GAINED then
|
||||||
|
_G.focus1_gained = true
|
||||||
|
elseif message_id == monarch.FOCUS.LOST then
|
||||||
|
_G.focus1_lost = true
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -96,7 +96,7 @@ nodes {
|
|||||||
}
|
}
|
||||||
type: TYPE_TEXT
|
type: TYPE_TEXT
|
||||||
blend_mode: BLEND_MODE_ALPHA
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
text: "1"
|
text: "FOCUS 1"
|
||||||
font: "example"
|
font: "example"
|
||||||
id: "text"
|
id: "text"
|
||||||
xanchor: XANCHOR_NONE
|
xanchor: XANCHOR_NONE
|
||||||
|
|||||||
@@ -471,3 +471,66 @@ embedded_instances {
|
|||||||
z: 1.0
|
z: 1.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
embedded_instances {
|
||||||
|
id: "focus1"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"screen_proxy\"\n"
|
||||||
|
" component: \"/monarch/screen_proxy.script\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"screen_id\"\n"
|
||||||
|
" value: \"focus1\"\n"
|
||||||
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"focus_url\"\n"
|
||||||
|
" value: \"focus1:/go#focus1\"\n"
|
||||||
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
"embedded_components {\n"
|
||||||
|
" id: \"collectionproxy\"\n"
|
||||||
|
" type: \"collectionproxy\"\n"
|
||||||
|
" data: \"collection: \\\"/test/data/focus1.collection\\\"\\n"
|
||||||
|
"exclude: false\\n"
|
||||||
|
"\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ local SCREEN1_STR = hash("screen1")
|
|||||||
local SCREEN1 = hash(SCREEN1_STR)
|
local SCREEN1 = hash(SCREEN1_STR)
|
||||||
local SCREEN2 = hash("screen2")
|
local SCREEN2 = hash("screen2")
|
||||||
local SCREEN_PRELOAD = hash("screen_preload")
|
local SCREEN_PRELOAD = hash("screen_preload")
|
||||||
|
local FOCUS1 = hash("focus1")
|
||||||
local BACKGROUND = hash("background")
|
local BACKGROUND = hash("background")
|
||||||
local POPUP1 = hash("popup1")
|
local POPUP1 = hash("popup1")
|
||||||
local POPUP2 = hash("popup2")
|
local POPUP2 = hash("popup2")
|
||||||
@@ -405,5 +406,21 @@ return function()
|
|||||||
-- second time the screen gets shown it will be reloaded and increment the count
|
-- second time the screen gets shown it will be reloaded and increment the count
|
||||||
assert(monarch.data(SCREEN_PRELOAD).count == 2)
|
assert(monarch.data(SCREEN_PRELOAD).count == 2)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
it("should send focus messages", function()
|
||||||
|
_G.focus1_gained = nil
|
||||||
|
_G.focus1_lost = nil
|
||||||
|
|
||||||
|
monarch.show(SCREEN1)
|
||||||
|
assert(wait_until_shown(SCREEN1), "Screen1 was never shown")
|
||||||
|
monarch.show(FOCUS1)
|
||||||
|
assert(wait_until_shown(FOCUS1), "Screen1 was never shown")
|
||||||
|
assert(_G.focus1_gained)
|
||||||
|
monarch.show(SCREEN1)
|
||||||
|
assert(wait_until_shown(SCREEN1), "Screen1 was never shown")
|
||||||
|
assert(wait_until_hidden(FOCUS1), "Focus1 was never hidden")
|
||||||
|
assert(_G.focus1_lost)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user