LINUX.ORG.RU

Сообщения freecoder

 

SVG-подобный GUI на Rust: как правильно сделать?

Форум — Development

Есть у меня небольшое хобби - раз в полгода пытаться писать 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.

 , ,

freecoder ()

RSS подписка на новые темы