Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require("package").loaded["doublebuffer"] = nil
- local doubleBufferLib = require("doublebuffer")
- --Очистка экрана
- doubleBufferLib.clearScreen()
- require("package").loaded["label"] = nil
- local Label = require("label")
- --Библиотека
- local controlLib = {}
- --Список всех созданных элементов управления
- local controlList = {}
- --Буфер для отрисовки
- local drawBuffer = doubleBufferLib.getEmptyBuffer()
- --Создание Label
- controlLib.createLabel = function(style)
- local control = Label:new(style)
- --Добавление в список
- table.insert(controlList, control)
- --Вовзращает id
- return control.id
- end
- --------------------------------------------
- --------------------------------------------
- --------------------------------------------
- --Добавляет буфер элемента управления в буфер отрисовки
- local function addControlInDrawBuffer(control)
- --drawBuffer = doubleBufferLib.getEmptyBuffer() -- Вместо создания нового буфера каждый раз можно использовать общий буфер drawBuffer
- local relativeX, relativeY
- for i = control.y, control.y + control.height - 1 do
- for j = control.x, control.x + control.width - 1 do
- local index = doubleBufferLib.getIndexByCoords(j, i, 3)
- relativeX, relativeY = j - control.x + 1, i - control.y + 1
- local indexControlBuffer = doubleBufferLib.getIndexByCoords(relativeX, relativeY, 3, control.width)
- -- Проверка, чтобы избежать перезаписи существующих пикселей (если нужно)
- --if drawBuffer[index + 1] == nil or drawBuffer[index + 1] == ' ' then
- drawBuffer[index + 1] = control.drawBuffer[indexControlBuffer + 1]
- drawBuffer[index + 2] = control.drawBuffer[indexControlBuffer + 2]
- drawBuffer[index + 3] = control.drawBuffer[indexControlBuffer + 3]
- --end
- end
- end
- end
- --Отрисовывает controlList
- controlLib.drawAll = function()
- if controlList == nil then
- return
- end
- for i = 1, #controlList do
- local control = controlList[i]
- if control.x ~= 0 or control.y ~= 0 then
- addControlInDrawBuffer(control)
- end
- end
- doubleBufferLib.draw(drawBuffer)
- end
- --Обновляет элемент управления
- controlLib.updateControl = function(idControl, style)
- if controlList == nil then
- return
- end
- for i = 1, #controlList do
- local control = controlList[i]
- if control.id == idControl then
- controlList[i]:update(style)
- break
- end
- end
- end
- return controlLib
Advertisement
Add Comment
Please, Sign In to add comment