Stawlie0

Untitled

Oct 10th, 2023
644
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.86 KB | None | 0 0
  1. require("package").loaded["doublebuffer"] = nil
  2. local doubleBufferLib = require("doublebuffer")
  3.  
  4. --Очистка экрана
  5. doubleBufferLib.clearScreen()
  6.  
  7. require("package").loaded["label"] = nil
  8. local Label = require("label")
  9. --Библиотека
  10. local controlLib = {}
  11. --Список всех созданных элементов управления
  12. local controlList = {}
  13. --Буфер для отрисовки
  14. local drawBuffer = doubleBufferLib.getEmptyBuffer()
  15.  
  16. --Создание Label
  17. controlLib.createLabel = function(style)
  18.     local control = Label:new(style)
  19.     --Добавление в список
  20.     table.insert(controlList, control)
  21.     --Вовзращает id
  22.     return control.id
  23. end
  24.  
  25. --------------------------------------------
  26. --------------------------------------------
  27. --------------------------------------------
  28. --Добавляет буфер элемента управления в буфер отрисовки
  29. local function addControlInDrawBuffer(control)
  30.     --drawBuffer = doubleBufferLib.getEmptyBuffer()  -- Вместо создания нового буфера каждый раз можно использовать общий буфер drawBuffer
  31.  
  32.     local relativeX, relativeY
  33.     for i = control.y, control.y + control.height - 1 do
  34.         for j = control.x, control.x + control.width - 1 do
  35.             local index = doubleBufferLib.getIndexByCoords(j, i, 3)
  36.             relativeX, relativeY = j - control.x + 1,  i - control.y + 1
  37.             local indexControlBuffer = doubleBufferLib.getIndexByCoords(relativeX, relativeY, 3, control.width)
  38.  
  39.             -- Проверка, чтобы избежать перезаписи существующих пикселей (если нужно)
  40.             --if drawBuffer[index + 1] == nil or drawBuffer[index + 1] == ' ' then
  41.                 drawBuffer[index + 1] = control.drawBuffer[indexControlBuffer + 1]
  42.                 drawBuffer[index + 2] = control.drawBuffer[indexControlBuffer + 2]
  43.                 drawBuffer[index + 3] = control.drawBuffer[indexControlBuffer + 3]
  44.             --end
  45.         end
  46.     end
  47. end
  48. --Отрисовывает controlList
  49. controlLib.drawAll = function()
  50.     if controlList == nil then
  51.         return
  52.     end
  53.     for i = 1, #controlList do
  54.         local control = controlList[i]
  55.         if control.x ~= 0 or control.y ~= 0 then
  56.             addControlInDrawBuffer(control)
  57.         end
  58.     end
  59.     doubleBufferLib.draw(drawBuffer)
  60. end
  61.  
  62. --Обновляет элемент управления
  63. controlLib.updateControl = function(idControl, style)
  64.     if controlList == nil then
  65.         return
  66.     end
  67.     for i = 1, #controlList do
  68.         local control = controlList[i]
  69.         if control.id == idControl then
  70.             controlList[i]:update(style)
  71.             break
  72.         end
  73.     end
  74. end
  75.  
  76. return controlLib
  77.  
Advertisement
Add Comment
Please, Sign In to add comment