diff --git a/druid/base/static_grid.lua b/druid/base/static_grid.lua index c32d4c0..17701f5 100644 --- a/druid/base/static_grid.lua +++ b/druid/base/static_grid.lua @@ -33,9 +33,12 @@ --- The last index of node in grid -- @tfield number last_index ---- Item anchor +--- Item anchor [0..1] -- @tfield vector3 anchor +--- Item pivot [-0.5..0.5] +-- @tfield vector3 pivot + --- Item size -- @tfield vector3 node_size diff --git a/druid/component.lua b/druid/component.lua index 6f09892..e71add0 100644 --- a/druid/component.lua +++ b/druid/component.lua @@ -173,7 +173,7 @@ function BaseComponent.get_node(self, node_or_name) end if not node then - assert(node, "No component with name: " .. template_name .. node_or_name) + assert(node, "No component with name: " .. (template_name or "") .. (node_or_name or "")) end return node diff --git a/druid/const.lua b/druid/const.lua index 3e8c0d9..d05c537 100755 --- a/druid/const.lua +++ b/druid/const.lua @@ -87,6 +87,8 @@ M.REVERSE_PIVOTS = { M.LAYOUT_MODE = { STRETCH_X = "stretch_x", STRETCH_Y = "stretch_y", + ZOOM_MIN = "zoom_min", + ZOOM_MAX = "zoom_max", FIT = gui.ADJUST_FIT, STRETCH = gui.ADJUST_STRETCH, } diff --git a/druid/extended/layout.lua b/druid/extended/layout.lua index 8476bd4..e5364f8 100644 --- a/druid/extended/layout.lua +++ b/druid/extended/layout.lua @@ -23,6 +23,7 @@ function Layout:init(node, mode, on_size_changed_callback) self._min_size = nil self._max_size = nil self._inited = false + self._is_stretch_position = nil self.gui_size = vmath.vector3(gui.get_width(), gui.get_height(), 0) self.mode = mode or const.LAYOUT_MODE.FIT @@ -81,11 +82,14 @@ function Layout:on_window_resized() new_size.x = math.min(new_size.x, self._max_size.x) new_size.y = math.min(new_size.y, self._max_size.y) end - gui.set_size(self.node, new_size) - self.position.x = self.origin_position.x + self.origin_position.x * (1 - x_koef) * self.pivot.x * 2 - self.position.y = self.origin_position.y + self.origin_position.y * (1 - y_koef) * self.pivot.y * 2 + self.position.x = self.origin_position.x + self.position.y = self.origin_position.y + if self._is_stretch_position then + self.position.x = self.position.x + self.origin_position.x * (1 - x_koef) * (self.pivot.x * 2) + self.position.y = self.position.y + self.origin_position.y * (1 - y_koef) * (self.pivot.y * 2) + end gui.set_position(self.node, self.position) self.on_size_changed:trigger(self:get_context(), new_size) @@ -110,6 +114,14 @@ function Layout:set_origin_position(new_origin_position) end +--@tparam boolean state +function Layout:set_stretch_position(state) + self._is_stretch_position = state + self:on_window_resized() + return self +end + + function Layout:set_origin_size(new_origin_size) self.origin_size = new_origin_size or self.origin_size self:on_window_resized()