Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт мар 24, 2017 5:07 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 81 сообщение ]  На страницу Пред. 1 2 3 4 5 6 След.
Автор Сообщение
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 11:36 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
В качестве разминки для ума решил довести порт до конца. Уже умею получать рабочую библиотеку, которая генерирует битмапы, но еще не очень работает корректное масштабирование. Размер библиотеки получился меньше, чем box_lib.
В общем, править баги надо много и долго ещё. :)
Если кто-то желает помочь - пишите в ЛС, с удовольствием отправлю исходники и расскажу, как компилировать. Если никто не желает - займусь вылавливанием багов когда-нибудь в другой раз.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 1:36 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
SoUrcerer
Желание есть, а времени мало.
Напиши что к чему, попробую прикрутить к плееру.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 2:00 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Не, пока что такое еще не прикручивается. :(


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 2:43 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Поправил баги, добавил возможность получения 8-битной маски и вывода цветного текста на битмап. Добавлю функции вывода по координатам и подсчета размера выводимой строки - и тогда можно будет пользоваться.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 2:50 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
SoUrcerer
Так со статической линковкой ?


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 4:24 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
COFF-библиотека, обычная для Колибри...


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 4:59 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
SoUrcerer
Ну они и статически линкуются при желании


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 5:10 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Так статически линковать уже больше года можно. И freetype, и freetype2, и эту штуку - прям сразу так бац, и линковать.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 5:12 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Freetype толстый. Хотя для плеера это не критично.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Пн июн 18, 2012 5:18 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Ну, эта штука - stb_truetype.h - просто подключается как один заголовочный файл, там 500 строк комментов, около 500 строк демок, включенных как if 0 ... end if, и остальное - код для файлов. Нужно загрузить файл ttf в переменную, затем инициализировать движок одной командой, получить высоту символа и вывести его. И так для всей строки.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Ср июн 20, 2012 11:02 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Вложение:
tt_lib.7z [219.79 КБ]
88 скачиваний


Альфа. Баги нужно чистить и чистить.

Инструкция:
распаковать куда-нибудь. К файлу tttest рядом положить любой ttf-шрифт, обозвав его deja.ttf. Библиотеку truetype.obj скопировать в /rd/1/lib. Запускать tttest. Растянуть окошко, увидеть надпись.

Почему оно так глючит?
Не знаю, пока что разбираться нет сил.

А чего truetype.obj такой большой? Потому что в библиотеку вкомпилирован шрифт DejaVu Sans.

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

Как эту дрянь скомпилировать? Для компилирования библиотеки, нужно поместить stb.h, font_droid.h и lib.c в одну папку. Затем компилятором, способным генерировать COFF, получить обычный o-файл. Что-то вроде
i586-mingw32msvc-gcc -c lib.c -o lib.o -O2
Библиотека готова, можно ее переименовывать и копировать на rd, чтобы проверять.

Компиляция тестового файла не менее тривиальна. Требуется menuetlibc, настроенные переменные окружения (MENUETDEV то есть), и всё. Компилируется командой
make -f make

Какие функции поддерживаются?
int (* __stdcall truetype)(char *text, char *buffer, char *screen, int width, int height);
int (* __stdcall get_width)(char *text, char *buffer, int height);
int (* __stdcall get_length)(char *text, char *buffer, int height, int max_len);
int (* __stdcall text_out)(char *text, char *buffer, int height, int color, int x, int y);

Здесь:
buffer - это указатель на массив, содержащий в себе содержимое ttf-шрифта,
text - указатель на текст, который нас интересует.
Если buffer==-1, то используется шрифт, вкомпилированный в библиотеку (стандартный).

truetype выводит 8-битную маску прозрачности текста в screen (переменную нужно заранее определить). Ширина и высота области передаются параметрами width и height, при этом высота текста будет подогнана под height.

get_width возвращает длину текста в пикселах для заданной высоты. То есть, если мы хотим узнать, какой буфер нам нужен для строки "АБВГД" высотой 200 пикселов, то мы должны вызвать эту функцию.

get_length возвращает количество символов, которые могут быть выведены данным шрифтом данной высоты при условии, что длина текста в пикселах не должна быть более max_len. То есть, у нас есть строка "АБВГД", но мы не знаем, поместится ли эта строка целиком в 100 пикселов, или нет. Мы должны вызвать get_length, и убедиться, что возвращенное значение равно длине строки. Эта функция может быть нужна для вывода многострочных и длинных текстов.

text_out выводит строку символов на экран. color - это цвет в формате 0x00RRGGBB, x и y - координаты относительно окна.


Вложения:
font_h.7z [98.95 КБ]
66 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Ср июн 20, 2012 12:29 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Нашел и исправил. Сейчас перевыложу.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Ср июн 20, 2012 12:47 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
:mrgreen: такие вот дела.


Вложения:
Screenshot-90.png
Screenshot-90.png [ 23.89 КБ | 1752 просмотра ]
tt_lib.7z [220.74 КБ]
72 скачивания
Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Ср июн 20, 2012 2:01 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Забыл сказать, что исправленная версия демки требует наличия шрифта 5.ttf в той же папке.


Вернуться к началу
 Заголовок сообщения: Re: TrueType
СообщениеДобавлено: Ср июн 20, 2012 2:38 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Судя по всему, ширина строк определяется не всегда корректно. Еще почему-то иногда падает. Надо разбираться.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 81 сообщение ]  На страницу Пред. 1 2 3 4 5 6 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB