Files
Basalt/docs/objects/Object/onDrag.md
2022-08-30 20:49:25 +02:00

1.8 KiB

onDrag

onDrag(self, event, button, x, y, xOffset, yOffset)
The computercraft event which triggers this method is mouse_drag.

This is a example on how you would create a movable button:

local basalt = require("basalt")

local main = basalt.createFrame()
local button = main:addButton()
  :setPosition(3,3)
  :setSize(12,3)
  :setText("Click")

function buttonOnDrag(self, button, x, y, xOffset, yOffset)
    self:setPosition(-xOffset, -yOffset, true) -- we need to reverse the offset and true means to add the offset instead of changing it.
end
button:onDrag(buttonOnDrag)

basalt.autoUpdate()

Another example on how you could change the frame's offset by dragging around.

local basalt = require("basalt")

local main = basalt.createFrame()
    :onDrag(function(self, button, x, y, xOffset, yOffset)
      local xO, yO = self:getOffset()
      self:setOffset(xO-xOffset, yO-yOffset, true) -- we need to reverse the offset and true means to add the offset instead of changing it.
    end)

local button = main:addButton()
  :setPosition(3,3)
  :setSize(12,3)
  :setText("Click")
local button2 = main:addButton()
  :setPosition(16,3)
  :setSize(12,3)
  :setText("Click")

basalt.autoUpdate()

Also very interesting is a button where you are able to resize the frame just by dragging the button.

local basalt = require("basalt")

local main = basalt.createFrame()

local sub = main:addFrame():setSize(30,12):setMovable()
sub:addLabel():setText("Example Frame"):setSize("parent.w", 1):setBackground(colors.black):setForeground(colors.lightGray)

local dragButton = sub:addButton()
  :setAnchor("bottomRight")
  :setPosition(1,1)
  :setSize(1,1)
  :setText("/")
  :onDrag(function(self, button, x, y, xOffset, yOffset)
	  sub:setSize(-xOffset, -yOffset, true)
  end)

basalt.autoUpdate()