diff --git a/lib/wibox/layout/flex.lua b/lib/wibox/layout/flex.lua index cef6b99ed..3d525d3e2 100644 --- a/lib/wibox/layout/flex.lua +++ b/lib/wibox/layout/flex.lua @@ -52,24 +52,24 @@ local flex = {} function flex:layout(_, width, height) local result = {} - local pos,spacing = 0, self._spacing - local num = #self.widgets + local pos,spacing = 0, self._private.spacing + local num = #self._private.widgets local total_spacing = (spacing*(num-1)) local space_per_item - if self.dir == "y" then + if self._private.dir == "y" then space_per_item = height / num - total_spacing/num else space_per_item = width / num - total_spacing/num end - if self._max_widget_size then - space_per_item = math.min(space_per_item, self._max_widget_size) + if self._private.max_widget_size then + space_per_item = math.min(space_per_item, self._private.max_widget_size) end - for _, v in pairs(self.widgets) do + for _, v in pairs(self._private.widgets) do local x, y, w, h - if self.dir == "y" then + if self._private.dir == "y" then x, y = 0, util.round(pos) w, h = width, floor(space_per_item) else @@ -81,8 +81,8 @@ function flex:layout(_, width, height) pos = pos + space_per_item + spacing - if (self.dir == "y" and pos-spacing >= height) or - (self.dir ~= "y" and pos-spacing >= width) then + if (self._private.dir == "y" and pos-spacing >= height) or + (self._private.dir ~= "y" and pos-spacing >= width) then break end end @@ -99,39 +99,41 @@ function flex:fit(context, orig_width, orig_height) local used_in_other = 0 -- Figure out the maximum size we can give out to sub-widgets - local sub_height = self.dir == "x" and orig_height or orig_height / #self.widgets - local sub_width = self.dir == "y" and orig_width or orig_width / #self.widgets + local sub_height = self._private.dir == "x" and orig_height or orig_height / #self._private.widgets + local sub_width = self._private.dir == "y" and orig_width or orig_width / #self._private.widgets - for _, v in pairs(self.widgets) do + for _, v in pairs(self._private.widgets) do local w, h = base.fit_widget(self, context, v, sub_width, sub_height) - local max = self.dir == "y" and w or h + local max = self._private.dir == "y" and w or h if max > used_in_other then used_in_other = max end - used_in_dir = used_in_dir + (self.dir == "y" and h or w) + used_in_dir = used_in_dir + (self._private.dir == "y" and h or w) end - if self._max_widget_size then + if self._private.max_widget_size then used_in_dir = math.min(used_in_dir, - #self.widgets * self._max_widget_size) + #self._private.widgets * self._private.max_widget_size) end - local spacing = self._spacing * (#self.widgets-1) + local spacing = self._private.spacing * (#self._private.widgets-1) - if self.dir == "y" then + if self._private.dir == "y" then return used_in_other, used_in_dir + spacing end return used_in_dir + spacing, used_in_other end ---- Set the maximum size the widgets in this layout will take (that is, --- maximum width for horizontal and maximum height for vertical). --- @param val The maximum size of the widget. +--- Set the maximum size the widgets in this layout will take. +--That is, maximum width for horizontal and maximum height for vertical. +-- @property max_widget_size +-- @param number + function flex:set_max_widget_size(val) - if self._max_widget_size ~= val then - self._max_widget_size = val + if self._private.max_widget_size ~= val then + self._private.max_widget_size = val self:emit_signal("widget::layout_changed") end end @@ -139,9 +141,9 @@ end local function get_layout(dir, widget1, ...) local ret = fixed[dir](widget1, ...) - util.table.crush(ret, flex) + util.table.crush(ret, flex, true) - ret.fill_space = nil + ret._private.fill_space = nil return ret end @@ -162,6 +164,10 @@ function flex.vertical(...) return get_layout("vertical", ...) end +--@DOC_widget_COMMON@ + +--@DOC_object_COMMON@ + return flex -- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80