diff --git a/druid/base/dynamic_grid.lua b/druid/base/dynamic_grid.lua index 314dd51..6c7d300 100644 --- a/druid/base/dynamic_grid.lua +++ b/druid/base/dynamic_grid.lua @@ -19,7 +19,6 @@ -- @tfield vector3 anchor Item anchor -- @tfield vector3 node_size Item size -- @tfield vector4 border The size of item content --- @tfield vector3 border_offer The border offset for correct anchor calculations local const = require("druid.const") local Event = require("druid.event") @@ -39,11 +38,10 @@ function DynamicGrid:init(parent, side) self.offset = vmath.vector3(0) - local pivot = helper.get_pivot_offset(gui.get_pivot(self.parent)) - self.anchor = vmath.vector3(0.5 + pivot.x, 0.5 - pivot.y, 0) + self.pivot = helper.get_pivot_offset(gui.get_pivot(self.parent)) + self.anchor = vmath.vector3(0.5 + self.pivot.x, 0.5 - self.pivot.y, 0) self.border = vmath.vector4(0) -- Current grid content size - self.border_offset = vmath.vector3(0) -- Content offset for match the grid anchoring self.on_add_item = Event() self.on_remove_item = Event() @@ -68,8 +66,12 @@ function DynamicGrid:get_pos(index, node) if not prev_node and not next_node then -- TODO: assert no elements in grid now - -- should be center of current scroll - return self.center_pos -- first element in grid + local size = self:_get_node_size(node) + local pivot = const.PIVOTS[gui.get_pivot(node)] + return vmath.vector3( + size.x * pivot.x + size.x * self.pivot.x, + size.y * pivot.y - size.y * self.pivot.y, + 0) end -- For now it works only by vertical @@ -83,23 +85,6 @@ function DynamicGrid:get_pos(index, node) end ---- Return index for grid pos --- @function dynamic_grid:get_index --- @tparam vector3 pos The node position in the grid --- @treturn number The node index -function DynamicGrid:get_index(pos) - local col = (pos.x + self.border_offset.x) / (self.node_size.x + self.offset.x) + 1 - local row = -(pos.y + self.border_offset.y) / (self.node_size.y + self.offset.y) - - col = helper.round(col) - row = helper.round(row) - - local index = col + row - return math.ceil(index) -end - - - function DynamicGrid:on_layout_change() self:_update_pos(true) end @@ -140,10 +125,6 @@ function DynamicGrid:add(item, index) self:_add_node(item, index) self:_update_borders() - -- for i, _ in pairs(self.nodes) do - -- self:_update_border_offset(self:get_pos(i)) - -- end - self:_update_pos() self:_update_indexes() @@ -168,11 +149,6 @@ function DynamicGrid:remove(index, is_shift_nodes) end self:_update_borders() - -- self:_update_border_offset(self:get_pos(1)) - -- for i, _ in pairs(self.nodes) do - -- self:_update_border_offset(self:get_pos(i)) - -- end - self:_update_pos() self:_update_indexes() @@ -227,10 +203,8 @@ end -- If you want to delete GUI nodes, use dynamic_grid.nodes array before grid:clear -- @function dynamic_grid:clear function DynamicGrid:clear() - self:_update_borders() - -- self:_update_border_offset(self:get_pos(1)) - self.nodes = {} + self:_update_borders() self:_update_indexes() end @@ -265,10 +239,10 @@ function DynamicGrid:_update_borders() local size = node.size local pivot = node.pivot - local left = pos.x - size.x/2 - (size.x * pivot.x) + self.border_offset.x - local right = pos.x + size.x/2 - (size.x * pivot.x) + self.border_offset.x - local top = pos.y + size.y/2 - (size.y * pivot.y) + self.border_offset.y - local bottom = pos.y - size.y/2 - (size.y * pivot.y) + self.border_offset.y + local left = pos.x - size.x/2 - (size.x * pivot.x) + local right = pos.x + size.x/2 - (size.x * pivot.x) + local top = pos.y + size.y/2 - (size.y * pivot.y) + local bottom = pos.y - size.y/2 - (size.y * pivot.y) border.x = math.min(border.x, left) border.y = math.max(border.y, top) @@ -277,23 +251,6 @@ function DynamicGrid:_update_borders() end self.border = border - self.border_offset = vmath.vector3( - (border.x + (border.z - border.x) * self.anchor.x), - (border.y + (border.w - border.y) * self.anchor.y), - 0 - ) -end - - -function DynamicGrid:_update_border_offset(pos) - local border = self.border - self:_update_border(pos, border) - - self.border_offset = vmath.vector3( - (border.x + (border.z - border.x) * self.anchor.x), - (border.y + (border.w - border.y) * self.anchor.y), - 0 - ) end @@ -326,7 +283,7 @@ function DynamicGrid:_get_next_node_pos(origin_node_index, new_node, place_side) ) local node_center = vmath.vector3( - pos.x + size.x * anchor.x, + pos.x - size.x * anchor.x, pos.y - size.y * anchor.y, 0 ) diff --git a/druid/base/checkbox.lua b/druid/extended/checkbox.lua similarity index 100% rename from druid/base/checkbox.lua rename to druid/extended/checkbox.lua diff --git a/druid/base/checkbox_group.lua b/druid/extended/checkbox_group.lua similarity index 100% rename from druid/base/checkbox_group.lua rename to druid/extended/checkbox_group.lua diff --git a/druid/base/component.template.lua b/druid/extended/component.template.lua similarity index 100% rename from druid/base/component.template.lua rename to druid/extended/component.template.lua diff --git a/druid/base/input.lua b/druid/extended/input.lua similarity index 100% rename from druid/base/input.lua rename to druid/extended/input.lua diff --git a/druid/base/progress.lua b/druid/extended/progress.lua similarity index 100% rename from druid/base/progress.lua rename to druid/extended/progress.lua diff --git a/druid/base/radio_group.lua b/druid/extended/radio_group.lua similarity index 100% rename from druid/base/radio_group.lua rename to druid/extended/radio_group.lua diff --git a/druid/base/slider.lua b/druid/extended/slider.lua similarity index 100% rename from druid/base/slider.lua rename to druid/extended/slider.lua diff --git a/druid/base/timer.lua b/druid/extended/timer.lua similarity index 100% rename from druid/base/timer.lua rename to druid/extended/timer.lua diff --git a/druid/helper.lua b/druid/helper.lua index 3fd25c7..3b6792a 100644 --- a/druid/helper.lua +++ b/druid/helper.lua @@ -203,4 +203,13 @@ function M.deprecated(message) end +-- Show message to require extended component +function M.extended_component(component_name) + print(string.format("[Druid]: The component %s is extended component. You have to register it via druid.register to use it", component_name)) + print("[Druid]: Use next code:") + print(string.format('local %s = require("druid.extended.%s")', component_name, component_name)) + print(string.format('druid.register("%s", %s)', component_name, component_name)) +end + + return M diff --git a/druid/system/druid_instance.lua b/druid/system/druid_instance.lua index 270b7c4..9d81c07 100644 --- a/druid/system/druid_instance.lua +++ b/druid/system/druid_instance.lua @@ -20,30 +20,30 @@ -- @see druid.drag local const = require("druid.const") +local helper = require("druid.helper") local druid_input = require("druid.helper.druid_input") local settings = require("druid.system.settings") local class = require("druid.system.middleclass") -local helper = require("druid.helper") -local button = require("druid.base.button") -local blocker = require("druid.base.blocker") local back_handler = require("druid.base.back_handler") +local blocker = require("druid.base.blocker") +local button = require("druid.base.button") +local drag = require("druid.base.drag") local hover = require("druid.base.hover") -local text = require("druid.base.text") local lang_text = require("druid.base.lang_text") -local timer = require("druid.base.timer") -local progress = require("druid.base.progress") local static_grid = require("druid.base.static_grid") local dynamic_grid = require("druid.base.dynamic_grid") local scroll = require("druid.base.scroll") -local slider = require("druid.base.slider") -local checkbox = require("druid.base.checkbox") -local checkbox_group = require("druid.base.checkbox_group") -local radio_group = require("druid.base.radio_group") -local input = require("druid.base.input") local swipe = require("druid.base.swipe") -local drag = require("druid.base.drag") --- local infinity_scroll = require("druid.base.infinity_scroll") +local text = require("druid.base.text") + +local checkbox = require("druid.extended.checkbox") +local checkbox_group = require("druid.extended.checkbox_group") +local input = require("druid.extended.input") +local progress = require("druid.extended.progress") +local radio_group = require("druid.extended.radio_group") +local slider = require("druid.extended.slider") +local timer = require("druid.extended.timer") -- @classmod Druid local Druid = class("druid.druid_instance") @@ -387,24 +387,6 @@ function Druid.new_lang_text(self, ...) end ---- Create timer basic component --- @function druid:new_timer --- @tparam args ... timer init args --- @treturn Component timer component -function Druid.new_timer(self, ...) - return Druid.create(self, timer, ...) -end - - ---- Create progress basic component --- @function druid:new_progress --- @tparam args ... progress init args --- @treturn Component progress component -function Druid.new_progress(self, ...) - return Druid.create(self, progress, ...) -end - - --- Create grid basic component -- @function druid:new_grid -- @tparam args ... grid init args @@ -443,51 +425,6 @@ function Druid.new_scroll(self, ...) end ---- Create slider basic component --- @function druid:new_slider --- @tparam args ... slider init args --- @treturn Component slider component -function Druid.new_slider(self, ...) - return Druid.create(self, slider, ...) -end - - ---- Create checkbox basic component --- @function druid:new_checkbox --- @tparam args ... checkbox init args --- @treturn Component checkbox component -function Druid.new_checkbox(self, ...) - return Druid.create(self, checkbox, ...) -end - - ---- Create input basic component --- @function druid:new_input --- @tparam args ... input init args --- @treturn Component input component -function Druid.new_input(self, ...) - return Druid.create(self, input, ...) -end - - ---- Create checkbox_group basic component --- @function druid:new_checkbox_group --- @tparam args ... checkbox_group init args --- @treturn Component checkbox_group component -function Druid.new_checkbox_group(self, ...) - return Druid.create(self, checkbox_group, ...) -end - - ---- Create radio_group basic component --- @function druid:new_radio_group --- @tparam args ... radio_group init args --- @treturn Component radio_group component -function Druid.new_radio_group(self, ...) - return Druid.create(self, radio_group, ...) -end - - --- Create swipe basic component -- @function druid:new_swipe -- @tparam args ... swipe init args @@ -506,4 +443,74 @@ function Druid.new_drag(self, ...) end +--- Create slider basic component +-- @function druid:new_slider +-- @tparam args ... slider init args +-- @treturn Component slider component +function Druid.new_slider(self, ...) + -- return helper.extended_component("slider") + return Druid.create(self, slider, ...) +end + + +--- Create checkbox basic component +-- @function druid:new_checkbox +-- @tparam args ... checkbox init args +-- @treturn Component checkbox component +function Druid.new_checkbox(self, ...) + -- return helper.extended_component("checkbox") + return Druid.create(self, checkbox, ...) +end + + +--- Create input basic component +-- @function druid:new_input +-- @tparam args ... input init args +-- @treturn Component input component +function Druid.new_input(self, ...) + -- return helper.extended_component("input") + return Druid.create(self, input, ...) +end + + +--- Create checkbox_group basic component +-- @function druid:new_checkbox_group +-- @tparam args ... checkbox_group init args +-- @treturn Component checkbox_group component +function Druid.new_checkbox_group(self, ...) + -- return helper.extended_component("checkbox_group") + return Druid.create(self, checkbox_group, ...) +end + + +--- Create radio_group basic component +-- @function druid:new_radio_group +-- @tparam args ... radio_group init args +-- @treturn Component radio_group component +function Druid.new_radio_group(self, ...) + -- return helper.extended_component("radio_group") + return Druid.create(self, radio_group, ...) +end + + +--- Create timer basic component +-- @function druid:new_timer +-- @tparam args ... timer init args +-- @treturn Component timer component +function Druid.new_timer(self, ...) + -- return helper.extended_component("timer") + return Druid.create(self, timer, ...) +end + + +--- Create progress basic component +-- @function druid:new_progress +-- @tparam args ... progress init args +-- @treturn Component progress component +function Druid.new_progress(self, ...) + -- return helper.extended_component("progress") + return Druid.create(self, progress, ...) +end + + return Druid diff --git a/settings_deployer b/settings_deployer index 5625ee7..de288e7 100644 --- a/settings_deployer +++ b/settings_deployer @@ -1,2 +1,2 @@ #!/bin/bash -use_latest_bob=true +use_latest_bob=false