diff options
| author | jussi | 2024-07-16 21:52:30 +0300 |
|---|---|---|
| committer | jussi | 2024-07-16 21:52:30 +0300 |
| commit | 9dceeb8c058267e04bf551db7a9659e3ba5bdab3 (patch) | |
| tree | e642e0bae55536045013d1ce8477b54706cde38a /examples/raygui_extensions/tree_view.lua | |
| parent | f64b17ec71dea4ecae4d19ce75871331909a3881 (diff) | |
| download | reilua-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/raygui_extensions/tree_view.lua')
| -rw-r--r-- | examples/raygui_extensions/tree_view.lua | 87 |
1 files changed, 40 insertions, 47 deletions
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 |
