И это всё МОЁ

Есть у меня небольшое хобби - раз в полгода пытаться писать GUI на Rust. Вот в этом репозитории провожу эксперименты: https://github.com/exgui/exgui


Запустить примеры можно так:


cargo run -p examples --bin smile
cargo run -p examples --bin clock


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


Так вот, получается, что мне нужна поддержка неких layouts, которые должны единообразно уметь автоматически размещать как графические элементы (круг, прямоугольник, произвольная кривая и т.д.), так и глифы или целые слова текста.


Например, может быть задана следующая структура элементов:


rect()
.width(100)
.height(100)
.child(text("Hello, circle ";))
.child(circle().radius(15))
.child(text("! And welcome!";))
.build()


Необходимо, чтобы layout, который имеется в Rect по-умолчанию, расположил корректным образом свои дочерние элементы внутри прямоугольника, построчно. При этом кругом он должен оперировать как одним целым, а текст воспринимать как набор элементов для размещения - отдельных слов.


Я так понимаю, для этого в рендере мне придется спуститься на уовень глифов, чтобы рассчитать нужные размеры. Отсюда вопрос: как это корректнее всего сделать, какими библиотеками пользоваться?


Вообще, посоветуйте из раст-экосистемы библиотеки, которые могут понадобиться для данной задачи. В качестве рендера пока использую сишный nanovg.









 , ,