Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Apr 21, 2019 3:55 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 81 posts ]  Go to page Previous 1 2 3 4 5 6 Next
Author Message
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 11:36 am 
Offline

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


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 1:36 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
SoUrcerer
Желание есть, а времени мало.
Напиши что к чему, попробую прикрутить к плееру.


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 2:00 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Не, пока что такое еще не прикручивается. :(


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 2:43 pm 
Offline

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


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 2:50 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
SoUrcerer
Так со статической линковкой ?


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 4:24 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
COFF-библиотека, обычная для Колибри...


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 4:59 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
SoUrcerer
Ну они и статически линкуются при желании


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 5:10 pm 
Offline

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


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 5:12 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Freetype толстый. Хотя для плеера это не критично.


Top
   
 Post subject: Re: TrueType
PostPosted: Mon Jun 18, 2012 5:18 pm 
Offline

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


Top
   
 Post subject: Re: TrueType
PostPosted: Wed Jun 20, 2012 11:02 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Attachment:
tt_lib.7z [219.79 KiB]
Downloaded 155 times


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

Инструкция:
распаковать куда-нибудь. К файлу 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 - координаты относительно окна.


Attachments:
font_h.7z [98.95 KiB]
Downloaded 125 times
Top
   
 Post subject: Re: TrueType
PostPosted: Wed Jun 20, 2012 12:29 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Нашел и исправил. Сейчас перевыложу.


Top
   
 Post subject: Re: TrueType
PostPosted: Wed Jun 20, 2012 12:47 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
:mrgreen: такие вот дела.


Attachments:
Screenshot-90.png
Screenshot-90.png [ 23.89 KiB | Viewed 3040 times ]
tt_lib.7z [220.74 KiB]
Downloaded 133 times
Top
   
 Post subject: Re: TrueType
PostPosted: Wed Jun 20, 2012 2:01 pm 
Offline

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


Top
   
 Post subject: Re: TrueType
PostPosted: Wed Jun 20, 2012 2:38 pm 
Offline

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 81 posts ]  Go to page Previous 1 2 3 4 5 6 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited