mirror of
				https://codeberg.org/1414codeforge/yui.git
				synced 2025-06-05 22:19:11 +02:00 
			
		
		
		
	[*] Style improvements, make constructors callable by :.
That is the recommended style for class constructors.
This commit is contained in:
		
							
								
								
									
										12
									
								
								button.lua
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								button.lua
									
									
									
									
									
								
							@@ -5,7 +5,7 @@
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--
 | 
			
		||||
--- Button widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onHit}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
-- Button widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onHit}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('button$', '')
 | 
			
		||||
@@ -16,7 +16,9 @@ local core = require(BASE..'core')
 | 
			
		||||
local shadowtext = require 'lib.gear.shadowtext'
 | 
			
		||||
local T = require('lib.moonspeak').translate
 | 
			
		||||
 | 
			
		||||
local Button = setmetatable({}, Widget)
 | 
			
		||||
local Button = setmetatable({
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Button.__index = Button
 | 
			
		||||
 | 
			
		||||
--- Attributes accepted by the @{Button} widget beyond the standard @{yui.Widget.WidgetAttributes|attributes}
 | 
			
		||||
@@ -33,8 +35,8 @@ Button.__index = Button
 | 
			
		||||
 | 
			
		||||
--- Button constructor
 | 
			
		||||
-- @param args (@{ButtonAttributes}) widget attributes
 | 
			
		||||
function Button.new(args)
 | 
			
		||||
    local self = setmetatable(args, Button)
 | 
			
		||||
function Button:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.text = self.text or ""
 | 
			
		||||
    self.align = self.align or 'center'
 | 
			
		||||
@@ -57,7 +59,7 @@ local function hit(button)
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function Button:onPointerInput(px,py, clicked)
 | 
			
		||||
function Button:onPointerInput(_,_, clicked)
 | 
			
		||||
    self:grabFocus()
 | 
			
		||||
    if clicked then hit(self) end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								checkbox.lua
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								checkbox.lua
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- Checkbox widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
-- Checkbox widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('checkbox$', '')
 | 
			
		||||
 | 
			
		||||
@@ -14,7 +14,9 @@ local core = require(BASE..'core')
 | 
			
		||||
local shadowtext = require 'lib.gear.shadowtext'
 | 
			
		||||
local T = require('lib.moonspeak').translate
 | 
			
		||||
 | 
			
		||||
local Checkbox = setmetatable({}, Widget)
 | 
			
		||||
local Checkbox = setmetatable({
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Checkbox.__index = Checkbox
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -25,15 +27,15 @@ Checkbox.__index = Checkbox
 | 
			
		||||
-- @field text (string) text displayed inside the Checkbox
 | 
			
		||||
-- @field[opt='center'] valign (string) vertical alignment 'top', 'bottom', 'center'
 | 
			
		||||
-- @field[opt='center'] align (string) horizontal alignment, 'left', 'center', 'right'
 | 
			
		||||
-- @field cornerRadius (number) radius for rounded corners 
 | 
			
		||||
-- @field cornerRadius (number) radius for rounded corner
 | 
			
		||||
-- @field notranslate (boolean) don't translate text
 | 
			
		||||
-- @table CheckboxAttributes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--- Checkbox constructor
 | 
			
		||||
-- @param args (@{CheckboxAttributes}) widget attributes
 | 
			
		||||
function Checkbox.new(args)
 | 
			
		||||
    local self = setmetatable(args, Checkbox)
 | 
			
		||||
function Checkbox:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.text = self.text or ""
 | 
			
		||||
    self.text = self.notranslate and self.text or T(self.text)
 | 
			
		||||
@@ -45,7 +47,7 @@ function Checkbox.new(args)
 | 
			
		||||
    return self
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function Checkbox:onPointerInput(px,py, clicked)
 | 
			
		||||
function Checkbox:onPointerInput(_,_, clicked)
 | 
			
		||||
    self:grabFocus()
 | 
			
		||||
    if clicked then
 | 
			
		||||
        self.checked = not self.checked
 | 
			
		||||
@@ -75,7 +77,7 @@ function Checkbox:draw()
 | 
			
		||||
        love.graphics.line(x+h*.2,y+h*.55, x+h*.45,y+h*.75, x+h*.8,y+h*.2)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    -- Most of the times checkboxes have no text, so test for performance
 | 
			
		||||
    -- Most checkboxes have no text, so test for performance
 | 
			
		||||
    if self.text ~= "" then
 | 
			
		||||
        love.graphics.setFont(font)
 | 
			
		||||
        y = y + core.verticalOffsetForAlign(self.valign, font, self.h)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								choice.lua
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								choice.lua
									
									
									
									
									
								
							@@ -4,18 +4,19 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- Multi-choice widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
-- Multi-choice widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('choice$', '')
 | 
			
		||||
 | 
			
		||||
local Widget = require(BASE..'widget')
 | 
			
		||||
local core = require(BASE..'core')
 | 
			
		||||
 | 
			
		||||
local clamp = require('lib.gear.algo').clamp
 | 
			
		||||
local shadowtext = require 'lib.gear.shadowtext'
 | 
			
		||||
local T = require('lib.moonspeak').translate
 | 
			
		||||
 | 
			
		||||
local Choice = setmetatable({
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Choice.__index = Choice
 | 
			
		||||
 | 
			
		||||
@@ -33,8 +34,8 @@ Choice.__index = Choice
 | 
			
		||||
 | 
			
		||||
--- Choice constructor
 | 
			
		||||
-- @param args (@{ChoiceAttributes}) widget attributes
 | 
			
		||||
function Choice.new(args)
 | 
			
		||||
    local self = setmetatable(args, Choice)
 | 
			
		||||
function Choice:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.align = self.align or 'center'
 | 
			
		||||
    self.valign = self.valign or 'center'
 | 
			
		||||
@@ -70,7 +71,7 @@ end
 | 
			
		||||
 | 
			
		||||
function Choice:checkIndex()
 | 
			
		||||
    if self.nowrap then
 | 
			
		||||
        self.index = math.min(math.max(self.index, 1), #self.choices)
 | 
			
		||||
        self.index = clamp(self.index, 1, #self.choices)
 | 
			
		||||
    else
 | 
			
		||||
        if self.index < 1 then
 | 
			
		||||
            self.index = #self.choices
 | 
			
		||||
@@ -108,7 +109,7 @@ function Choice:onActionInput(action)
 | 
			
		||||
    return true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function Choice:onPointerInput(px,py, clicked)
 | 
			
		||||
function Choice:onPointerInput(px,_, clicked)
 | 
			
		||||
    self:grabFocus()
 | 
			
		||||
    if not clicked then
 | 
			
		||||
        return
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- A widget container, lays down its child widgets into multiple columns.
 | 
			
		||||
-- A widget container, lays down its child widgets into multiple columns.
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('columns$', '')
 | 
			
		||||
 | 
			
		||||
@@ -12,17 +12,17 @@ local Layout = require(BASE..'layout')
 | 
			
		||||
 | 
			
		||||
-- Advance position to next column
 | 
			
		||||
-- given current position, widget dimensions and padding
 | 
			
		||||
local function columnadvance(x,y, ww,wh, padding)
 | 
			
		||||
local function columnadvance(x,y, ww,_, padding)
 | 
			
		||||
    return x + ww + padding, y
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local Columns = setmetatable({
 | 
			
		||||
    advance = columnadvance,
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Layout)
 | 
			
		||||
Columns.__index = Columns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function Columns.new(args) return setmetatable(Layout.new(args), Columns) end
 | 
			
		||||
function Columns:new(args) return setmetatable(Layout:new(args), self) end
 | 
			
		||||
 | 
			
		||||
return Columns
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								input.lua
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								input.lua
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- Input widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
-- Input widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('input$', '')
 | 
			
		||||
@@ -17,7 +17,7 @@ local utf8 = require 'utf8'
 | 
			
		||||
-- NOTE: Input manages keyboard directly.
 | 
			
		||||
local Input = setmetatable({
 | 
			
		||||
    grabkeyboard = true,
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Input.__index = Input
 | 
			
		||||
 | 
			
		||||
@@ -37,8 +37,8 @@ end
 | 
			
		||||
 | 
			
		||||
--- Input constructor
 | 
			
		||||
-- @param args (@{InputAttributes}) widget attributes
 | 
			
		||||
function Input.new(args)
 | 
			
		||||
    local self = setmetatable(args, Input)
 | 
			
		||||
function Input:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.text = self.text or ""
 | 
			
		||||
    self.color = self.color or core.theme.color
 | 
			
		||||
@@ -90,7 +90,7 @@ function Input:textinput(text)
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function Input:keypressed(key, code, isrepeat)
 | 
			
		||||
function Input:keypressed(key, _, isrepeat)
 | 
			
		||||
    if isrepeat == nil then
 | 
			
		||||
        -- LOVE sends 3 types of keypressed() events,
 | 
			
		||||
        -- 1. with isrepeat = true
 | 
			
		||||
@@ -111,7 +111,7 @@ function Input:keypressed(key, code, isrepeat)
 | 
			
		||||
            self:onChange(self.text)
 | 
			
		||||
        elseif key == 'delete' and self.cursor ~= utf8.len(self.text)+1 then
 | 
			
		||||
            local a,b = split(self.text, self.cursor)
 | 
			
		||||
            local _,b = split(b, 2)
 | 
			
		||||
            _,b = split(b, 2)
 | 
			
		||||
 | 
			
		||||
            self.text = table.concat { a, b }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
-- @classmod yui.Label
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('label$', '')
 | 
			
		||||
 | 
			
		||||
@@ -16,7 +15,7 @@ local T = require('lib.moonspeak').translate
 | 
			
		||||
-- Labels don't accept focus
 | 
			
		||||
local Label = setmetatable({
 | 
			
		||||
    nofocus = true,
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Label.__index = Label
 | 
			
		||||
 | 
			
		||||
@@ -30,8 +29,8 @@ Label.__index = Label
 | 
			
		||||
 | 
			
		||||
--- Label constructor
 | 
			
		||||
-- @param args (@{LabelAttributes}) widget attributes
 | 
			
		||||
function Label.new(args)
 | 
			
		||||
    local self = setmetatable(args, Label)
 | 
			
		||||
function Label:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.text = self.text or ""
 | 
			
		||||
    self.text = self.notranslate and self.text or T(self.text)
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,8 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- @{Layout} is an internal class, serving as a container of widgets and helping to define their organization and display order.
 | 
			
		||||
-- @{Layout} is an internal class, serving as a container of widgets and
 | 
			
		||||
-- defining their organization and display order.
 | 
			
		||||
-- It is useful for arrangement customization.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -22,7 +23,7 @@ local rectunion = gear.rect.union
 | 
			
		||||
local pointinrect = gear.rect.pointinside
 | 
			
		||||
 | 
			
		||||
local Layout = setmetatable({
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Layout.__index = Layout
 | 
			
		||||
 | 
			
		||||
@@ -167,8 +168,8 @@ end
 | 
			
		||||
 | 
			
		||||
--- Layout constructor
 | 
			
		||||
-- @param args (@{LayoutAttributes}) widget attributes
 | 
			
		||||
function Layout.new(args)
 | 
			
		||||
    local self = setmetatable(args, Layout)
 | 
			
		||||
function Layout:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.padding = self.padding or 0
 | 
			
		||||
    self.stack = {}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								rows.lua
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								rows.lua
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- A widget container, lays down its child widgets into multiple rows.
 | 
			
		||||
-- A widget container, lays down its child widgets into multiple rows.
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('rows$', '')
 | 
			
		||||
 | 
			
		||||
@@ -12,17 +12,17 @@ local Layout = require(BASE..'layout')
 | 
			
		||||
 | 
			
		||||
-- Advance position to next row,
 | 
			
		||||
-- given current position, widget dimensions and padding.
 | 
			
		||||
local function rowadvance(x,y, ww,wh, padding)
 | 
			
		||||
local function rowadvance(x,y, _,wh, padding)
 | 
			
		||||
    return x, y + wh + padding
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local Rows = setmetatable({
 | 
			
		||||
    advance = rowadvance,
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Layout)
 | 
			
		||||
Rows.__index = Rows
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function Rows.new(args) return setmetatable(Layout.new(args), Rows) end
 | 
			
		||||
function Rows:new(args) return setmetatable(Layout:new(args), Rows) end
 | 
			
		||||
 | 
			
		||||
return Rows
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								slider.lua
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								slider.lua
									
									
									
									
									
								
							@@ -4,14 +4,16 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- Slider widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
-- Slider widget receives the following callbacks: @{yui.Widget.WidgetCallbacks|onEnter}(), @{yui.Widget.WidgetCallbacks|onChange}(), @{yui.Widget.WidgetCallbacks|onLeave}().
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('slider$', '')
 | 
			
		||||
 | 
			
		||||
local Widget = require(BASE..'widget')
 | 
			
		||||
local core = require(BASE..'core')
 | 
			
		||||
 | 
			
		||||
local Slider = setmetatable({}, Widget)
 | 
			
		||||
local Slider = setmetatable({
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Slider.__index = Slider
 | 
			
		||||
 | 
			
		||||
--- Attributes accepted by the @{Slider} widget beyond the standard @{yui.Widget.WidgetAttributes|attributes}
 | 
			
		||||
@@ -21,15 +23,15 @@ Slider.__index = Slider
 | 
			
		||||
-- @field max (number) max value of the slider
 | 
			
		||||
-- @field vertical (boolean) true for vertical slider, false or nil for horizontal slider
 | 
			
		||||
-- @field value (number) default value
 | 
			
		||||
-- @field step (number) number of slider's steps 
 | 
			
		||||
-- @field step (number) number of slider's steps
 | 
			
		||||
-- @field cornerRadius (number) radius for rounded corners
 | 
			
		||||
-- @table SliderAttributes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--- Slider constructor
 | 
			
		||||
-- @param args (@{SliderAttributes}) widget attributes
 | 
			
		||||
function Slider.new(args)
 | 
			
		||||
    local self = setmetatable(args, Slider)
 | 
			
		||||
function Slider:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
 | 
			
		||||
    self.color = self.color or core.theme.color
 | 
			
		||||
    self.cornerRadius = self.cornerRadius or core.theme.cornerRadius
 | 
			
		||||
@@ -41,7 +43,7 @@ function Slider.new(args)
 | 
			
		||||
    return self
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function Slider:onPointerInput(px,py, clicked, down)
 | 
			
		||||
function Slider:onPointerInput(px,py, _, down)
 | 
			
		||||
    self:grabFocus()
 | 
			
		||||
    if not down then
 | 
			
		||||
        return
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
-- @copyright 2022, The DoubleFourteen Code Forge
 | 
			
		||||
-- @author Lorenzo Cogotti, Andrea Pasquini
 | 
			
		||||
--
 | 
			
		||||
--- Spacer widget insert a space between two widget.
 | 
			
		||||
-- Spacer widget insert a space between two widget.
 | 
			
		||||
 | 
			
		||||
local BASE = (...):gsub('spacer$', '')
 | 
			
		||||
 | 
			
		||||
@@ -13,7 +13,7 @@ local Widget = require(BASE..'widget')
 | 
			
		||||
-- Spacers don't accept focus
 | 
			
		||||
local Spacer = setmetatable({
 | 
			
		||||
    nofocus = true,
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}, Widget)
 | 
			
		||||
Spacer.__index = Spacer
 | 
			
		||||
 | 
			
		||||
@@ -21,6 +21,6 @@ Spacer.__index = Spacer
 | 
			
		||||
--- Attributes accepted by the @{Spacer} widget @{yui.Widget.WidgetAttributes|attributes}.
 | 
			
		||||
--
 | 
			
		||||
-- @param args @{yui.Widget.WidgetAttributes|Widgetattributes} widget attributes
 | 
			
		||||
function Spacer.new(args) return setmetatable(args, Spacer) end
 | 
			
		||||
function Spacer:new(args) return setmetatable(args, self) end
 | 
			
		||||
 | 
			
		||||
return Spacer
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								ui.lua
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								ui.lua
									
									
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
--- An Ui manages a hierarchy of Widgets.
 | 
			
		||||
-- The @{Ui} draws its widgets according to their layout and position, manages input focus, and 
 | 
			
		||||
-- The @{Ui} draws its widgets according to their layout and position, manages input focus, and
 | 
			
		||||
-- dispatches events to the appropriate widgets depending on their class and activity status.
 | 
			
		||||
local BASE = (...):gsub('ui$', '')
 | 
			
		||||
 | 
			
		||||
@@ -71,9 +71,9 @@ end
 | 
			
		||||
 | 
			
		||||
--- Ui constructor
 | 
			
		||||
-- @param args (@{UiAttributes}) widget attributes
 | 
			
		||||
function Ui.new(args)
 | 
			
		||||
    local self = setmetatable(args, Ui)
 | 
			
		||||
    assert(#self == 1, "Ui.new() must have exactly one root widget.")
 | 
			
		||||
function Ui:new(args)
 | 
			
		||||
    self = setmetatable(args, self)
 | 
			
		||||
    assert(#self == 1, "Ui:new() must have exactly one root widget.")
 | 
			
		||||
 | 
			
		||||
    self.device = self.device or require(BASE..'device.love').new()
 | 
			
		||||
    self.x = self.x or 0
 | 
			
		||||
@@ -83,7 +83,7 @@ function Ui.new(args)
 | 
			
		||||
 | 
			
		||||
    local root = self[1]
 | 
			
		||||
    if not isinstance(root, Widget) then
 | 
			
		||||
        error("Ui.new() bad root Widget type: "..type(root)..".")
 | 
			
		||||
        error("Ui:new() bad root Widget type: "..type(root)..".")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    root.x,root.y = self.x,self.y
 | 
			
		||||
@@ -91,9 +91,9 @@ function Ui.new(args)
 | 
			
		||||
    if isinstance(root, Layout) then
 | 
			
		||||
        root:layoutWidgets()
 | 
			
		||||
    else
 | 
			
		||||
        assert(type(root.w) == 'number', "Ui.new() root Widget must have a numeric width.")
 | 
			
		||||
        assert(type(root.h) == 'number', "Ui.new() root Widget must have a numeric height.")
 | 
			
		||||
        assert(not root.nofocus, "Ui.new() single root Widget can't be nofocus.")
 | 
			
		||||
        assert(type(root.w) == 'number', "Ui:new() root Widget must have a numeric width.")
 | 
			
		||||
        assert(type(root.h) == 'number', "Ui:new() root Widget must have a numeric height.")
 | 
			
		||||
        assert(not root.nofocus, "Ui:new() single root Widget can't be nofocus.")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    self.w,self.h = root.w,root.h
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
local rectunion = require('lib.gear.rect').union
 | 
			
		||||
 | 
			
		||||
local Widget = {
 | 
			
		||||
    __call = function(cls, args) return cls.new(args) end
 | 
			
		||||
    __call = function(cls, args) return cls:new(args) end
 | 
			
		||||
}
 | 
			
		||||
Widget.__index = Widget
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user