LINUX.ORG.RU

[велосипед] Вывод форматированного текста на Canvas

 


0

0

Есть сферический в вакууме Canvas, для которого доступны некоторые команды (рисование примитивов, текста, установка цвета/шрифта). И вот на этом канвасе нужно отобразить RTF (ну не обязательно RTF, просто форматированный текст с табличками, рамочками, картиночками).

Без GTK. Без Qt. Но можно с кусками кода из оных.

В голове мысль примерно такая: разбираем исходную разметку (пусть будет RTF для простоты), вытаскиваем из нее блоки (фиксированного размера для картинок, динамического для текстых блоков), где каждое слово текста - сам по себе еще один блок, вычисляем координаты согласно размеру экрана, делаем переводы строк и т.д... Все это складируем в массивчики вида:

тип_рисования координаты_блока размер_блока чего_рисуем

прямоугольник 0 0 150 15 #00FF00, #FFFFFF, рамочка
текст 0 0 150 15 #0000FF, Hello, world
картинка 75 30 50 50 /logo.tga

(конечно же в бинарном виде)

Индексируем (достаточно линейного индекса, скроллинг будет только вертикальным), а потом это быстро-быстро (ибо ресурсов у меня мало) рисуем на канвасе. Прямо берем данные из массива и транслируем их для выполнения.

Но меня тут смущает большой расход памяти (да, памяти у меня тоже мало).

Может кому-то попадались решения подобной задачи? Хотелось бы посмотреть на красивые решения, а свое допилить ими.

Линукс тут вообще непричем.

Ответ на: комментарий от k_andy

>Это умеет делать pango. Можно порыться в исходниках.

без гтк

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

lester_dev ★★★★★
()

> Может кому-то попадались решения подобной задачи? Хотелось бы посмотреть на красивые решения, а свое допилить ими.

Лет 10-15 назад в среде демомейкеров на PC, Amiga, ZX и прочих C64 были популярными т.н. «электронные журналы». Например: http://zxpress.ru/issue.php?id=86 Вьюверов цветных многошрифтовых текстов с картинками было написано уйма, просто уйма. Каждый чёткий пацан обязан был написать свой вьювер и стрелочный интерфейс (мышиный курсор, типа). Сам грешен, парочку для Спектрума наваял. В принципе, если напрячься, можно нагуглить исходники. Любой современный эмбеддед по кол-ву доступных ресурсов бьёт одной левой пяткой самый мощный PC 95-го года, не говоря уж о ZX/C64.

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

> предварительно отрендерить его целиком в скрытый буфер, а потом выводить видимые части макаронины.

А где я тебе столько памяти найду? Текста может быть мегабайт (благо в ресурсах, а не ОЗУ), а памяти всего 2 метра... Мне на хранение координат то места жалко...

simple_best_world_web_master
() автор топика
Ответ на: комментарий от mv

Ну, для портирования с ZX надо знать его асм, чем я похвастать не могу. Но за направление спасибо, может чего-то на Сях найду, или по крайней мере алгоритм быстрой разбивки.

Вообще, сейчас тоже есть смотрелки вроде Dillo, только функционал у них не выдерживает никакой критики. А жаль.

/me вспомнил красивое cracktro от группы Vendetta, в котором были свои шрифты и плавный (попиксельный) скроллинг в _текстовом_режиме_ экрана. Экран скроллился с характерным ускорением и некоторым эффектом энерции. И никакого фреймбуффера.

simple_best_world_web_master
() автор топика
Ответ на: комментарий от simple_best_world_web_master

Чума! Нашёл свой старый исходник: e-mag, который взялся ваять после перехода на пц =) Венда, ddraw, музЫка, текст с некоторыми примитивами (цвет, шрифт?), скроллер. Картинки не доделал.

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

> Например: http://zxpress.ru/issue.php?id=86

Вот за такие ссылки надо анально карать. Я же теперь неделю оттуда не вылезу! Безмерно благодарен.

Вьюверов цветных многошрифтовых текстов с картинками было написано уйма, просто уйма

Насыпь ссылок на лучшее, надо потешить ностальгические чувства.

simple_best_world_web_master
() автор топика
Ответ на: комментарий от k_andy

>Чё та грепать?! Я pango (pangocairo) использую в проекте на VCL и никаким gdk там не пахнет.

???? хренасе, месье знает толк в извращениях

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

Мальчики, не ссорьтесь, лучше накидайте Ъ-читалок с исходниками. И шобы были няшные лэйауты с картинками, блекджеком и корованами, которых в PangoLayout не обнаружено.

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