Пока Лайси не делается, снова делаю ГУИ-библиотеку. (да, так медленно)
Я её переписал (опять же на C++ кстати, уже почти научился использовать new и delete вместо malloc/calloc и free).
Взялся за реализацию высокоуровневых виджетов, в общем вот кнопка. Эта кнопка может быть одновременно и чекбоксом, и кнопкой со сменяемыми значениями (как в майнкрафте, где выбор между несколькими тайтлами кнопок в некоторых опциях), и просто кнопкой. Она может вызывать коллбек по отпусканию (при этом проверятся, курсор остался на той же кнопке или нет) или при нажатии. Когда курсор попадает на неё, вызывается коллбек FocusIn и делает видимым blink_hover. В данном случае это полупрозрачный белый квадратик. При нажатии рисуется press_blink виджет, это полупрозрачный синий квадратик.
А база, та что всегда видна, состоит из тёмно-бирюзовго квадрата большого размера и дочернего ему светло-бирюзовому квадрату. Ой, то есть прямоугольники, а не квадраты.
Кубик сзади это просто декорация.
[i]Извините, не смог видео отправить, так как эта борда мне не дала![/i]
Когда доделаю Лайси, хотел эту библиотку переписать на Лайси, чтобы мои будущие пользователи Лайси и Я могли сразу юзать ГУИ (хоть её и придётся заново учить, это не Qt и GTK+). Потом сделать биндинг для Си, а из него для остальных ЯП (в частности, питона), но я недавно понял, что мне придётся в сишные хедеры преобразовывать почти все структуры данных Лайси. То есть и вектора из mem, хеш-таблицы и всё-всё-всё, что я там понапишу в первых библиотеках. Это, конечно, можно сделать, но я не думал что будет так сложно, мдех.
Кстати, так как моя ГУИ-либа использует мой графический движок, а у него планируются целых 4 бекенда: opengl, glsl-рейтрейсинг, softrender-рейтрейсинг, софтрендер-растеризатор, то его можно будет использовать хоть для микроконтроллеров и прочего bare metal. Надо будет просто немного повелосипедить с циклом отрисовки и обработки событий, а также вручную генерировать эти самые события.
Что насчёт событий, то в этой ГУИ-библиотеке устройства смогут передавать:
0. Указатели. Вектор "курсоров", которые имеют расположение, N кнопок, возможность нажимать и отжимать кнопки, с разным усилием и поворотом. Как я понимаю, это покрывает и мышки (кроме колёсиков, но они отдельно), и графический планшет со стилусом (усилие нажатия и даже поворот), и сенсорный экран (надо учесть, что курсор как бы пропадает после отжатия).
Нажатие, кстати, может быть двойным, тройным и т.д. Желаемый период между одинарными щелчками настраиваемый.
1. Клавиши. Это клавиатура и подобное. В отличие от указателей, тут доступен только номер клавиши и усилие. Незнаю, стоит ли вводить поворот. Вряд ли кому-то понадобится матрица из энкодеров, чтобы юзать её в качестве нормальной клавы, а вот клавиатуры с определением усилия уже сущетсвуют.
2. Колёса. Колёсики мыши. Имеют номер и флоатское значение поворота. Первое и единственное колёсико на мышке имеет номер 0, но иногда же встречаются мышки и с двумя колёсиками. Одним можно вертикально скроллить, а другим горизонтально., вот оно и будет иметь номер 1.
3. Ввод. Ввод текста, ввода других данных из буфера обмена и всё такое.
4. Драг-н-Дроп. Иконки, файлы и прочее можно графически переносить из одного окна в другое, так пусть будет же в моей ГУИ-либе это из-коробки. Есть проблемка. В SDL2 драг-н-дроп содержит просто путь к файлу, а мой драг-н-дроп должен быть пошире. Им заниматсья я буду потом, может быть.
5. FileDialog. Видел такую библиотеку на гитхабе, называется https://github.com/mlabbe/nativefiledialog NativeFileDialog. Может быть, попробую её и если понравится, то включу в состав моей ГУИ-библиотеки. Я сам не собираюсь писать велосипедный и неудобный встроенный файловый менеджер, пусть пользователи используют нативный!
6. Также совсем недавно вспомнил, что в смартфонах есть такие события/кнопки как ◁, ⃞ и ◯. Если ⃞ это просто "свернуть", то ни ◁, ни ◯ в стандартных ПК-приложениях нет. Пусть будут события навигации туда-сюда и событие вызова меню настроек/контексткого меню. Вот такие высокоуровневые события, да.
Конечно, есть ещё всякие экзотические джойстики и прочая шелуха, но пусть автор ПО сам реализует взаимодействие с ними.