summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorjussi2024-07-16 21:52:30 +0300
committerjussi2024-07-16 21:52:30 +0300
commit9dceeb8c058267e04bf551db7a9659e3ba5bdab3 (patch)
treee642e0bae55536045013d1ce8477b54706cde38a /examples
parentf64b17ec71dea4ecae4d19ce75871331909a3881 (diff)
downloadreilua-enhanced-9dceeb8c058267e04bf551db7a9659e3ba5bdab3.tar.gz
reilua-enhanced-9dceeb8c058267e04bf551db7a9659e3ba5bdab3.tar.bz2
reilua-enhanced-9dceeb8c058267e04bf551db7a9659e3ba5bdab3.zip
Reigui property_list and tree_view use scrissor mode.
Diffstat (limited to 'examples')
-rw-r--r--examples/raygui_extensions/main.lua1
-rw-r--r--examples/raygui_extensions/property_list.lua52
-rw-r--r--examples/raygui_extensions/tree_view.lua87
-rw-r--r--examples/resources/lib/raygui.lua80
4 files changed, 106 insertions, 114 deletions
diff --git a/examples/raygui_extensions/main.lua b/examples/raygui_extensions/main.lua
index 8c549f3..4cd537d 100644
--- a/examples/raygui_extensions/main.lua
+++ b/examples/raygui_extensions/main.lua
@@ -85,6 +85,7 @@ local function addPropertyList()
}
)
RL.GuiSetStyle( RL.SPINNER, RL.TEXT_ALIGNMENT, RL.TEXT_ALIGN_LEFT )
+ PropertyList.contentPadding.x = PropertyList.bounds.height -- Room for dropdown.
PropertyList:addControl( PropertyList.gui:Line(
Rectangle:new( 0, 0, 0, 0 ),
diff --git a/examples/raygui_extensions/property_list.lua b/examples/raygui_extensions/property_list.lua
index ffff54d..46cff6e 100644
--- a/examples/raygui_extensions/property_list.lua
+++ b/examples/raygui_extensions/property_list.lua
@@ -7,6 +7,7 @@ function PropertyList:new( bounds, text, callbacks, styles, tooltip )
object.padding = 4 -- Content edges.
object.spacing = 4 -- Between controls.
+ object.contentPadding = Vector2:new( 0, 0 ) -- Extra padding for content rect.
object.bounds = bounds:clone()
object.text = text
@@ -18,10 +19,9 @@ function PropertyList:new( bounds, text, callbacks, styles, tooltip )
object.gui = Raygui:new() -- Contains full independent gui system.
object.controls = {}
+ object.content = Rectangle:new()
-- Set in setSize.
- object.framebufferSize = nil
- object.framebuffer = nil
object.defaultControlSize = nil
object.visible = true
@@ -98,10 +98,11 @@ function PropertyList:updateContent()
for _, control in ipairs( self.controls ) do
self:updateControl( control )
end
- self.content.x = 0
- self.content.y = 0
- self.content.height = self.content.height + self.padding + self.view.height - self.defaultControlSize.y - self.spacing
- self.content.width = self.content.width + self.padding
+ self.content:set(
+ 0, 0,
+ self.content.width + self.padding + self.contentPadding.y,
+ self.content.height + self.padding + self.contentPadding.x
+ )
self._forceCheckScroll = true
end
@@ -170,22 +171,15 @@ function PropertyList:update()
self.gui:update()
- RL.BeginTextureMode( self.framebuffer )
- RL.ClearBackground( RL.BLANK )
- RL.rlTranslatef( { self.scroll.x, self.scroll.y, 0 } )
- self.gui:draw()
- RL.EndTextureMode()
-
return self._gui:drag( self )
end
function PropertyList:draw()
- local oldScroll = self.scroll:clone()
- local _, scroll, view = RL.GuiScrollPanel( self.bounds, self.text, self.content, self.scroll, self.view )
+ local result, scroll, view = RL.GuiScrollPanel( self.bounds, self.text, self.content, self.scroll, self.view )
self.view:setT( view )
self.scroll:setT( scroll )
- if self.scroll ~= oldScroll or self._forceCheckScroll then
+ if 0 < result or self._forceCheckScroll then
if not self._forceCheckScroll then
self._gui:checkScrolling()
end
@@ -198,15 +192,15 @@ function PropertyList:draw()
self.callbacks.scroll( self )
end
end
+ -- Lock if this gui not focused.
+ self.gui.locked = not ( self._gui.controls[ self._gui.focused ] == self ) or self._gui.locked
- RL.DrawTexturePro(
- RL.GetRenderTextureTexture( self.framebuffer ),
- { 0, self.framebufferSize.y - self.view.height, self.view.width, -self.view.height },
- { math.floor( self.view.x ), math.floor( self.view.y ), self.view.width, self.view.height },
- { 0, 0 },
- 0.0,
- RL.WHITE
- )
+ RL.BeginScissorMode( self.view )
+ RL.rlPushMatrix()
+ RL.rlTranslatef( { RL.Round( self.view.x + self.scroll.x ), RL.Round( self.view.y + self.scroll.y ), 0 } )
+ self.gui:draw()
+ RL.rlPopMatrix()
+ RL.EndScissorMode()
end
function PropertyList:updateMouseOffset()
@@ -219,8 +213,8 @@ function PropertyList:updateMouseOffset()
end
function PropertyList:setPosition( pos )
- self.bounds.x = pos.x
- self.bounds.y = pos.y
+ self.bounds.x = RL.Round( pos.x )
+ self.bounds.y = RL.Round( pos.y )
if self.visible then
self:draw() -- Update self.view.
@@ -244,15 +238,9 @@ function PropertyList:setSize( size )
self.defaultControlSize = Vector2:new( self.content.width, self.defaultControlHeight )
local _, _, view = RL.GuiScrollPanel( self.bounds, self.text, self.content, self.scroll, self.view )
- self.view = Rectangle:newT( view )
+ self.view = Rectangle:newT( view )
self.gui.view = Rectangle:new( 0, 0, self.view.width, self.view.height )
- self.framebufferSize = Vector2:new( self.bounds.width, self.bounds.height - self.gui.RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT )
-
- if self.framebuffer ~= nil and not RL.IsGCUnloadEnabled() then
- RL.UnloadRenderTexture( self.framebuffer )
- end
- self.framebuffer = RL.LoadRenderTexture( self.framebufferSize )
self:updateContent()
end
diff --git a/examples/raygui_extensions/tree_view.lua b/examples/raygui_extensions/tree_view.lua
index b15469c..3c5cebe 100644
--- a/examples/raygui_extensions/tree_view.lua
+++ b/examples/raygui_extensions/tree_view.lua
@@ -30,8 +30,8 @@ function TreeView:new( bounds, text, callbacks, styles, tooltip )
object.controls = {}
-- Set in setSize.
- object.framebufferSize = nil
- object.framebuffer = nil
+ -- object.framebufferSize = nil
+ -- object.framebuffer = nil
object.defaultControlSize = nil
object.visible = true
@@ -120,10 +120,11 @@ function TreeView:updateContent()
control._childId = i
self:updateControl( control )
end
- self.content.x = 0
- self.content.y = 0
- self.content.height = self.content.height + self.padding
- self.content.width = self.content.width + self.padding
+ self.content:set(
+ 0, 0,
+ self.content.width + self.padding,
+ self.content.height + self.padding
+ )
self._forceCheckScroll = true
end
@@ -269,8 +270,7 @@ function TreeView:itemSelect( item )
end
function TreeView:update()
- local mousePos = Vector2:newT( RL.GetMousePosition() )
- local guiMousePos = mousePos + self.gui.mouseOffset
+ local mousePos = Vector2:tempT( RL.GetMousePosition() )
local mouseInView = self.view:checkCollisionPoint( mousePos )
if not mouseInView then
@@ -281,6 +281,28 @@ function TreeView:update()
self.gui:update()
+ return self._gui:drag( self )
+end
+
+function TreeView:draw()
+ local result, scroll, view = RL.GuiScrollPanel( self.bounds, self.text, self.content, self.scroll, self.view )
+ self.view:setT( view )
+ self.scroll:setT( scroll )
+
+ if 0 < result or self._forceCheckScroll then
+ if not self._forceCheckScroll then
+ self._gui:checkScrolling()
+ end
+ self._forceCheckScroll = false
+
+ self:updateMouseOffset()
+ self.gui.view:set( -self.scroll.x, -self.scroll.y, self.view.width, self.view.height )
+ end
+
+ local mousePos = Vector2:tempT( RL.GetMousePosition() )
+ local guiMousePos = mousePos + self.gui.mouseOffset
+ local mouseInView = self.view:checkCollisionPoint( mousePos )
+
local mouseInClickedItem = false
if RL.IsMouseButtonPressed( RL.MOUSE_BUTTON_LEFT ) then
@@ -295,10 +317,13 @@ function TreeView:update()
mouseInClickedItem = self._clickedItem.bounds:checkCollisionPoint( guiMousePos )
end
- RL.BeginTextureMode( self.framebuffer )
- RL.ClearBackground( RL.BLANK )
- RL.rlTranslatef( { self.scroll.x, self.scroll.y, 0 } )
-
+ -- Lock if this gui not focused.
+ self.gui.locked = not ( self._gui.controls[ self._gui.focused ] == self ) or self._gui.locked
+
+ RL.BeginScissorMode( self.view )
+ RL.rlPushMatrix()
+ RL.rlTranslatef( { RL.Round( self.view.x + self.scroll.x ), RL.Round( self.view.y + self.scroll.y ), 0 } )
+
self.gui:draw()
if self.allowMove and RL.IsMouseButtonDown( RL.MOUSE_BUTTON_LEFT ) and self._clickedItem ~= nil
@@ -328,35 +353,9 @@ function TreeView:update()
self._clickedItem = nil
self._movingItem = self.MOVE_ITEM_NONE
end
- RL.EndTextureMode()
-
- return self._gui:drag( self )
-end
-
-function TreeView:draw()
- local oldScroll = self.scroll:clone()
- local _, scroll, view = RL.GuiScrollPanel( self.bounds, self.text, self.content, self.scroll, self.view )
- self.view:setT( view )
- self.scroll:setT( scroll )
-
- if self.scroll ~= oldScroll or self._forceCheckScroll then
- if not self._forceCheckScroll then
- self._gui:checkScrolling()
- end
- self._forceCheckScroll = false
-
- self:updateMouseOffset()
- self.gui.view:set( -self.scroll.x, -self.scroll.y, self.view.width, self.view.height )
- end
- RL.DrawTexturePro(
- RL.GetRenderTextureTexture( self.framebuffer ),
- { 0, self.framebufferSize.y - self.view.height, self.view.width, -self.view.height },
- { math.floor( self.view.x ), math.floor( self.view.y ), self.view.width, self.view.height },
- { 0, 0 },
- 0.0,
- RL.WHITE
- )
+ RL.rlPopMatrix()
+ RL.EndScissorMode()
end
function TreeView:updateMouseOffset()
@@ -386,15 +385,9 @@ function TreeView:setSize( size )
self.defaultControlSize = Vector2:new( self.content.width, self.defaultControlHeight )
local _, _, view = RL.GuiScrollPanel( self.bounds, self.text, self.content, self.scroll, self.view )
- self.view = Rectangle:newT( view )
+ self.view = Rectangle:newT( view )
self.gui.view = Rectangle:new( 0, 0, self.view.width, self.view.height )
- self.framebufferSize = Vector2:new( self.bounds.width, self.bounds.height - self.gui.RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT )
-
- if self.framebuffer ~= nil and not RL.IsGCUnloadEnabled() then
- RL.UnloadRenderTexture( self.framebuffer )
- end
- self.framebuffer = RL.LoadRenderTexture( self.framebufferSize )
self:updateContent()
end
diff --git a/examples/resources/lib/raygui.lua b/examples/resources/lib/raygui.lua
index e0b3d91..3caba0d 100644
--- a/examples/resources/lib/raygui.lua
+++ b/examples/resources/lib/raygui.lua
@@ -78,7 +78,7 @@ function WindowBox:draw()
if result == 1 then
-- //TODO Could add self._gui:clickedInBounds( closeButtonBounds )
- if self.callbacks.close ~= nil then
+ if self.callbacks.close then
self.callbacks.close( self )
end
end
@@ -230,13 +230,13 @@ function GuiTabBar:draw()
if self._gui:clickedInBounds( self.bounds ) then
self.active = active
- if self.callbacks.select ~= nil then
+ if self.callbacks.select then
self.callbacks.select( self )
end
end
end
- if 0 <= result and self.callbacks.close ~= nil and self._gui:clickedInBounds( self.bounds ) then
+ if 0 <= result and self.callbacks.close and self._gui:clickedInBounds( self.bounds ) then
self.callbacks.close( self, result )
end
end
@@ -284,7 +284,7 @@ function ScrollPanel:draw()
if 0 < result then
self._gui:checkScrolling()
- if self.callbacks.scroll ~= nil then
+ if self.callbacks.scroll then
self.callbacks.scroll( self )
end
end
@@ -361,7 +361,7 @@ end
function Button:draw()
local result = RL.GuiButton( self.bounds, self.text )
- if result == 1 and self.callbacks.pressed ~= nil and self._gui:clickedInBounds( self.bounds ) then
+ if result == 1 and self.callbacks.pressed and self._gui:clickedInBounds( self.bounds ) then
self.callbacks.pressed( self )
end
end
@@ -400,7 +400,7 @@ end
function LabelButton:draw()
local result = RL.GuiLabelButton( self.bounds, self.text )
- if result == 1 and self.callbacks.pressed ~= nil and self._gui:clickedInBounds( self.bounds ) then
+ if result == 1 and self.callbacks.pressed and self._gui:clickedInBounds( self.bounds ) then
self.callbacks.pressed( self )
end
end
@@ -443,7 +443,7 @@ function Toggle:draw()
if 0 < result and self._gui:clickedInBounds( self.bounds ) then
self.active = active
- if self.callbacks.pressed ~= nil then
+ if self.callbacks.pressed then
self.callbacks.pressed( self )
end
end
@@ -541,7 +541,7 @@ function ToggleGroup:draw()
if inBounds then
self.active = active
- if self.callbacks.select ~= nil then
+ if self.callbacks.select then
self.callbacks.select( self )
end
end
@@ -596,7 +596,7 @@ function CheckBox:draw()
if self._gui:clickedInBounds( self.focusBounds ) then
self.checked = checked
- if self.callbacks.pressed ~= nil then
+ if self.callbacks.pressed then
self.callbacks.pressed( self )
end
end
@@ -644,7 +644,7 @@ function ComboBox:draw()
if self._gui:clickedInBounds( self.bounds ) then
self.active = active
- if self.callbacks.select ~= nil then
+ if self.callbacks.select then
self.callbacks.select( self )
end
end
@@ -711,10 +711,14 @@ function DropdownBox:draw()
if result == 1 then
self.editMode = not self.editMode
+ self:updateEditModeBounds()
- if not self.editMode and self.callbacks.select ~= nil then
+ if not self.editMode and self.callbacks.select then
self.callbacks.select( self )
end
+ if self.callbacks.pressed then
+ self.callbacks.pressed( self )
+ end
end
end
@@ -775,7 +779,7 @@ function Spinner:draw()
if self._gui:clickedInBounds( self.bounds ) then
self.value = value
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -842,7 +846,7 @@ function ValueBox:draw()
self._gui:editMode( self )
self.editMode = not self.editMode
end
- if self.value ~= oldValue and self.callbacks.edit ~= nil then
+ if self.value ~= oldValue and self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -860,13 +864,13 @@ end
local TextBox = {}
TextBox.__index = TextBox
-function TextBox:new( bounds, text, textSize, editMode, callbacks, styles, tooltip )
+function TextBox:new( bounds, text, bufferSize, editMode, callbacks, styles, tooltip )
local object = setmetatable( {}, self )
object._gui = nil
object.bounds = bounds:clone()
object.text = text
- object.textSize = textSize
+ object.bufferSize = bufferSize
object.editMode = editMode
object.callbacks = callbacks -- edit.
-- Option for preventing text to be drawn outside bounds.
@@ -890,7 +894,7 @@ function TextBox:draw()
RL.BeginScissorMode( self.bounds )
end
- result, self.text = RL.GuiTextBox( self.bounds, self.text, self.textSize, self.editMode )
+ result, self.text = RL.GuiTextBox( self.bounds, self.text, self.bufferSize, self.editMode )
if self.scissorMode then
RL.EndScissorMode()
@@ -899,7 +903,7 @@ function TextBox:draw()
self._gui:editMode( self )
self.editMode = not self.editMode
- if not self.editMode and self.callbacks.edit ~= nil then
+ if not self.editMode and self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -957,7 +961,7 @@ function Slider:draw()
self._gui:checkScrolling()
self.value = value
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1018,7 +1022,7 @@ function SliderBar:draw()
self._gui:checkScrolling()
self.value = value
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1078,7 +1082,7 @@ function ProgressBar:draw()
if self._gui:clickedInBounds( self.bounds ) then
self.value = value
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1193,7 +1197,7 @@ function Grid:draw()
local result, mouseCell = RL.GuiGrid( self.bounds, self.text, self.spacing, self.subdivs, self.mouseCell )
self.mouseCell:setT( mouseCell )
- if 0 < result and self.callbacks.cellChange ~= nil then
+ if 0 < result and self.callbacks.cellChange then
self.callbacks.cellChange( self )
end
end
@@ -1247,7 +1251,7 @@ function ListView:draw()
if self.scrollIndex ~= oldScrollIndex then
self._gui:checkScrolling()
end
- if 0 < result and self.callbacks.select ~= nil then
+ if 0 < result and self.callbacks.select then
self.callbacks.select( self )
end
end
@@ -1298,7 +1302,7 @@ function ListViewEx:draw()
if self.scrollIndex ~= oldScrollIndex then
self._gui:checkScrolling()
end
- if 0 < result and self.callbacks.select ~= nil then
+ if 0 < result and self.callbacks.select then
self.callbacks.select( self )
end
end
@@ -1345,7 +1349,7 @@ end
function MessageBox:draw()
self.buttonIndex = RL.GuiMessageBox( self.bounds, self.title, self.message, self.buttons )
- if 0 <= self.buttonIndex and self.callbacks.pressed ~= nil and self._gui:clickedInBounds( self.bounds ) then
+ if 0 <= self.buttonIndex and self.callbacks.pressed and self._gui:clickedInBounds( self.bounds ) then
self.callbacks.pressed( self )
end
end
@@ -1395,7 +1399,7 @@ end
function TextInputBox:draw()
self.buttonIndex, self.text, self.secretViewActive = RL.GuiTextInputBox( self.bounds, self.title, self.message, self.buttons, self.text, self.textMaxSize, self.secretViewActive )
- if 0 <= self.buttonIndex and self.callbacks.pressed ~= nil and self._gui:clickedInBounds( self.bounds ) then
+ if 0 <= self.buttonIndex and self.callbacks.pressed and self._gui:clickedInBounds( self.bounds ) then
self.callbacks.pressed( self )
end
end
@@ -1455,7 +1459,7 @@ function ColorPicker:draw()
end
self._gui:checkScrolling()
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1501,7 +1505,7 @@ function ColorPanel:draw()
if self._gui:clickedInBounds( self.bounds ) then
self.color:setT( color )
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1548,7 +1552,7 @@ function ColorBarAlpha:draw()
self._gui:checkScrolling()
self.alpha = alpha
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1595,7 +1599,7 @@ function ColorBarHue:draw()
self._gui:checkScrolling()
self.value = value
- if self.callbacks.edit ~= nil then
+ if self.callbacks.edit then
self.callbacks.edit( self )
end
end
@@ -1644,7 +1648,7 @@ function GuiScrollBar:draw()
self._gui:checkScrolling()
self.value = value
- if self.callbacks.scroll ~= nil then
+ if self.callbacks.scroll then
self.callbacks.scroll( self )
end
end
@@ -1767,7 +1771,7 @@ function Raygui:drag( control )
and mouseOver and mousePos.y - control.bounds.y <= self.RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT then
self.grabPos = mousePos - Vector2:temp( control.bounds.x, control.bounds.y )
- if control.callbacks.grab ~= nil then
+ if control.callbacks.grab then
control.callbacks.grab( control )
end
self.dragging = control
@@ -1779,7 +1783,7 @@ function Raygui:drag( control )
end
control:setPosition( mousePos - self.grabPos )
- if control.callbacks.drag ~= nil then
+ if control.callbacks.drag then
control.callbacks.drag( control )
end
end
@@ -1917,6 +1921,12 @@ function Raygui:remove( control )
end
end
+function Raygui:clear()
+ for _, control in ipairs( self.controls ) do
+ table.remove( control )
+ end
+end
+
function Raygui:editMode( control )
if self.textEditControl ~= nil and not control.editMode then
self.textEditControl.editMode = false
@@ -2163,14 +2173,14 @@ end
---@param bounds Rectangle
---@param text string
----@param textSize integer
+---@param bufferSize integer
---@param editMode boolean
---@param callbacks table edit.
---@param styles table|nil
---@param tooltip string|nil
---@return table TextBox
-function Raygui:TextBox( bounds, text, textSize, editMode, callbacks, styles, tooltip )
- return self:addControl( TextBox:new( bounds, text, textSize, editMode, callbacks, styles, tooltip ) )
+function Raygui:TextBox( bounds, text, bufferSize, editMode, callbacks, styles, tooltip )
+ return self:addControl( TextBox:new( bounds, text, bufferSize, editMode, callbacks, styles, tooltip ) )
end
---@param bounds Rectangle