summaryrefslogtreecommitdiff
path: root/examples/resources/lib/raygui.lua
diff options
context:
space:
mode:
Diffstat (limited to 'examples/resources/lib/raygui.lua')
-rw-r--r--examples/resources/lib/raygui.lua230
1 files changed, 192 insertions, 38 deletions
diff --git a/examples/resources/lib/raygui.lua b/examples/resources/lib/raygui.lua
index 694a311..1ebb3f0 100644
--- a/examples/resources/lib/raygui.lua
+++ b/examples/resources/lib/raygui.lua
@@ -47,31 +47,29 @@ end
-- Raygui.
-Raygui = {}
-Raygui.__index = Raygui
+Raygui = {
+ RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT = 24,
-function Raygui:new()
- local object = setmetatable( {}, Raygui )
+ elements = {},
+ focused = 0,
+ dragging = nil,
+ grabPos = Vec2:new(),
+}
- object.elements = {}
- object.focused = 0
+function Raygui.process()
+ -- If dragging, don't process element masking.
+ if Raygui.dragging ~= nil then
+ Raygui.drag( Raygui.dragging )
- return object
-end
-
-function Raygui:add( element )
- table.insert( self.elements, element )
-
- return element
-end
+ return
+ end
-function Raygui:process()
- for i = #self.elements, 1, -1 do
- local element = self.elements[i]
+ for i = #Raygui.elements, 1, -1 do
+ local element = Raygui.elements[i]
if element.visible and element.process ~= nil then
if element:process() then
- self.focused = i
+ Raygui.focused = i
return
end
@@ -79,11 +77,40 @@ function Raygui:process()
end
end
-function Raygui:draw()
- RL.GuiLock()
+function Raygui.drag( element )
+ local mousePos = Vec2:new( RL.GetMousePosition() )
+ local mouseOver = RL.CheckCollisionPointRec( mousePos, element.bounds )
+
+ if element.draggable and element ~= Raygui.dragging and RL.IsMouseButtonPressed( RL.MOUSE_BUTTON_LEFT )
+ and mouseOver and mousePos.y - element.bounds.y <= Raygui.RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT then
+ Raygui.grabPos = mousePos - Vec2:new( element.bounds.x, element.bounds.y )
- for i, element in ipairs( self.elements ) do
- if i == self.focused then
+ if element.grabCallback ~= nil then
+ element.grabCallback( element )
+ end
+ Raygui.dragging = element
+ end
+
+ if element == Raygui.dragging then
+ if not RL.IsMouseButtonDown( RL.MOUSE_BUTTON_LEFT ) then
+ Raygui.dragging = nil
+ end
+
+ element:setPosition( mousePos - Raygui.grabPos )
+
+ if element.dragCallback ~= nil then
+ element.dragCallback( element )
+ end
+ end
+
+ return mouseOver
+end
+
+function Raygui.draw()
+ RL.GuiLock()
+
+ for i, element in ipairs( Raygui.elements ) do
+ if i == Raygui.focused then
RL.GuiUnlock()
end
@@ -93,20 +120,20 @@ function Raygui:draw()
end
end
-function Raygui:set2Top( element )
- for i, curElement in ipairs( self.elements ) do
+function Raygui.set2Top( element )
+ for i, curElement in ipairs( Raygui.elements ) do
if element == curElement then
- Util.tableMove( self.elements, i, 1, #self.elements )
+ Util.tableMove( Raygui.elements, i, 1, #Raygui.elements )
return
end
end
end
-function Raygui:set2Back( element )
- for i, curElement in ipairs( self.elements ) do
+function Raygui.set2Back( element )
+ for i, curElement in ipairs( Raygui.elements ) do
if element == curElement then
- Util.tableMove( self.elements, i, 1, 1 )
+ Util.tableMove( Raygui.elements, i, 1, 1 )
return
end
@@ -119,23 +146,43 @@ end
-- WindowBox.
+--- Window Box control, shows a window that can be closed
+---@class WindowBox
+---@field bounds table Rect
+---@field text string
+---@field callback function|nil
+---@field grabCallback function|nil
+---@field dragCallback function|nil
+---@field visible boolean
+---@field draggable boolean
WindowBox = {}
WindowBox.__index = WindowBox
-function WindowBox:new( bounds, text, callback )
+---@param bounds table Rect
+---@param text string
+---@param callback function|nil
+---@param grabCallback function|nil
+---@param dragCallback function|nil
+---@return table object
+function WindowBox:new( bounds, text, callback, grabCallback, dragCallback )
local object = setmetatable( {}, WindowBox )
object.bounds = bounds:clone()
object.text = text
object.callback = callback
+ object.grabCallback = grabCallback
+ object.dragCallback = dragCallback
object.visible = true
+ object.draggable = true
+
+ table.insert( Raygui.elements, object )
return object
end
function WindowBox:process()
- return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+ return Raygui.drag( self )
end
function WindowBox:draw()
@@ -151,9 +198,16 @@ end
-- GroupBox.
+--- Group Box control with text name
+---@class GroupBox
+---@field bounds table Rect
+---@field text string
+---@field visible boolean
GroupBox = {}
GroupBox.__index = GroupBox
+---@param bounds table Rect
+---@param text string
function GroupBox:new( bounds, text )
local object = setmetatable( {}, GroupBox )
@@ -162,6 +216,8 @@ function GroupBox:new( bounds, text )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -180,6 +236,7 @@ end
-- Line.
+--- Line separator control, could contain text
Line = {}
Line.__index = Line
@@ -191,6 +248,8 @@ function Line:new( bounds, text )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -209,22 +268,28 @@ end
-- Panel.
+--- Panel control, useful to group controls
Panel = {}
Panel.__index = Panel
-function Panel:new( bounds, text )
+function Panel:new( bounds, text, grabCallback, dragCallback )
local object = setmetatable( {}, Panel )
object.bounds = bounds:clone()
object.text = text
object.visible = true
+ object.draggable = true
+ object.grabCallback = grabCallback
+ object.dragCallback = dragCallback
+
+ table.insert( Raygui.elements, object )
return object
end
function Panel:process()
- return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+ return Raygui.drag( self )
end
function Panel:draw()
@@ -238,10 +303,11 @@ end
-- ScrollPanel.
+--- Scroll Panel control
ScrollPanel = {}
ScrollPanel.__index = ScrollPanel
-function ScrollPanel:new( bounds, text, content, scroll, callback )
+function ScrollPanel:new( bounds, text, content, scroll, callback, grabCallback, dragCallback )
local object = setmetatable( {}, ScrollPanel )
object.bounds = bounds:clone()
@@ -250,14 +316,19 @@ function ScrollPanel:new( bounds, text, content, scroll, callback )
object.scroll = scroll:clone()
object.view = Rect:new()
object.callback = callback
+ object.grabCallback = grabCallback
+ object.dragCallback = dragCallback
object.visible = true
+ object.draggable = true
+
+ table.insert( Raygui.elements, object )
return object
end
function ScrollPanel:process()
- return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+ return Raygui.drag( self )
end
function ScrollPanel:draw()
@@ -284,6 +355,7 @@ end
-- Label.
+--- Label control, shows text
Label = {}
Label.__index = Label
@@ -295,6 +367,8 @@ function Label:new( bounds, text )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -313,6 +387,7 @@ end
-- Button.
+--- Button control
Button = {}
Button.__index = Button
@@ -326,6 +401,8 @@ function Button:new( bounds, text, callback )
object.clicked = false
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -348,6 +425,7 @@ end
-- LabelButton.
+--- Label button control
LabelButton = {}
LabelButton.__index = LabelButton
@@ -361,6 +439,8 @@ function LabelButton:new( bounds, text, callback )
object.clicked = false
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -383,6 +463,7 @@ end
-- Toggle.
+--- Toggle Button control
Toggle = {}
Toggle.__index = Toggle
@@ -396,6 +477,8 @@ function Toggle:new( bounds, text, active, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -420,6 +503,7 @@ end
-- ToggleGroup.
+--- Toggle Group control
ToggleGroup = {}
ToggleGroup.__index = ToggleGroup
@@ -435,6 +519,8 @@ function ToggleGroup:new( bounds, text, active, callback )
object.focusBounds = {}
object:updateFocusBounds()
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -520,6 +606,8 @@ function CheckBox:new( bounds, text, checked, callback )
object.focusBounds = bounds:clone()
object:updateFocusBounds()
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -585,6 +673,7 @@ end
-- ComboBox.
+--- Combo Box control
ComboBox = {}
ComboBox.__index = ComboBox
@@ -598,6 +687,8 @@ function ComboBox:new( bounds, text, active, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -622,6 +713,7 @@ end
-- DropdownBox.
+--- Dropdown Box control
DropdownBox = {}
DropdownBox.__index = DropdownBox
@@ -638,6 +730,8 @@ function DropdownBox:new( bounds, text, active, editMode, callback )
object.editModeBounds = bounds:clone()
object:updateFocusBounds()
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -691,6 +785,7 @@ end
-- Spinner.
+--- Spinner control
Spinner = {}
Spinner.__index = Spinner
@@ -707,6 +802,8 @@ function Spinner:new( bounds, text, value, minValue, maxValue, editMode, callbac
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -736,6 +833,7 @@ end
-- ValueBox.
+--- Value Box control
ValueBox = {}
ValueBox.__index = ValueBox
@@ -752,6 +850,8 @@ function ValueBox:new( bounds, text, value, minValue, maxValue, editMode, callba
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -781,6 +881,7 @@ end
-- TextBox.
+--- Text Box control
TextBox = {}
TextBox.__index = TextBox
@@ -796,6 +897,8 @@ function TextBox:new( bounds, text, textSize, editMode, callback )
object.scissorMode = false
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -832,6 +935,7 @@ end
-- TextBoxMulti.
+-- Text Box control with multiple lines
TextBoxMulti = {}
TextBoxMulti.__index = TextBoxMulti
@@ -846,6 +950,8 @@ function TextBoxMulti:new( bounds, text, textSize, editMode, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -874,6 +980,7 @@ end
-- Slider.
+--- Slider control
Slider = {}
Slider.__index = Slider
@@ -890,6 +997,8 @@ function Slider:new( bounds, textLeft, textRight, value, minValue, maxValue, cal
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -914,6 +1023,7 @@ end
-- SliderBar.
+--- Slider Bar control
SliderBar = {}
SliderBar.__index = SliderBar
@@ -930,6 +1040,8 @@ function SliderBar:new( bounds, textLeft, textRight, value, minValue, maxValue,
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -954,6 +1066,7 @@ end
-- ProgressBar.
+--- Progress Bar control, shows current progress value
ProgressBar = {}
ProgressBar.__index = ProgressBar
@@ -970,6 +1083,8 @@ function ProgressBar:new( bounds, textLeft, textRight, value, minValue, maxValue
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -994,6 +1109,7 @@ end
-- StatusBar.
+--- Status Bar control, shows info text
StatusBar = {}
StatusBar.__index = StatusBar
@@ -1005,6 +1121,8 @@ function StatusBar:new( bounds, text )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1023,6 +1141,7 @@ end
-- DummyRec.
+--- Dummy control for placeholders
DummyRec = {}
DummyRec.__index = DummyRec
@@ -1034,6 +1153,8 @@ function DummyRec:new( bounds, text )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1052,6 +1173,7 @@ end
-- Grid.
+--- Grid control
Grid = {}
Grid.__index = Grid
@@ -1067,6 +1189,8 @@ function Grid:new( bounds, text, spacing, subdivs, callback )
object.cell = Vec2:new()
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1095,6 +1219,7 @@ end
-- ListView.
+--- List View control
ListView = {}
ListView.__index = ListView
@@ -1108,6 +1233,8 @@ function ListView:new( bounds, text, scrollIndex, active, callback )
object.callback = callback
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1136,6 +1263,7 @@ end
-- ListViewEx.
+--- List View with extended parameters
ListViewEx = {}
ListViewEx.__index = ListViewEx
@@ -1150,6 +1278,8 @@ function ListViewEx:new( bounds, text, focus, scrollIndex, active, callback )
object.callback = callback
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1178,10 +1308,11 @@ end
-- MessageBox.
+--- Message Box control, displays a message
MessageBox = {}
MessageBox.__index = MessageBox
-function MessageBox:new( bounds, title, message, buttons, callback )
+function MessageBox:new( bounds, title, message, buttons, callback, grabCallback, dragCallback )
local object = setmetatable( {}, MessageBox )
object.bounds = bounds:clone()
@@ -1189,9 +1320,14 @@ function MessageBox:new( bounds, title, message, buttons, callback )
object.message = message
object.buttons = buttons
object.callback = callback
+ object.grabCallback = grabCallback
+ object.dragCallback = dragCallback
object.buttonIndex = -1
object.visible = true
+ object.draggable = true
+
+ table.insert( Raygui.elements, object )
return object
end
@@ -1201,7 +1337,7 @@ function MessageBox:getItem( id )
end
function MessageBox:process()
- return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+ return Raygui.drag( self )
end
function MessageBox:draw()
@@ -1219,10 +1355,11 @@ end
-- TextInputBox.
+--- Text Input Box control, ask for text, supports secret
TextInputBox = {}
TextInputBox.__index = TextInputBox
-function TextInputBox:new( bounds, title, message, buttons, text, textMaxSize, secretViewActive, callback )
+function TextInputBox:new( bounds, title, message, buttons, text, textMaxSize, secretViewActive, callback, grabCallback, dragCallback )
local object = setmetatable( {}, TextInputBox )
object.bounds = bounds:clone()
@@ -1233,9 +1370,14 @@ function TextInputBox:new( bounds, title, message, buttons, text, textMaxSize, s
object.textMaxSize = textMaxSize
object.secretViewActive = secretViewActive
object.callback = callback
+ object.grabCallback = grabCallback
+ object.dragCallback = dragCallback
object.buttonIndex = -1
object.visible = true
+ object.draggable = true
+
+ table.insert( Raygui.elements, object )
return object
end
@@ -1245,7 +1387,7 @@ function TextInputBox:getItem( id )
end
function TextInputBox:process()
- return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+ return Raygui.drag( self )
end
function TextInputBox:draw()
@@ -1263,6 +1405,7 @@ end
-- ColorPicker.
+--- Color Picker control ( multiple color controls )
ColorPicker = {}
ColorPicker.__index = ColorPicker
@@ -1276,6 +1419,8 @@ function ColorPicker:new( bounds, text, color, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1301,6 +1446,7 @@ end
-- ColorPanel.
+--- Color Panel control
ColorPanel = {}
ColorPanel.__index = ColorPanel
@@ -1314,6 +1460,8 @@ function ColorPanel:new( bounds, text, color, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1339,6 +1487,7 @@ end
-- ColorBarAlpha.
+--- Color Bar Alpha control
ColorBarAlpha = {}
ColorBarAlpha.__index = ColorBarAlpha
@@ -1352,6 +1501,8 @@ function ColorBarAlpha:new( bounds, text, alpha, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end
@@ -1375,6 +1526,7 @@ end
-- ColorBarHue.
+--- Color Bar Hue control
ColorBarHue = {}
ColorBarHue.__index = ColorBarHue
@@ -1388,6 +1540,8 @@ function ColorBarHue:new( bounds, text, value, callback )
object.visible = true
+ table.insert( Raygui.elements, object )
+
return object
end