Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Другие библиотеки _ собрать freetype

Автор: good_game 24.11.2013, 20:20

Здравствуйте, уважаемые форумчане. Использую в своём проекте библиотеку freetype http://www.freetype.org/
Исходники этой библиотеки включены в исходники Qt: <Qt dir>\Src\qtbase\src\3rdparty\freetype\
Под Линуксом оказалось очень просто использовать эту библиотеку:
в pro-файл добавляем

LIBS += -lz -lfreetype

INCLUDEPATH += $$MOC_DIR \
               /usr/include/freetype2 \
               /usr/include

Всё чётко собирается и работает. Необходимые бибилиотеки ставятся пакетом libfreetypedev.

А вот как эту библиотеку собрать под windows? Подскажите, пожалуйста.

Автор: Litkevich Yuriy 24.11.2013, 21:57

Цитата(good_game @ 24.11.2013, 22:20) *
А вот как эту библиотеку собрать под windows? Подскажите, пожалуйста.
теоретически она автоматом должна была собратся.
Во всяком случае так было в Qt4.

Автор: good_game 24.11.2013, 22:29

Автоматически не получилось. Но кое в чём продвинулся. Добавил в PATH необходимые пути (недавно сносил Qt4 и ставил Qt5). Из директории исходников библиотеки запустил mingw32-make. Он собрал мне "freetype.a" (и ещё кучу объектников) Что с ней дальше делать?
В директории с созданной freetype.a есть также файл freetype.def c таким содержимым:

LIBRARY freetype.dll
DESCRIPTION  FreeType 2 DLL
EXPORTS
  FTC_CMapCache_Lookup
  FTC_CMapCache_New
  FTC_ImageCache_Lookup
  FTC_ImageCache_LookupScaler
  FTC_ImageCache_New
  FTC_Manager_Done
....

и какая-то утилита apinames.exe, котору. я никак не могу нормально запустить (скармливаю ей файлы необходимые по её мануалу, но она только ошибки выдаёт)

Можно под windows библиотеку *.a пристыковать к проекту?

Автор: good_game 24.11.2013, 23:10

Оказалось, что можно. Решение такое: freetype.a переименовываем в freetype.lib и добавляем как статическую библиотеку к проекту. В результате в pro-файл добавится такое:

unix|win32: LIBS += -L$$PWD/ -lfreetype

INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/

win32: PRE_TARGETDEPS += $$PWD/freetype.lib
else:unix: PRE_TARGETDEPS += $$PWD/libfreetype.a


Всё, exe-шник собран и работает.

Автор: Litkevich Yuriy 26.11.2013, 13:52

Цитата(good_game @ 25.11.2013, 0:29) *
Можно под windows библиотеку *.a пристыковать к проекту?
если под виндой собирал, то можно.
у *.a файлов две эпостаси:
- при создании динамической библиотеки, a-файл выполняет роль интерфейса к библиотеке (dll на Виндовозе), который линкером впихивается в программу;
- при создании библиотеки для статической сборки с приложением - код, который будет воткнут в приложение.


Цитата(good_game @ 25.11.2013, 1:10) *
Решение такое: freetype.a переименовываем в freetype.lib
вообще-то в Qt - кроссплатформенном инструменте - не принято делать такие НЕ кроссплатформенные ходы.

Принято делать без указания расширения, qmake сам дотямает, что брать нужно и куда совать. Как у тебя и указано:
LIBS += -L$$PWD/ -lfreetype


А вот нужность этого сомнительна:
PRE_TARGETDEPS += $$PWD/freetype ....
.

Автор: good_game 26.1.2014, 19:39

В продолжение этой темы... Юрию спасибо за помощь. Недавно вышел релиз программы :) Правда вышел только под Windows и Linux. Под Mac не вышел. Причина следующая: программа использует для красоты всякие экзотические шрифты (типа таких http://designmodo.com/linecons-free/ , http://designmodo.com/linecons-free/). При использовании этих шрифтов на Windows или Linux, символы рисуются нормально, а под Мас-ом нет. Под Маком надписи на виджетах (например, название кнопки) из таких шрифтов пишутся квадратиками (как будто шрифт не распознан, глифы не найдены). НО! При выведении текста из такого шрифта в графическом виджете (например, QWebView) символы шрифта рисуются ЦВЕТНЫМИ картинками.
Помогите разобраться, что за фигня?

Автор: good_game 29.1.2014, 10:27

Появилась одна версия. Вот что написано в доработках библиотеки freeType:
Behdad Esfahbod (on behalf of Google) contributed support for color embedded bitmaps (eg. color emoji). A new load flag, FT_LOAD_COLOR, makes FreeType load color embedded-bitmaps, following this draft specification https://color-emoji.googlecode.com/git/specification/v1.html

Для символов есть глифы и есть цветные биткарты. Причём биткарты имеют преимущество перед глифами.
Я попробовал у виджетов выставлять специальный флаг:

QFont f;
f.setFamily(face->family_name);
f.setPixelSize(32);
f.setStyleStrategy(QFont::ForceOutline);

label_widget->setFont(f);

Но это не помогло.

Автор: good_game 14.2.2014, 14:42

Появилась ещё одна зацепка: если шрифт установить в систему (в Маке), то всё работает нормально (как в винде и линуксе). В чём разница между установленным и неустановленным шрифтом? В чём отличаются механизмы использования?

Автор: good_game 19.2.2014, 8:56

Выяснилась проблема, но решения не появилось. Под Маком при выполнении

QFontDatabase::addApplicationFont(font_name);
шрифт добавляется в приложение криво. Функция не возвращает ошибку (то есть типа шрифтв добавлен верно), но семейство ему выдаётся вообще другое. В моём случае всем добавляемым таким образом шрифтам выдавалось семейство "Lucida Grande". Разумеется позже программа не могла найти шрифт с указанным мной именем.
Что с этим делать?

Автор: Litkevich Yuriy 19.2.2014, 20:18

Цитата(good_game @ 19.2.2014, 10:56) *
шрифт добавляется в приложение криво. Функция не возвращает ошибку (то есть типа шрифтв добавлен верно), но семейство ему выдаётся вообще другое. В моём случае всем добавляемым таким образом шрифтам выдавалось семейство "Lucida Grande". Разумеется позже программа не могла найти шрифт с указанным мной именем.Что с этим делать?
курить [буржуйский] интернет, в Qt была какая-то беда со шрифтами, одно время много шумели по этому поводу, но, вроде бы, ничего не поменялось.

Автор: good_game 9.4.2014, 22:19

Найден косяк.
В QFontDatabase::addApplicationFont() под MacOS нужна обязательно указывать полный путь к файлу-шрифту. Под другими ОС можно указывать просто имя, находясь в его директории.

Автор: Алексей1153 10.4.2014, 10:25

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

"./файл"

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)