Add increase/reset input priority. Input field now increase self prioirty

This commit is contained in:
Insality 2020-04-18 13:44:23 +03:00
parent 97509ca30b
commit 67038b5c77
6 changed files with 56 additions and 14 deletions

View File

@ -270,17 +270,21 @@ end
-- no click events outside stencil node
-- @function button:set_click_zone
-- @tparam node zone Gui node
-- @tparam druid.button Self instance to make chain calls
function M.set_click_zone(self, zone)
self.click_zone = self:get_node(zone)
self.hover:set_click_zone(zone)
return self
end
--- Set key-code to trigger this button
-- @function button:set_key_trigger
-- @tparam hash key The action_id of the key
-- @tparam druid.button Self instance to make chain calls
function M.set_key_trigger(self, key)
self.key_trigger = hash(key)
return self
end

View File

@ -30,9 +30,11 @@ local function select(self)
gui.reset_keyboard()
self.marked_value = ""
if not self.selected then
self:increase_input_priority()
self.button:increase_input_priority()
self.previous_value = self.value
self.selected = true
print("type", self.keyboard_type)
gui.show_keyboard(self.keyboard_type, false)
self.on_input_select:trigger(self:get_context())
@ -47,7 +49,10 @@ local function unselect(self)
gui.reset_keyboard()
self.marked_value = ""
if self.selected then
self:reset_input_priority()
self.button:reset_input_priority()
self.selected = false
gui.hide_keyboard()
self.on_input_unselect:trigger(self:get_context())
@ -137,7 +142,6 @@ function M.on_input(self, action_id, action)
if self.max_length then
self.marked_value = utf8.sub(self.marked_value, 1, self.max_length)
end
print("marked text", self.marked_value)
end
if action_id == const.ACTION_BACKSPACE and (action.pressed or action.repeated) then
@ -189,7 +193,6 @@ function M.set_text(self, input_text)
end
-- Only update the text if it has changed
print("set text", self.value, ":::", self.marked_value)
local current_value = self.value .. self.marked_value
if current_value ~= self.current_value then
@ -239,17 +242,22 @@ end
-- Pass nil to make input field unliminted (by default)
-- @function input:set_max_length
-- @tparam number max_length Maximum length for input text field
-- @tparam druid.input Self instance to make chain calls
function M.set_max_length(self, max_length)
self.max_length = max_length
return self
end
--- Set allowed charaters for input field.
-- See: https://defold.com/ref/stable/string/
-- ex: [%a%d] for alpha and numeric
-- @function input:set_allowerd_characters
-- @tparam string characters Regulax exp. for validate user input
-- @tparam druid.input Self instance to make chain calls
function M.set_allowed_characters(self, characters)
self.allowed_characters = characters
return self
end

View File

@ -86,6 +86,19 @@ function Component.get_interests(self)
end
--- Increase input priority in current input stack
-- @function component:increase_input_priority
function Component.increase_input_priority(self)
self._meta.increased_input_priority = true
end
--- Reset input priority in current input stack
-- @function component:reset_input_priority
function Component.reset_input_priority(self)
self._meta.increased_input_priority = false
end
--- Get node for component by name.
-- If component has nodes, node_or_name should be string
-- It auto pick node by template name or from nodes by clone_tree
@ -135,6 +148,7 @@ function Component.setup_component(self, context, style)
context = nil,
nodes = nil,
style = nil,
increased_input_priority = false
}
self:set_context(context)

View File

@ -90,7 +90,8 @@ local function process_input(action_id, action, components, is_input_consumed)
for i = #components, 1, -1 do
local component = components[i]
-- Process increased input priority first
if component._meta.increased_input_priority then
if not is_input_consumed then
is_input_consumed = component:on_input(action_id, action)
else
@ -99,6 +100,20 @@ local function process_input(action_id, action, components, is_input_consumed)
end
end
end
end
for i = #components, 1, -1 do
local component = components[i]
if not component._meta.increased_input_priority then
if not is_input_consumed then
is_input_consumed = component:on_input(action_id, action)
else
if component.on_input_interrupt then
component:on_input_interrupt()
end
end
end
end
return is_input_consumed
end

View File

@ -3183,7 +3183,7 @@ nodes {
}
size {
x: 250.0
y: 80.0
y: 50.0
z: 0.0
w: 1.0
}
@ -3214,7 +3214,7 @@ nodes {
w: 1.0
}
adjust_mode: ADJUST_MODE_FIT
line_break: true
line_break: false
parent: "input_box"
layer: ""
inherit_alpha: true
@ -8130,7 +8130,7 @@ nodes {
w: 1.0
}
adjust_mode: ADJUST_MODE_FIT
line_break: true
line_break: false
parent: "input_box_usual"
layer: "text"
inherit_alpha: true
@ -8366,7 +8366,7 @@ nodes {
w: 1.0
}
adjust_mode: ADJUST_MODE_FIT
line_break: true
line_break: false
parent: "input_box_password"
layer: "text"
inherit_alpha: true
@ -8602,7 +8602,7 @@ nodes {
w: 1.0
}
adjust_mode: ADJUST_MODE_FIT
line_break: true
line_break: false
parent: "input_box_email"
layer: "text"
inherit_alpha: true
@ -8838,7 +8838,7 @@ nodes {
w: 1.0
}
adjust_mode: ADJUST_MODE_FIT
line_break: true
line_break: false
parent: "input_box_numpad"
layer: "text"
inherit_alpha: true

View File

@ -6,6 +6,7 @@ function M.setup_page(self)
self.druid:new_input("input_box_password", "input_text_password", gui.KEYBOARD_TYPE_PASSWORD)
self.druid:new_input("input_box_email", "input_text_email", gui.KEYBOARD_TYPE_EMAIL)
self.druid:new_input("input_box_numpad", "input_text_numpad", gui.KEYBOARD_TYPE_NUMBER_PAD)
:set_allowed_characters("[%d,.]")
end