Koteyk0o 13 Опубликовано: 17 ноября, 2017 Спасибо огромное, лучшая gui либа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
rrr_game 0 Опубликовано: 31 декабря, 2017 (изменено) Хорошая либа. Удобная в использовании, красивая и шустрая. У меня тут есть вопрос. Извиняюсь, если он туп... Первое: можно ли поменять цвет элементов контекстного меню? Прозрачность или бекграунд, например. А, и еще проблема есть. При нажатии на кнопку пропадают все объекты из контейнера(он дочерний у основного). Баг или фича?) Изменено 31 декабря, 2017 пользователем rrr_game Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 31 декабря, 2017 (изменено) Первое: можно ли поменять цвет элементов контекстного меню? Можно, просто фича не задокументирована. Слишком много таких мелочей имеется, чтобы прописывать их в доке для каждого из объектов. Контекстное меню наследуется от dropDownMenu, включая таблицу цветов colors. Ее структура выглядит следующим образом: Поэтому все, что тебе требуется - это создать объект меню, изменить цвета по своему усмотрению и вызвать привычный метод menu:show(). К примеру, вот так можно создать непрозрачную серенькую менюшку: local buffer = require("doubleBuffering") local GUI = require("GUI") ------------------------------------------------------------------------------------------ local contextMenu = GUI.contextMenu(2, 2) contextMenu:addItem("New") contextMenu:addItem("Open") contextMenu:addSeparator() contextMenu:addItem("Save", true) contextMenu:addItem("Save as") contextMenu:addSeparator() contextMenu:addItem("Close") contextMenu.colors.default.background = 0x444444 contextMenu.colors.default.text = 0xFFFFFF contextMenu.colors.separator = 0x999999 contextMenu.colors.transparency = nil ------------------------------------------------------------------------------------------ buffer.clear(0x2D2D2D) buffer.draw(true) contextMenu:show() В результате получится что-то подобное: При нажатии на кнопку пропадают все объекты из контейнера(он дочерний у основного) Конкретизируй с примером кода, пожалуйста. Разумеется, это баг, который нужно срочно фиксить (при условии, что ты сам не делаешь что-то некорректно, что более вероятно). В этом скрипте все работает адекватно: local buffer = require("doubleBuffering") local GUI = require("GUI") ------------------------------------------------------------------ local mainContainer = GUI.fullScreenContainer() mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D)) mainContainer:addChild(GUI.button(1, 1, 12, 3, 0x008800, 0xFFFFFF, 0x440000, 0xFFFFFF, "Кнопка 1")) local secondContainer = mainContainer:addChild(GUI.container(4, 3, 30, 10)) secondContainer:addChild(GUI.panel(1, 1, secondContainer.width, secondContainer.height, 0xDDDDDD)) secondContainer:addChild(GUI.button(3, 2, 12, 3, 0x880000, 0xFFFFFF, 0x440000, 0xFFFFFF, "Кнопка 2")) ------------------------------------------------------------------ mainContainer:draw() buffer.draw(true) mainContainer:startEventHandling() Изменено 31 декабря, 2017 пользователем ECS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
rrr_game 0 Опубликовано: 1 января, 2018 Блин, во я тупой ) Проблема была в том, что я добавил второй контейнер сразу же после создания первого. Переместил его на другое место и все заработало. Отдельное спасибо за объяснение и примеры кода! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 3 января, 2018 Либа обновлена. По большей части изменения направлены на ускорение отрисовки графоуни и обработки событий, в результате чего местный FPS в прожорливом софте значительно повысился. Убрана зависимость от библиотеки palette, ее функционал включен в GUI. Ну, хоть на один файл меньше докачивать, ага. Но есть и визуальные плюхи: для кнопок добавлена поддержка плавного цветового перехода при нажатии, а также возможность отключения анимаций по желанию. Помимо этого у них появился режим "переключателя", при котором кнопка не отжимается автоматически: 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Koteyk0o 13 Опубликовано: 10 января, 2018 (изменено) У изображений функция .onTouch работает? Код radioLayout:addChild(GUI.image(55, 19, image.load('/addfm.pic'))).onTouch = function() GUI.error('test') end При нажатии на изображение ничего не происходит, совсем Изменено 10 января, 2018 пользователем Koteyk0o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 11 января, 2018 У изображений функция .onTouch работает? Нет. Любые функции по типу onTouch/onStateChanged/onKeyDown создавались у определенной группы объектов (кнопки, слайдеры) исключительно для удобства их использования. По сути они являются следствием назначения объектам соответствующего обработчика событий и вызова этих методов в обработчике. Если вкратце, то у кнопки обоаботчик выглядит следующим образом: button.eventHandler = function(mainContainer, button, eventData) if eventData[1] == "touch" then -- Тут кнопочка визуально "нажимается" ... -- Если у кнопки создавался метод .onTouch, то он вызывается if button.onTouch then button.onTouch() end end end Аналогичную фишечку ты можешь легко провернуть с любым объектом, включая image. Пили eventHandler, короче. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Laine_prikol 48 Опубликовано: 21 января, 2018 Крутак, портанул бы на dll и OpenGL/Direct3D рендер, вообще бомба была-бы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 21 января, 2018 Крутак, портанул бы на dll и OpenGL/Direct3D рендер, вообще бомба была-бы! Это тя куда-то не туда понесло однако. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 22 января, 2018 Крутак, портанул бы на dll и OpenGL/Direct3D рендер, вообще бомба была-бы! Простовата либа для десктопа, да и более "потных" существующих аналогов пруд пруди: тут тебе и QT, и JFX/Swing, и WPF/.NET, и ваще, и ваще 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nifon 1 Опубликовано: 23 января, 2018 Изучаю вашу библиотечку, помогите решить проблему. Кнопкой вызывается "попап" с кнопкой для его закрытия. По нажатию на выход попап не удаляется с поля полностью, а отходит как бы на задний план под все слои. как полностью удалять объекты? notAnimatedButton20 = windowButtons:addChild(GUI.button(3, 22, 18, 1, rgb2hex(224,80,226), rgb2hex(0,0,0), 0x880000, 0xFFFFFF, "Поиск скрытых")) notAnimatedButton20.animated = false notAnimatedButton20.switchMode = true notAnimatedButton20.onTouch = function() local container = mainContainer:addChild(GUI.container(1, 1, mainContainer.width, mainContainer.height)) local backend = container:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, rgb2hex(0,0,0))) local popupContainer = container:addChild(GUI.container(math.ceil((mainContainer.width/2)-((mainContainer.width/2)/2)), math.ceil((mainContainer.height/2)-((mainContainer.height/2)/2)), mainContainer.width/2, mainContainer.height/2)) local popup = popupContainer:addChild(GUI.panel(1, 1, popupContainer.width, popupContainer.height, rgb2hex(255,255,255))) local buttonExit = popupContainer:addChild(GUI.button(1, 1, 18, 1, rgb2hex(224,80,226), rgb2hex(0,0,0), 0x880000, 0xFFFFFF, "выход")) buttonExit.onTouch = function() container:delete() mainContainer:draw() buffer.draw(true) end mainContainer:draw() buffer.draw(true) end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 23 января, 2018 По нажатию на выход попап не удаляется с поля полностью, а отходит как бы на задний план под все слои. как полностью удалять объекты? Не понял, что значит "отходит как бы на задний план". При вызове :delete() элемент полностью удаляется из своего родительского контейнера, и больше не отображается. Если этот объект более нигде не используется, он будет подтерт сборщиком мусора. В описанном же тобой примере объект, содержащийся в переменной container, хоть и удаляется, однако продолжает существовать в своей области видимости до конца работы программы, и если хочешь его удалить - присвой переменной значение nil. Ты это имел в виду? Полное удаление из оперативной памяти? И еще один оч оч важный момент: форсированная отрисовка содержимого буфера через с аргументом true нужна лишь в тех случаях, когда на экране отрисовано нечто средствами прямого обращения к GPU, т.е. не учтенное в буфере. К примеру, если ты запускаешь софтину, работающую с буфером, напрямую из терминала OpenOS (работающего на "чистой" GPU), то будет разумно разово отрисовать содержимое буфера, чтобы не упустить некоторые мелкие детали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nifon 1 Опубликовано: 24 января, 2018 Понял, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
whiskas 144 Опубликовано: 28 января, 2018 (изменено) не могу понять как сделать 2 разних контейнера на весь екран и кнопкой в одном контейнере активировать второй Изменено 28 января, 2018 пользователем whiskas Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 28 января, 2018 не могу понять как сделать 2 разних контейнера на весь екран и кнопкой в одном контейнере активировать второй local GUI = require("GUI") local buffer = require("doubleBuffering") ----------------------------------------------------- -- Создаем главный полноэкранный контейнер для обработки событий и добавляем в него фоновую панель local mainContainer = GUI.fullScreenContainer() mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D)) -- Добавляем в главный контейнер еще один контейнер, будем именовать его "первым". Добавляем в первый контейнер кнопку, позволяющую переключиться на второй контейнер local container1 = mainContainer:addChild(GUI.container(1, 1, mainContainer.width, mainContainer.height)) local button1 = container1:addChild(GUI.button(3, 2, 30, 3, 0xFFFFFF, 0x0, 0xAAAAAA, 0x0, "Переключиться на 2")) -- Аналогично добавляем второй контейнер, по умолчанию он будет скрыт local container2 = mainContainer:addChild(GUI.container(1, 1, mainContainer.width, mainContainer.height)) local button2 = container2:addChild(GUI.button(3, 2, 30, 3, 0xFFFFFF, 0x0, 0xAAAAAA, 0x0, "Переключиться на 1")) container2.hidden = true -- Назначаем кнопкам функцию, переключающую скрытость контейнеров button1.onTouch = function() container1.hidden, container2.hidden = not container1.hidden, not container2.hidden mainContainer:draw() buffer.draw() end button2.onTouch = button1.onTouch ----------------------------------------------------- mainContainer:draw() buffer.draw(true) mainContainer:startEventHandling() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
whiskas 144 Опубликовано: 28 января, 2018 local GUI = require("GUI") local buffer = require("doubleBuffering") ----------------------------------------------------- -- Создаем главный полноэкранный контейнер для обработки событий и добавляем в него фоновую панель local mainContainer = GUI.fullScreenContainer() mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D)) -- Добавляем в главный контейнер еще один контейнер, будем именовать его "первым". Добавляем в первый контейнер кнопку, позволяющую переключиться на второй контейнер local container1 = mainContainer:addChild(GUI.container(1, 1, mainContainer.width, mainContainer.height)) local button1 = container1:addChild(GUI.button(3, 2, 30, 3, 0xFFFFFF, 0x0, 0xAAAAAA, 0x0, "Переключиться на 2")) -- Аналогично добавляем второй контейнер, по умолчанию он будет скрыт local container2 = mainContainer:addChild(GUI.container(1, 1, mainContainer.width, mainContainer.height)) local button2 = container2:addChild(GUI.button(3, 2, 30, 3, 0xFFFFFF, 0x0, 0xAAAAAA, 0x0, "Переключиться на 1")) container2.hidden = true -- Назначаем кнопкам функцию, переключающую скрытость контейнеров button1.onTouch = function() container1.hidden, container2.hidden = not container1.hidden, not container2.hidden mainContainer:draw() buffer.draw() end button2.onTouch = button1.onTouch ----------------------------------------------------- mainContainer:draw() buffer.draw(true) mainContainer:startEventHandling() спс а ник того кто нажал как получить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
whiskas 144 Опубликовано: 28 января, 2018 уже нашел) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Koteyk0o 13 Опубликовано: 9 февраля, 2018 (изменено) Никаких улучшений графика не планируется? Чтобы поддерживал отрицательные и положительные значения одновременно, типо поделить ось Y на 2 половины, или динамическое обновление графика по времени. И еще, как можно заставить график обновляться динамически грубо говоря. У меня просто по сети приходят значения, которые должны быть в графике, а получается график обновляется только при обновлении страницы с графиком Изменено 9 февраля, 2018 пользователем Koteyk0o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 9 февраля, 2018 (изменено) Никаких улучшений графика не планируется? Не-а, модуль графика писал не я, а у автора никаких иных пожеланий к нему нет. Если напишешь более функциональный вариант - кидай пулл реквест на гит, буду рад смержить. К слову, хоть оси статично расположены по левому и нижнему краям объекта, отрицательные значения он вполне поддерживает: А что касается обновления - объект графика имеет таблицу values, в которую ты можешь в реальном времени вставлять необходимые значения X и Y, а после всех манипуляций вызывать методы mainContainer:draw(); buffer.draw() для отображения результата на экране. То бишь, получил по сети нужную инфу - закинул ее в таблицу графика - отрисовал. Разумеется, библиотека никакой отсебятины делать не станет: когда ты ей скажешь перерисовать графон, тогда он и перерисуется, в этом ее фишечка. Изменено 9 февраля, 2018 пользователем ECS 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Koteyk0o 13 Опубликовано: 23 марта, 2018 (изменено) Идея Сделать перенос текста в виджете Label/Text по превышению кол-во символов по ширине То-есть если ширина виджета 50 пикселей, и текст не помещается в первую строку то текст начинает переносится Хотя может конечно я не знаю, может это реализовано, но в документации ничего не нашел TextBox не совсем подходит под это, ибо допустим если надо сделать описание какой-то кнопки под этой кнопкой, то приходится лепить несколько лейблов ибо текст просто не помещается Изменено 23 марта, 2018 пользователем Koteyk0o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах