-
Автор темы
- #1
Данный тред создан специально для тех, кто все еще не знает что такое фритайп или как его подключить.
Что такое freetype?
Это библиотека, которая позволит вам сохранить ваши нервные клетки при работе с шрифтами в имгуи. Данная библиотека скажем так на простом языке улучшает шрифты. У вас появляется уйма возможностей кастомизировать уже готовый шрифт. Например можно выключить сглаживание и тем самым сделать шрифты как на surface например. Также одними из явных плюсов можно посчитать то что при использовании freetype ваши шрифты будут корректного размера, шрифты мелкого размера не будут выглядеть как размыленное говно размером в 3 пикселя, а будут выглядеть как нормальный яркий и красивый шрифт.
Сравнение можно наблюдать здесь
Насколько очевидна разница я думаю речи не идет. Мы можем увидеть как стандартный трутайп ни то что делает шрифт тусклее, он становится замыленным и даже меньше по размеру, что доставляет проблем при верстке.
Как подключить?
Скачиваем freetype с гитхаба.
Открываем в настройках проекта пункт каталоги VC++. Добавляем во включаемые каталоги путь к freetype/include
Пример:
Скачиваем freetype.lib
Если лень компилировать, то вот уже скомпилированный вариант
В файле imconfig прописываем
Затем добавляем в свой проект файлы freetype с гитхаба ImGui.
Теперь переходим к созданию шрифта
Обратите внимание на комментарии в коде.
Вот так выглядит Hint наглядно:
В примере кода выше я использовал отключение антиалиасинга и строгий алгоритм хинта.
Во фритайп также можно установить такие параметры фонтбилдера:
В комментариях все расписано.
Также не забудь прописать в аргументах при создании шрифта ваш ImFontConfig.
На этом всё.
Что такое freetype?
Это библиотека, которая позволит вам сохранить ваши нервные клетки при работе с шрифтами в имгуи. Данная библиотека скажем так на простом языке улучшает шрифты. У вас появляется уйма возможностей кастомизировать уже готовый шрифт. Например можно выключить сглаживание и тем самым сделать шрифты как на surface например. Также одними из явных плюсов можно посчитать то что при использовании freetype ваши шрифты будут корректного размера, шрифты мелкого размера не будут выглядеть как размыленное говно размером в 3 пикселя, а будут выглядеть как нормальный яркий и красивый шрифт.
Сравнение можно наблюдать здесь
Насколько очевидна разница я думаю речи не идет. Мы можем увидеть как стандартный трутайп ни то что делает шрифт тусклее, он становится замыленным и даже меньше по размеру, что доставляет проблем при верстке.
Как подключить?
Скачиваем freetype с гитхаба.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Создаем в своем проекте папку freetype и туда закидываем все скачанные файлы.Открываем в настройках проекта пункт каталоги VC++. Добавляем во включаемые каталоги путь к freetype/include
Пример:
Скачиваем freetype.lib
Если лень компилировать, то вот уже скомпилированный вариант
Пожалуйста, авторизуйтесь для просмотра ссылки.
Подключаем данную библиотеку в наш сурс и добавляем в каталоги библиотек через все те же настройки проекта.В файле imconfig прописываем
C++:
#define IMGUI_ENABLE_FREETYPE
Пожалуйста, авторизуйтесь для просмотра ссылки.
В только что скачанном .cpp файле прописываем где нибудь в начале
C++:
#pragma comment(lib, "freetype.lib")
C++:
ImFontConfig cfg;
cfg.FontBuilderFlags |= ImGuiFreeTypeBuilderFlags::ImGuiFreeTypeBuilderFlags_MonoHinting | ImGuiFreeTypeBuilderFlags_Monochrome; //отключает антиалиасинг и дает строгий алгоритм хинта
/*io.Fonts->AddFontFromMemoryTTF(&tahoma, sizeof tahoma, 14, &cfg, io.Fonts->GetGlyphRangesCyrillic());*/
io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\tahoma.ttf", 14, &cfg, io.Fonts->GetGlyphRangesCyrillic());
Вот так выглядит Hint наглядно:
В примере кода выше я использовал отключение антиалиасинга и строгий алгоритм хинта.
Во фритайп также можно установить такие параметры фонтбилдера:
C++:
enum ImGuiFreeTypeBuilderFlags
{
ImGuiFreeTypeBuilderFlags_NoHinting = 1 << 0, // Disable hinting. This generally generates 'blurrier' bitmap glyphs when the glyph are rendered in any of the anti-aliased modes.
ImGuiFreeTypeBuilderFlags_NoAutoHint = 1 << 1, // Disable auto-hinter.
ImGuiFreeTypeBuilderFlags_ForceAutoHint = 1 << 2, // Indicates that the auto-hinter is preferred over the font's native hinter.
ImGuiFreeTypeBuilderFlags_LightHinting = 1 << 3, // A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by Microsoft's ClearType and Adobe's proprietary font renderer. This preserves inter-glyph spacing in horizontal text.
ImGuiFreeTypeBuilderFlags_MonoHinting = 1 << 4, // Strong hinting algorithm that should only be used for monochrome output.
ImGuiFreeTypeBuilderFlags_Bold = 1 << 5, // Styling: Should we artificially embolden the font?
ImGuiFreeTypeBuilderFlags_Oblique = 1 << 6, // Styling: Should we slant the font, emulating italic style?
ImGuiFreeTypeBuilderFlags_Monochrome = 1 << 7, // Disable anti-aliasing. Combine this with MonoHinting for best results!
ImGuiFreeTypeBuilderFlags_LoadColor = 1 << 8, // Enable FreeType color-layered glyphs
ImGuiFreeTypeBuilderFlags_Bitmap = 1 << 9 // Enable FreeType bitmap glyphs
};
Также не забудь прописать в аргументах при создании шрифта ваш ImFontConfig.
На этом всё.