usage: require("objs")
contains an additional set of objects for the gui library
you can add them to a scene or window using sceneOrWindow:createCustom(x, y, sizeX, sizeY, class, ...):guiobject
the arguments of the objects are passed after the class to the createCustom method

elements:

tabbar:

seekbar methods:

seekbar callbacks:

            --the example was created for a 128x128 screen
local objs = require("objs")

local display = getComponents("display")[1]
display.reset()
display.clearClicks()
display.setClicksAllowed(true)
local rx, ry = display.getWidth(), display.getHeight()

local cameras = getComponents("camera")

local gui = require("gui").new(display)
local styles = require("styles")
local scene = gui:createScene("777777")
scene:setDefaultOffset(0)

local function addWindow(index, posX, posY)
    local window = scene:createWindow(nil, nil, nil, nil, "2d2d2d")
    window:upPanel("058db8", "ffffff", "camera", true)
    window:setDraggable(true)
    window:setSize(rx / 2, ry / 2)
    window:setPosition(posX * (rx / 2), posY * (ry / 2))

    local closeButton = window:panelButton(7, false, "X", "00a2d5", "0054a1", "00c2ff", "0085ff")
    closeButton:attachCallback(function(self, state, inZone)
        if not state and inZone then
            window:destroy()
        end
    end)

    local cameraViewer = window:createCustom(nil, nil, nil, nil, objs.bufferedCamera, cameras[(index % #cameras) + 1].fork(), "drawAdvanced", true)
    cameraViewer:setFov(math.rad(90))
    cameraViewer:setDisabled(true)

    function cameraViewer:onTick()
        cameraViewer:update()
    end
end

for i = 0, 3 do
    addWindow(i, i % 2, math.floor(i / 2))
end

function callback_loop()
    if _endtick then
        display.clear()
        display.flush()
        return
    end

    gui:tick()
    if gui:needFlush() then
        gui:draw()
        display.flush()
    end
end
        
            --the example was created for a 128x128 screen
local objs = require("objs")

local display = getComponent("display")
display.reset()
display.clearClicks()
display.setClicksAllowed(true)
local rx, ry = display.getWidth(), display.getHeight()

local gui = require("gui").new(display)
local scene = gui:createScene("333333")

local offset = 4
local thickness = 16

local seekbar1 = scene:createCustom(offset, offset, rx - (offset * 2), thickness, objs.seekbar, false)
local seekbar2 = scene:createCustom(offset, (offset * 2) + thickness, thickness, ry - thickness - (offset * 3), objs.seekbar, true)

local function onValueChanged(self, value)
    print("value changed: ", self.seekbarNumber, value)
end

seekbar1.onValueChanged = onValueChanged
seekbar2.onValueChanged = onValueChanged
seekbar1.seekbarNumber = 1
seekbar2.seekbarNumber = 2

function callback_loop()
    if _endtick then
        display.clear()
        display.flush()
        return
    end

    gui:tick()
    if gui:needFlush() then
        gui:draw()
        display.flush()
    end
end