Page 2 of 5

Re: Масштабируемые векторные шрифты

Posted: Sun Feb 13, 2011 5:58 pm
by Foldl
Sorcerer wrote:Файл freetype.a лежит в $(MENUETDEV)/lib
Нужно задать еще путь к библиотеке

Code: Select all

-L$(MENUETDEV)/lib
Хотя... Этот путь наверное в mld прописан. Можно еще переименовать библиотеку в libfreetype.a

Re: Масштабируемые векторные шрифты

Posted: Sun Feb 13, 2011 6:16 pm
by SoUrcerer
Спасибо... Помогло. Не заметил, что имя неправильное у файла.
теперь все так же, как с другими примерами menuetlibc, подключающими библиотеки:
/home/sourcerer/projects/me/lib/libc.a(remove.o): In function `remove':
remove.c:(.text+0x9a): undefined reference to `__stack_chk_fail'

И не линкуется. Интересно, это исправлял уже кто-нибудь, или нет? menuetlibc у меня один из последних, насколько я понимаю, потому что в нем есть упоминания о Колибри, а не только о menuet... И в каком направлении ковырять? Скомпилированную menuetlibc от Asper'а использовать не могу, потому что у меня не mingw и не cygwin...

Re: Масштабируемые векторные шрифты

Posted: Mon Feb 14, 2011 1:32 pm
by CleverMouse
Sorcerer, Яндекс советует добавить -fno-stack-protector к опциям компиляции. Опции компиляции можно добавить - на выбор - в исходном тексте mgcc или в osrules.mak, с учётом того, что и там, и там есть две ветки, срабатывающие в разных случаях.

Re: Масштабируемые векторные шрифты

Posted: Mon Feb 14, 2011 9:30 pm
by SoUrcerer
CleverMouse wrote:Sorcerer, Яндекс советует добавить -fno-stack-protector к опциям компиляции. Опции компиляции можно добавить - на выбор - в исходном тексте mgcc или в osrules.mak, с учётом того, что и там, и там есть две ветки, срабатывающие в разных случаях.
Спасибо большое! Я думал, это я такой идиот или неудачник, поэтому и не искал в поиске... Добавление опции не помогло, а вот другие советы, кажется, помогли. Например, совет создать dummy-функцию __stack_chk_fail(void) помог скомпилировать те тесты, которые у меня раньше не компилировались, и они работают. А моя простая программка - нет, библиотека все-таки собралась неправильно, и дело в параметрах сборки, потому что, как выяснилось, некоторые o-файлы включились в архив несколько раз (ума не приложу, как так получилось).
Но, кажется, собрать freetype для Колибри гораздо более реально, чем я предполагал, и, судя по всему, гораздо быстрее, чем изобретать свой велосипед.
Конечно, это уже делали до меня, и не раз. И все же я надеюсь, что смогу довести все до ума.

Re: Масштабируемые векторные шрифты

Posted: Mon Feb 14, 2011 10:42 pm
by Gluk
Sorcerer, это отлично! Всячески желаю успехов, и в своей разрабатываемой программе обязательно сделаю поддержку таких векторных шрифтов (BGI уже используются и работают, но тормознуты и некрасивы). Нужна будет помощь (кроме как с Си, и компиляцией из него), буду рад помочь (в том же тестировании, например)

Re: Масштабируемые векторные шрифты

Posted: Mon Mar 28, 2011 10:58 am
by SoUrcerer
Шрифты, шрифты... Наконец собрал freetype 1.3.1 по-человечески. Линкуется статически. Проверял только на ftstrpnm - генерирует pnm-изображение с текстом про лису и ленивого пса по данному шрифту (брал Libertation Mono).

Re: Масштабируемые векторные шрифты

Posted: Mon Mar 28, 2011 11:19 am
by SoUrcerer
Результат выглядит вот так:
render.png
render.png (668 Bytes)
Viewed 8719 times
Поддерживаются сглаживание, пиксель-хинтинг и всё такое. Бинарник в сжатом виде занимает 50 килобайт, а файл шрифта, который я использовал (Libertation Mono, с поддержкой русского и английского) - около 110 килобайт. Имеется поддержка арабского, но нет поддержки японского и китайского.
В теории на флоппик влезет, если потеснить игрушки и всё такое. (FreeType2, кажется, потяжелее будет)

UPD: русский поддерживается в теории. На практике вывести строку на русском мне не удалось. Пробовал передавать UTF-8, CP-1251, CP-1252 и IBM866-строки, все равно :( Пойду читать мануалы.

Вопрос к знатокам: есть ли возможность сделать COFF-библиотеку с использованием gcc, и если да, то как?

Re: Масштабируемые векторные шрифты

Posted: Mon Mar 28, 2011 2:32 pm
by Serge
Sorcerer

Для этого надо компилировать все файлы в один (опция -combine).

Re: Масштабируемые векторные шрифты

Posted: Mon Mar 28, 2011 3:12 pm
by SoUrcerer
А можно какую-нибудь рыбу, чтобы было понятно, что и как? Файл у меня и так один объектный.

Re: Масштабируемые векторные шрифты

Posted: Mon Mar 28, 2011 3:17 pm
by Serge
Посмотри svn://kolibrios.org/programs/develop/libraries/pixlib.с
Обязятельные "START" и "VERSION", остальное - твои функции.

Gcc любит добавлять в объектники отладочную информацию. Надо внимательно смотреть опции компиляции.

Re: Масштабируемые векторные шрифты

Posted: Mon Mar 28, 2011 11:32 pm
by SoUrcerer
Ковыряюсь с обертками для функций freetype. Текущая версия библиотеки (1.3.1) в kpack-ованном виде занимает около 26 килобайт, но, судя по всему, скоро размер на несколько килобайт увеличится. Пока что она лишь выводит свою версию, и создает TT_Engine, поэтому не вижу смысла ее выкладывать сюда. Как только эта штуковина взлетит, так сразу и выложу. Впереди неделька-другая свободного времени, и есть большие шансы на то, что за это время я успею всё допилить.

Выводить текст с помощью freetype можно будет так же просто, как, например, использовать box_lib. Нужно лишь загрузить библиотеку, импортировать нужные функции, загрузить файл шрифта, передать функциям указатели на файл шрифта, текст и область памяти для вывода, и всё.

Благодарности:
Spoiler:Радует, что newlib, судя по всему, хорошо соответствует стандартам ANSI C - почти никаких правок исходного кода самой freetype делать не пришлось. Отдельное спасибо Serge за работу!
А еще спасибо всем, кто помогает Колибри! ;)

