начнем с того что данная библиотека зависима от моего мода для openOS и поставляется с ним в комплекте:
что поваляет делать данная библиотека:
создавать многосценные приложения
создавать многопоточные приложения средствами библиотеки
библиотека позваляет создавать таймеры слышатели и потоки операясь на главный объект gui или на конкретную сцену билиотека сама закроет все таймеры слушатели и потоки при выходе, таймеры слушатели и потоки созданные на конкретной сцене будут работать только тогда когда она выбранна
удалять элементы и/или сцены
перерисовка ведется автоматически или же самостоятельно, можно перересовать сцену целеком(gui.redraw()) а можно конкретный элемент(obj.draw()) пересовываться элемент будет только если выбрана его сцена
открывать контекстное меню
кастомное разрешения вплоть до отдельных сцен
оптимизация под слабое железо:
я настоятельно рекомендую использовать функцию для выбора цвета в зависимости от выдеокарты (gui.selectColor(main, level2(опционально), level1(опционально(можно использовать boolean))))
библиотка может работать даже на экране первого уровня(да даже на роботе) но для этого придеться использовать демон курсора которого пока что не существует но я его сделаю он должен сообщить библиотеки о своей работе чтобы она позволила открыть программу на мониторе первого уровня
поддерживаемые элементы:
button, имеет 3 режима, кнопка, переключатель, автоотпускаемый переключатель(кнопка реагирующяя на отжатия)
label, думаю тут все понятно
seekBar, может быть не кликабельный, поддерживает прокрутку колесиком мыши
list, может использоваться для отображения строк, позваляет узнать о нажатии строки, обладает отключаемым автоскролом, автоперересовку тоже можно отключить, по умалчанию сам удаляет элементы когда их много чтобы люди с нерабочим колесиком могли увидеть все пункты
в планах:
тягаемые окошки(сделано)
api:
для создания объекта gui необходимо вызвать метод create у библиотеки
все обрашения в библиотеки через одинарную точку
вызвать контекстного мен., gui.context(x, y, tbl) таблица может содержать строки или таблицы такого плана {str, on} если on, false то тогда данный пункт нельзя будет выбрать, вункция вернет значения, str, num или все будет nil если нечего не выбрано
создания сцены gui.createScene(backgroundColor, sizeX, sizeY)
получения api видеокарты gui.gpu
получения выжных значений, gui.screen, gui.keyboard
получения настроик видеокарты, gui.depth, gui.userX, gui.userY, gui.maxX, gui.maxY
отключения звукового соправождения gui.soundOn = false
создания теймеров слушателей потоков createTimer(time, callback) createListen(eventName or nil(all), callback) createThread(func, ...) данные методы необходимо вызывать от имени обекта gui(работа в всем приложении) или же от имени сцены(работа только на ней)
создания объектов на сцене, scene.createButton(x, y, sizeX, sizeY, text, callback, mode, state) createLabel(x, y, sizeX, sizeY, text) createSeekbar(posX, posY, size, text, callback, mode, min, max, value, touch, onlyIntegers) createList(posX, posY, sizeX, sizeY, callback)
настройки объекта button, backColor, foreColor, invertBackColor, invertForeColor
настройки объекта seekBar, backColor, foreColor, scrollCount, scrollWheel(можно ли колесиком крутить(запрет можно использовать например если есть желания переопределить это код(так сделано в list)))
настройки объекта list, backColor, foreColor, autoScroll, autoRedraw(выключите если будет добавлять много элементов за раз а потом лутще включить), autoRemove, maxStrsCount, для изменения настроик seekBar обратитесь к нему как к list.seekBar методы addStr, clear
inputbox создаеться как createInputbox(posX, posY, sizeX, sizeY, text, callback) у него есть настройки viewData(показываеть последний ввод(изначально true))
drawer создаеться createDrawer(posX, posY, drawer) где drawer это функция вызываемыя каждую перересовку отрисовщика в функцию приходит 3 аргумента(gpu(proxy видеокарты), posX, posY(тут нада начать отрисовку размер отрисовываемого изображения выберает сам отрисовши(делайте как хотите)))
и наконецто окошки, их можно таскать(если записать true в userMove) они могут использоваться для груперования элементов создания маленькиз минюшек, как создать окно? вот так createWindow(posX, posY, sizeX, sizeY) как настроить его? вот так: color(вебарает цвет окна изначально nil(нивидимый)) и window.attachObj(позиция иск на окне, тоже но y, и обект который на окно нада поместить)
для перемешения обекстов используйте метод move(работает и с окошками и перетягивает все элементы на них) метод не обновляет картинку по этому вызовите gui.redraw сомастоятельно(для того чтоб снизит нагрузка кода много действий)
если вы хотите временно отключить обект то нада setActive(true/false) не обновляет сцену(для того чтоб снизит нагрузка кода много действий) так что вызовите gui.redraw самастоятельно, setActive прячет обект запрешяя его отрисовку и недает ему реагировать на касания
примеры кода:
https://drive.google.com/file/d/19mpdK9sxy4Yf9AxzdPpy8YkXan7AZU8g/view?usp=sharing (плохой пример, делал чисто для отладки и только для себя, на второй сцене должна midi играть, но для этого ее нада разместить по обсалютному пути пути /mnt/ded/as16.mid(у мена миди на диске ded лежат а у вас пару будет в /usr/midi там midi1.mid и midi2.mid они в комплекте с модом(моим для openOS) идут и вы можете путь на них в примере поменять чтоб все работало как у меня))