some little fixes
This commit is contained in:
2
API.md
2
API.md
@@ -34,6 +34,8 @@ UIBase:new() -- Unless otherwise specified, all UIBase object constructors take
|
|||||||
|
|
||||||
Methods:
|
Methods:
|
||||||
```lua
|
```lua
|
||||||
|
keypressPass(string key) -- use with love.keypressed function
|
||||||
|
textinputPass(string t) -- use with love.textinput function
|
||||||
render()
|
render()
|
||||||
update(number deltatime) -- deltatime should be passed from love.update function
|
update(number deltatime) -- deltatime should be passed from love.update function
|
||||||
table<UIBase> getChildren()
|
table<UIBase> getChildren()
|
||||||
|
@@ -7,7 +7,8 @@ return {
|
|||||||
Frame = require("lib.classes.Frame"),
|
Frame = require("lib.classes.Frame"),
|
||||||
Label = require("lib.classes.Label"),
|
Label = require("lib.classes.Label"),
|
||||||
Button = require("lib.classes.Button"),
|
Button = require("lib.classes.Button"),
|
||||||
Slider = require("lib.classes.Slider"),
|
Slider = require("lib.classes.Slider"),
|
||||||
|
InputForm = require("lib.classes.InputForm"),
|
||||||
|
|
||||||
-- Datatypes
|
-- Datatypes
|
||||||
Vector2D = require("lib.datatypes.Vector2D"),
|
Vector2D = require("lib.datatypes.Vector2D"),
|
||||||
|
@@ -1,4 +1,7 @@
|
|||||||
# JUI Library
|
# Josh's UI Library
|
||||||
|
|
||||||
|
Of course, yet another Love2d GUI library.
|
||||||
|
|
||||||
A library that adds simple GUI elements for you to utilize in your Love2D games.
|
A library that adds simple GUI elements for you to utilize in your Love2D games.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
@@ -2,7 +2,7 @@ local UIButton = require("lib.classes.UIButton")
|
|||||||
local Color = require("lib.datatypes.Color")
|
local Color = require("lib.datatypes.Color")
|
||||||
|
|
||||||
local Button = UIButton:subclass("Button")
|
local Button = UIButton:subclass("Button")
|
||||||
|
--[[
|
||||||
function Button:init()
|
function Button:init()
|
||||||
self.super:init()
|
self.super:init()
|
||||||
self.text = "Button"
|
self.text = "Button"
|
||||||
@@ -78,5 +78,5 @@ function Button:render()
|
|||||||
|
|
||||||
self:renderChildren()
|
self:renderChildren()
|
||||||
end
|
end
|
||||||
|
]]
|
||||||
return Button
|
return Button
|
123
lib/classes/InputForm.lua
Normal file
123
lib/classes/InputForm.lua
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
local Label = require("lib.classes.Label")
|
||||||
|
local Event = require("lib.classes.Event")
|
||||||
|
|
||||||
|
local InputForm = Label:subclass("InputForm")
|
||||||
|
|
||||||
|
function InputForm:init()
|
||||||
|
self.super:init()
|
||||||
|
|
||||||
|
self.focusGrabbed = Event:new()
|
||||||
|
self.focusDropped = Event:new()
|
||||||
|
self.inputEvent = Event:new()
|
||||||
|
|
||||||
|
self.isFocused = false
|
||||||
|
self.defaultText = ""
|
||||||
|
|
||||||
|
self.text = ""
|
||||||
|
self.internalText = ""
|
||||||
|
self.defaultText = ""
|
||||||
|
self.hasBeenModified = false
|
||||||
|
self.clearOnReturn = false
|
||||||
|
self.overrideDefaultTextOnFocus = true
|
||||||
|
self.time = 0.0
|
||||||
|
self.cursor = "|"
|
||||||
|
self.cursorPos = 0
|
||||||
|
self.shift = false
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:reset()
|
||||||
|
self.cursorPos = 0
|
||||||
|
self.time = 0.0
|
||||||
|
self.internalText = ""
|
||||||
|
self.hasBeenModified = false
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:keypressed(key)
|
||||||
|
|
||||||
|
if key == "backspace" and self.cursorPos > 0 then
|
||||||
|
|
||||||
|
self.internalText = string.sub(self.internalText, 1, self.cursorPos-1)..string.sub(self.internalText, self.cursorPos+1)
|
||||||
|
|
||||||
|
self.cursorPos = self.cursorPos - 1
|
||||||
|
|
||||||
|
elseif key == "left" then
|
||||||
|
self.cursorPos = math.max(0, self.cursorPos-1)
|
||||||
|
elseif key == "right" then
|
||||||
|
self.cursorPos = math.min(self.internalText:len(), self.cursorPos+1)
|
||||||
|
elseif key == "delete" then
|
||||||
|
-- omitted for now
|
||||||
|
elseif key == "return" then
|
||||||
|
--print(self.internalText)
|
||||||
|
self.inputEvent:call(self.internalText)
|
||||||
|
self:dropFocus(true)
|
||||||
|
if self.clearOnReturnKey then
|
||||||
|
self:reset()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:textinput(t)
|
||||||
|
self.internalText = string.sub(self.internalText, 1, self.cursorPos)..t..string.sub(self.internalText, self.cursorPos+1)
|
||||||
|
self.cursorPos = self.cursorPos + 1
|
||||||
|
self.hasBeenModified = true
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:setDefaultText(text)
|
||||||
|
self.defaultText = text
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function InputForm:grabFocus()
|
||||||
|
self.isFocused = true
|
||||||
|
self.focusGrabbed:call()
|
||||||
|
|
||||||
|
if self.overrideDefaultTextOnFocus then
|
||||||
|
self.hasBeenModified = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:dropFocus(enter)
|
||||||
|
self.isFocused = false
|
||||||
|
self.focusDropped:call(enter)
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:update(dt)
|
||||||
|
self.super:update(dt)
|
||||||
|
|
||||||
|
|
||||||
|
-- invert the cursor every second
|
||||||
|
self.time = self.time + dt
|
||||||
|
if self.time > 0.25 then
|
||||||
|
self.cursor = (self.cursor == "|") and "" or "|"
|
||||||
|
|
||||||
|
self.time = 0.0
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.hasBeenModified == true then
|
||||||
|
if self.isFocused then
|
||||||
|
self.text = string.sub(self.internalText, 1, self.cursorPos)..self.cursor..string.sub(self.internalText, self.cursorPos+1)
|
||||||
|
else
|
||||||
|
self.text = self.internalText
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self.text = self.defaultText
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if love.mouse.isDown(1) then
|
||||||
|
if self.mouseOver then
|
||||||
|
self:grabFocus()
|
||||||
|
else
|
||||||
|
self:dropFocus(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputForm:render()
|
||||||
|
self.super:render()
|
||||||
|
|
||||||
|
|
||||||
|
self:renderChildren()
|
||||||
|
end
|
||||||
|
|
||||||
|
return InputForm
|
@@ -35,6 +35,7 @@ function JUIScene:getAbsoluteSize()
|
|||||||
return Vector2D:new(love.graphics.getWidth(), love.graphics.getHeight())
|
return Vector2D:new(love.graphics.getWidth(), love.graphics.getHeight())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function JUIScene:render()
|
function JUIScene:render()
|
||||||
self.super:render()
|
self.super:render()
|
||||||
self:renderChildren()
|
self:renderChildren()
|
||||||
|
@@ -45,10 +45,31 @@ function UIBase:init()
|
|||||||
self.isUIObject = true
|
self.isUIObject = true
|
||||||
self.active = true
|
self.active = true
|
||||||
self.children = {}
|
self.children = {}
|
||||||
self.parent = nil
|
self.parent = nil
|
||||||
|
self.textInput = false
|
||||||
self.baseReturnFont = love.graphics.newFont(12)
|
self.baseReturnFont = love.graphics.newFont(12)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function UIBase:keypressPass(key)
|
||||||
|
for _, child in pairs(self.children) do
|
||||||
|
if child.isFocused and child.isFocused == true then
|
||||||
|
child:keypressed(key)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
child:keypressPass(key)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIBase:textinputPass(t)
|
||||||
|
for _, child in pairs(self.children) do
|
||||||
|
if child.isFocused and child.isFocused == true then
|
||||||
|
child:textinput(t)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
child:textinputPass(t)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function UIBase:renderChildren()
|
function UIBase:renderChildren()
|
||||||
for _, child in pairs(self.children) do
|
for _, child in pairs(self.children) do
|
||||||
if child.isUIObject then
|
if child.isUIObject then
|
||||||
@@ -66,7 +87,9 @@ function UIBase:updateChildren(delta)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function UIBase:render()
|
function UIBase:render()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function UIBase:update(delta)
|
function UIBase:update(delta)
|
||||||
self:updateChildren(delta)
|
self:updateChildren(delta)
|
||||||
end
|
end
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
local UIRect = require("lib.classes.UIRect")
|
local Label = require("lib.classes.Label")
|
||||||
local Event = require("lib.classes.Event")
|
local Event = require("lib.classes.Event")
|
||||||
|
|
||||||
local UIButton = UIRect:subclass("UIButton")
|
local UIButton = Label:subclass("UIButton")
|
||||||
|
|
||||||
function UIButton:init()
|
function UIButton:init()
|
||||||
self.super:init()
|
self.super:init()
|
||||||
|
2
main.lua
2
main.lua
@@ -38,6 +38,8 @@ end
|
|||||||
|
|
||||||
JUI:parent(mainmenu, testSlider)
|
JUI:parent(mainmenu, testSlider)
|
||||||
JUI:parent(mainmenu, text)
|
JUI:parent(mainmenu, text)
|
||||||
|
JUI:parent(mainmenu, bigBalls)
|
||||||
|
|
||||||
|
|
||||||
local windowCreationSuccess
|
local windowCreationSuccess
|
||||||
local debugInfoString = ""
|
local debugInfoString = ""
|
||||||
|
Reference in New Issue
Block a user