Re: Масштабируемые векторные шрифты

Posted: Tue Mar 29, 2011 11:50 pm
by SoUrcerer
Библиотека freetype 1.3 для Колибри. Тепленькая, только что из компилятора и линковщика.
Downloaded 353 times
В архиве лежат: библиотека (dll), файл для линковки с исходным кодом (libfreetype.a), шрифт Libertation (какой под руку попался из linux) и тестовая программа ftpnm.kex.

Что со всем этим делать обычному пользователю?
1) Понадобится архив amz из темы про newlib.
2) Нужно скопировать libc.obj в /rd/1/lib/ (придется часть файлов с рамдиска удалить скорее всего),
3) В файл system.env прописать правильные пути к файлам библиотек,
4) Затем скопировать этот файл в /rd/1/.
5) После этого открываем доску отладки, и закрываем (в Колибри нет pipes, и stdout идет на доску отладки, так что чистый файл boardlog.txt не повредит).
6) Затем открываем доску отладки вновь и
7) Запускаем ftpnm.kex из папки со шрифтом. Если всё хорошо - на доске появится сообщение "P4" и еще несколько цифр. Если всё плохо - то подробно будет рассказано, чего не хватает (библиотеки, шрифта, или благоприятной фазы луны). Будем надеяться, что всё хорошо.
8) Если всё действительно хорошо, то можно закрывать доску отладки и смотреть на файл /rd/1/boardlog.txt. Если никаких лишних сообщений на доску отладки не приходило, то boardlog.txt можно переименовать в файл с расширением pnm, скопировать его на жесткий диск или флешку, и затем просмотреть в каком-нибудь графическом просмотрщике.
9) После всего этого можно порадоваться, что freetype теперь работает в Колибри, и его можно использовать в любых программах.

А как писать программы с использованием freetype?
Для этих целей я использую mingw, fasm, заголовочные файлы freetype 1.3 (взять их можно из архива с официального сайта freetype), порт newlib (файлы amz-dev из темы про newlib, а так же заголовочные файлы с SVN) и свою голову.
Код пишу в строгом соответствии с freetype api reference (разумеется, этот файл тоже есть в том же архиве), затем компилирую и линкую так, как это описано в теме про newlib:
i586-mingw32msvc-gcc -c *.c -fomit-frame-pointer -I include/ -D__DYNAMIC_REENT__ -O2
i586-mingw32msvc-ld -nostdlib -pie -s -T pe_app.lds --image-base 0 --stack 0x100000 -Map test.map ftstrpnm.o common.o -L ./ -lfreetypeimp -lcimp -lamz -o my_app.exe
fasm demo.asm ftpnm.kex

Я не уверен, можно ли использовать эту библиотеку в программах на fasm, но мне кажется, что можно (а как - это уже совсем другой вопрос). Надеюсь, что более компетентные в этом вопросе люди всё расскажут и покажут.

Спасибо всем за помощь!

Надеюсь, что в Колибри будут более-менее нормальные шрифты значительно раньше того момента, когда наши дети будут писать письма своим внукам :mrgreen: Почему-то мне кажется, что осталось поработать совсем немного (не считая переписывания части программ на использование масштабируемых шрифтов).

Re: FreeType для Колибри (масштабируемые векторные шрифты)

Posted: Wed Mar 30, 2011 12:24 am
by Asper
Sorcerer

Тебе всё-таки удалось собрать freetype в библиотеку. Молодец! :)
Большой шаг в сторону браузера, офисных программ и т.п.

Ну тут уже больше всех должен радоваться Albom.

Re: FreeType для Колибри (масштабируемые векторные шрифты)

Posted: Wed Mar 30, 2011 2:01 am
by Serge
Sorcerer
Ура, заработало!!!
С fasm никаких проблем нет. Народ пишет программы и дллки под Windows, здесь то же самое. Конечно требуются некоторые телодвижения по сравнению с С (опять таблицы импорта или extrn объявления), но не большие чем для работы с COFF DLL.
Spoiler:Собрать бы ещё Freetype2. Я бы пересобрал Cairo. У них там специальный frontend к фритайпу. Мечтательно :roll:

Re: FreeType для Колибри (масштабируемые векторные шрифты)

Posted: Wed Mar 30, 2011 8:48 am
by SoUrcerer
Решил поковырять и freetype2. Объектники компилируются легко (использую компиляцию из одной папки, все по инструкции), осталось правильно настроить include для сборки только необходимых модулей. Линковщик ругается только на FT_ERROR и FT_TRACE1 (на них ругается и при сборке ./configure --host=i586-mingw32msvc --build=i686-linux-elf, видимо, дело в заголовочных файлах), и еще почему-то на _setjmp.
По непонятной причине def-файл создается где-то в дебрях makefile'ов для visual studio (эх, вот бы сделали как в первом фритайпе, sh-скрипт, и всё), попробую потом его оттуда выдрать. Без def же библиотека не соберется как положено, правильно?