PMG
https://forum.pmg.org.ru/

Урок 43 (FreeType)
https://forum.pmg.org.ru/viewtopic.php?f=1&t=6732
Страница 1 из 1

Автор:  sergnex [ 11 дек 2008 15:07 ]
Заголовок сообщения:  Урок 43 (FreeType)

Приветствую Всех, кто будет читать эту тему...
Мой вопрос подкупает своей новизной и выглядит так:
"Как получить путь к файлу шрифтов или имя файла шрифтов, используя функции WinAPI или другие способы, когда в наличии имеется только структура HFONT, LOGFONT или класс QFont? (Язык C++)"
В 43 уроке автор упоминал о кэше шрифтов, но для меня это оказалось проблемой...
Может это и не стоит выеденного яйца, но после адаптации программы с платформы FreeBSD под платформу Windows, я совсем потерялся в этих классах и функциях VisulStudio и WinAPI...
Весь многотысячный код программы пашет, а поиском возможности получить имя файла шрифта уже второй день занимаюсь, и - как рыба об лед!
Кто проникся, укажите хотя бы направление, в котором мне двигаться...
Заранее благодарен всем, кто откликнется!
Мое почтение, Сергей!

Автор:  MagicWolf [ 11 дек 2008 20:08 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Я делал так:

Код:

static char name_file_ttf[TTF_NAME_FILE][40] = {

  "arial.ttf",
  "arialbd.ttf",

  "cour.ttf",
  "courbd.ttf",

  "pala.ttf",
  "palab.ttf",

  "tahoma.ttf",
  "tahomabd.ttf",

  "times.ttf",
  "timesbd.ttf",

  "l_10646.ttf",
};
.....
      GetWindowsDirectory(buf_sd, MAX_PATH+1);
      sprintf(buf_fonts,"%s\\fonts\\%s", buf_sd, name_file_ttf[type_font]);



Правда на MGL... Но смысл вроде не должен измениться ...

Автор:  sergnex [ 12 дек 2008 08:48 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Волшебный волк, спасибо за попытку помочь!
Жаль, но это не подходит. Слишком статично!
Если шрифты в системе изменятся, то менять код и компилировать никто не будет...
Во FreeBSD, хоть и не очень прозрачно, но я сделал так:
char *face(QFont &font, FT_Face *f, int *index){
QFontEngine *eng = font.d->engineForScript(QFontPrivate::defaultScript);
if(eng->type() == QFontEngine::Xft){
QFontEngineXft *engXft = static_cast<QFontEngineXft *>(eng);
XftPattern *pat = engXft->pattern();
char *filename;
XftPatternGetString(pat,XFT_FILE,0,&filename);
XftPatternGetInteger(pat,XFT_INDEX,0,index);
*f = engXft->face();
return filename;
}
return 0;
}

И все!!! Из окна стандартного диалога получаю инициализированный QFont, с помощью этой функции извлекаю путь к файлу ttf и дальше все стандартно: FT_New_Face(...) и так далее...

Вот примерно, что я хочу и от Windows!Сегодня у меня еще есть день - попробую найти...

Автор:  MagicWolf [ 12 дек 2008 09:49 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Шрифты Windows зарегистрированы в реестре в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

Опять же можешь зайти в директорию шрифтов и оттуда считать по файлам.

Хорошо о GDI повествует книга Питер - Юань, Программирование графики для Windows, 2002.pdf. В частности Глава 14 - Шрифты.

Автор:  MagicWolf [ 12 дек 2008 09:51 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

"Сегодня у меня еще есть день - попробую найти" - жесткие у тебя сроки...

Автор:  sergnex [ 12 дек 2008 09:58 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Спасибо, Сергей!
Я эти варианты (поиск файла по названию шрифта в каталоге и поиск в рестре) оставил на крайний случай...
Может и прийдется к ним обратиться...
Но пока что я попытаюсь найти красивое решение...
Литературу, предложенную тобой посмотрю, если найду конечно...
Если найду, то выложу сюда...

Автор:  sergnex [ 12 дек 2008 10:05 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

А сроки действительно запарили!
Доделаю проект, брошу эту работу нафик!)

Автор:  MagicWolf [ 13 дек 2008 09:31 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Любые сроки должны быть реальными и предусматривать возможность форс-мажора - иначе это рабство...

Автор:  sergnex [ 13 дек 2008 11:25 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Долой рабство! :). Каждый делает свой выбор сам...
Со шрифтами пока пришлось сделать через реестр. Ничего, походу в винде другого не дано. По каталогу шерстить, конечно - это мне вообще не нравится... Спасибо, Сергей за советы! Они помогли мне сделать выбор, как минимум!
Что делать с этой темой - незнаю... Может ее удалить дней через пять?

Автор:  MagicWolf [ 17 дек 2008 11:57 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Если хочешь удалю, а так не стоит ...

Автор:  sergnex [ 17 дек 2008 12:07 ]
Заголовок сообщения:  Re: Урок 43 (FreeType)

Да пусть остается! )

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/