LINUX.ORG.RU

Простой пример работы с Nuklear GUI через буфер памяти

 , ,


0

1

Есть такая вот библиотека Nuklear (https://github.com/vurtun/nuklear). Если бы не ограничения платформы (UNIX-подобная, но не Linux), взял бы что покруче - прежде всего Qt или libui. Но вот судьба навела меня на Nuklear. Стал разбираться:

Есть простой пример. Первая же функция и затык:

nk_init_fixed(&ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &font);
Библиотека поддерживает встроенный некий дефолтный шрифт, а оно с какого-то перепуга требует некий font. Поставляемые примеры все как один не проясняют работу с этой функцией, которая позволяет рисоваться в области памяти. Пример тупо нет, откуда брать font не ясно - он будто из воздуха там возникает.

Есть NK_INCLUDE_DEFAULT_FONT Defining this adds the default font: ProggyClean.ttf into this library which can be loaded into a font atlas and allows using this library without having a truetype font. Но это не устраняет хотение font-а функцией nk_init_fixed.

Это скорее не вопрос - поделитесь примерами советами как этот мопед завести? Если сам разберусь раньше - конечно же напишу решение тут.

Мимокрокодил, но - пробовал туда NULL вместо фонта запихать?

pon4ik ★★★★★
()
Ответ на: комментарий от RazrFalcon

Это вижу, но скажу что документация там не актуальная, не полна, умалчиваются необходимые заголовочные файлы и много других проблем.

Самые интересный вариант - всё из памяти, шрифт встроенный, вроде как для МК (для Embedded). И вот такой то демки как раз нет, а всякий OpenGL/X11/Fb шлак - пожалуйста, такие демки собираются и работают.

Пока делаю как могу, разбираюсь понемногу, потом выложу свой пример как я внутри виджета Qt это всё отрисовал, скорее всего сделаю либо командами, либо тупо буду буфер кадра через QImage вываливать на виджет.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

В общем, сделал некое рабочее тестовое приложение, которое правда пока чисто программно дергается и эмулирует несколько нажатий мышки. Сейчас хочу переделать в демонстрационный пример, который может быть полезен кому-то еще, где всё рисуется внутри Qt-шного виджета QPainter-ом.

Есть окошко, оно открывается. Как только я пытаюсь в хедер Qt-виджета засунуть хедер Nuklear (при том что есть guard-ы), сразу сыпется тонна «nuklear.h:6104: ошибка: multiple definition of `nk_get_null_rect'» и так еще сотня подобных.

Что я делаю не так? Понятно, что Nuklear подразумевается что будет засунуто просто какой-то главный исходник, например main.cpp. Но тут же мне надо как-то засунуть в класс, в поля private. В любом случае, нужно подключить к другому header-у.

Как быть? Объявить эти несколько нужных структур как forward declaration а сам Nuklear включать уже в cpp-файле имплементации?

#ifndef NK_GUI
#define NK_GUI
#define NK_ZERO_COMMAND_MEMORY
#define NK_INCLUDE_DEFAULT_ALLOCATOR
#define NK_INCLUDE_DEFAULT_FONT
#define NK_INCLUDE_FONT_BAKING
#define NK_IMPLEMENTATION
#include <nuklear.h>
#endif // NK_GUI
I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Немного не понял вопрос, текст оно умеет, готовит шрифт или берет готовый. Это же полноценный GUI-автомат. Все нажатия, лэйауты прочие вкусняки, включая скроллинг - всё поддерживает. То что я сделал на Qt5+QPainter так это чисто из удобства освоения, оно не завязано ни на какую графическую подсистему или библиотеку для отрисовки. Хоть самому можно пиксели в памяти заполнять, оно просто руководит этим процессом. Занятная хрень.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Хоть самому можно пиксели в памяти заполнять,

Ух ты. Кажись то, что я искал для тачскрина. Много зависимостей тянет? Хотя ладно, сам поковыряюсь

seryoga
()
Ответ на: комментарий от RazrFalcon

А ещё Qt это жирнющий монстр, который не всегда нужен для мелкой поделки. Да и для крупной иногда даже.

anonymous
()
Ответ на: комментарий от RazrFalcon

Чего ты ждешь? объяснения очевидной вещи, что нюклир это мелкая либа, которая встраивается везде, собирается за секунды и биндинги к ней накидываются на коленке, весит копейки, а Qt это жирный фреймворк на крестах, который собрать под что-то отличное от «дефолт убунты» или оффтопика это пляски с бубном и весит оно при этом сотни килобайт?

Ты не понимаешь, что у них задачи разные?

anonymous
()
Ответ на: комментарий от RazrFalcon

Ну так это тебе видимо не понятно. Тыж тут то с Qt, как писаной торбой носишься.

Это всё и в Qt можно.

anonymous
()
Ответ на: комментарий от RazrFalcon

пойдет даже для промышленного ембедеда. Например для управления промышленным роботом.

anonymous
()
Ответ на: комментарий от RazrFalcon

Хорошо вы побеседовали :)

Этот Nuklear для всего того, где Qt либо не поддерживается, либо не влезает. Так то я применяю максимально Qt5 где только можно.

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.