Board.KolibriOS.org
http://board.kolibrios.org/

TrueType
http://board.kolibrios.org/viewtopic.php?f=24&t=2059
Page 5 of 6

Author:  SoUrcerer [ Fri Nov 09, 2012 7:14 pm ]
Post subject:  Re: TrueType

Я тут подумал.Можно же хранить загруженные шрифты в именованных областях памяти.

Author:  SoUrcerer [ Sun Nov 11, 2012 11:24 am ]
Post subject:  Re: TrueType

Увеличил скорость отрисовки путем одноразовой загрузки шрифта в память, для этого добавлена новая функция font_init. Пока что она не грузит дополнительные шрифты, но поправить - дело двух минут. Вместо get_width стоит заглушка, её нужно исправить, но времени на это у меня сейчас нет.
Исправленная версия дает терпимую скорость отрисовки в qemu и абсолютно достаточную для комфортной работы на реальной машине. Если бы рисовалось всё в фреймбуфер перед выводом на экран (чтоб не дергать по сто раз 7ю системную функцию) - скорость была бы отличной и в qemu.

С этим нужно что-то делать.

Attachments:
c.7z [608.25 KiB]
Downloaded 183 times

Author:  GerdtR [ Sun Apr 07, 2013 9:17 pm ]
Post subject:  Re: TrueType

Исходники можно?

Author:  SoUrcerer [ Sun Apr 07, 2013 9:26 pm ]
Post subject:  Re: TrueType

Специально загрузил файл, последний в этой теме. Убедился - исходники из него никуда не делись. Баги тоже :)

Author:  GerdtR [ Sun Apr 07, 2013 9:32 pm ]
Post subject:  Re: TrueType

Так это последние наработки? Тогда всё, вопросов нет, кончились)

Author:  SoUrcerer [ Sun Apr 07, 2013 9:45 pm ]
Post subject:  Re: TrueType

На самом деле, у меня есть версия с нуля - но она пока что только в Linux работает. И её нужно конкретно править.

Author:  GerdtR [ Tue Jul 23, 2013 4:14 am ]
Post subject:  Re: TrueType

Я вот подкорректировал библиотеку для своих нужд. Сделал так, что она выводит Юникод-строки, загружает шрифт из файла (в архив положил один, с ним у меня она нормально работает). Рисует только на заданном фоне. И ещё умеет рисовать в память. Функция text_out_mem рисует строку в память и возвращает указатель на память с рисунком. Формат такой - dword ширина рисунка, BBGGRR...BBGGRR сам рисунок. Высота известна в параметре к функции потому и не добавлял в буфер. После использования его следует освободить ф. 68,13 . Вот. Пока я ей не занимаюсь(сейчас другие задачи, да и текущих функций мне хватает). В архив положил файлик с прототипами функций(вроде там по названиям всё понятно). Кушает много стека, я выделял 10КБ. Да ещё. Если не ошибаюсь, то раньше был баг с определением ширины строки. В результате появлялись лишние пробелы. Вот теперь этого бага не видно. Не знаю, в чём он был, но сейчас нету :|

Attachments:
ttf.zip [230.21 KiB]
Downloaded 153 times

Author:  Leency [ Mon Mar 24, 2014 3:44 pm ]
Post subject:  Re: TrueType

Переписка с Робертом. Что как делать, надеюсь, он не против.

Насчёт шрифта два варианта: если библиотека та, что мной выложена, то в unsigned char *FontData находится путь к шрифту. Иначе шрифт зашит в библиотеке(но тогда там функция init_font выглядит так: int __stdcall init_font(stbtt_fontinfo *font) ).
"stbtt_fontinfo *font - это что за структура??" - сам не знаю :D . Я просто давал пустой буфер в 200байт и всё отлично работало. Сейчас пример проги в читаемый вид переделаю.

Так, пардон, ошибся. unsigned char *FontData - это загруженный в память файл шрифта(просто загруженный, без всякой обработки)

Вот рабочий пример. Пути только поправить надо. Шрифты многие открывает, по крайней мере arial.ttf из ХРюши нормально рисует. Вот.
И ещё.

Code:
typedef struct stbtt_fontinfo
{
void * userdata;
unsigned char * data; // pointer to .ttf file
int fontstart; // offset of start of font

int numGlyphs; // number of glyphs, needed for range checking

int loca,head,glyf,hhea,hmtx,kern; // table locations as offset from start of .ttf
int index_map; // a cmap mapping for our chosen character encoding
int indexToLocFormat; // format needed to map from glyph index to glyph
} stbtt_fontinfo;


Так что 200байт - много :) Видимо просто личные данные шрифта для его рисования.
Файл TTF.ASM

Кирилл
> Иначе шрифт зашит в библиотеке
а в библиотеке уже есть зашитый шрифт?

Роберт
В правленной мной, нет. В прежних да.

Attachments:
TTF.asm [2.66 KiB]
Downloaded 136 times

Author:  SoUrcerer [ Mon Mar 24, 2014 4:53 pm ]
Post subject:  Re: TrueType

Вообще над этим портом нужно знатно поработать. Выбрать API, добавить менеджер шрифтов (чтоб не хранить по сто раз один и тот же шрифт в памяти).

Author:  GerdtR [ Mon Mar 31, 2014 2:26 am ]
Post subject:  Re: TrueType

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

Author:  SoUrcerer [ Mon Mar 31, 2014 7:43 am ]
Post subject:  Re: TrueType

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

Author:  seppe [ Wed Nov 12, 2014 2:08 am ]
Post subject:  Re: TrueType

bubach wrote:
here's a link to a small truetype support file in C.
http://mollyrocket.com/forums/viewtopic.php?t=736
SoUrcerer wrote:
So, I managed to compile this library.
The link seems broken. :cry:
I would like to see the c source.

Author:  SoUrcerer [ Wed Nov 12, 2014 9:14 am ]
Post subject:  Re: TrueType

You can find sources at svn, programs/libraries/truetype or something like this.

Author:  hidnplayr [ Wed Nov 12, 2014 11:51 am ]
Post subject:  Re: TrueType

http://websvn.kolibrios.org/listing.php ... f1298b64c5

Author:  Leency [ Wed Nov 12, 2014 4:01 pm ]
Post subject:  Re: TrueType

No, please use this one viewtopic.php?f=24&t=2059&view=unread#p50614

Page 5 of 6 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/