Кастом шрифт в imgui

shadow80962

Известный
Автор темы
127
13
Версия MoonLoader
.026-beta
Пытаюсь подружить font awesome с другим шрифтом который хочу использовать в интерфейсе но получай краш игры

Lua:
function imgui.BeforeDrawFrame()
    imgui.GetIO().Fonts:Clear()

    if fa_font == nil then
        local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
        font_config.MergeMode = true

        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 13.0, font_config, fa_glyph_ranges)
    end

    if fa_font_notf == nil then
        fa_font_notf = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 20.0, nil, fa_glyph_ranges)
    end


    imgui.GetIO().Fonts:AddFontFromFileTTF("moonloader/resource/fonts/EagleSans-Reg.ttf", 16, nil, imgui.GetIO().Fonts:GetGlyphRangesCyrillic())
    imgui.RebuildFonts()
end
изображение_2023-03-08_175339582.png
 

Garug

Потрачен
10
4
Похоже, что при добавлении двух разных шрифтов через imgui.GetIO().Fonts:AddFontFromFileTTF, происходит конфликт имен символов, которые могут быть одинаковыми в разных шрифтах.

Чтобы решить эту проблему, можно использовать метод AddFontFromMemoryTTF, который позволяет загружать шрифты из памяти, а не из файлов. Таким образом, ты можете загрузить два шрифта в память и использовать их в imgui, без конфликта символов.

Пример:
Lua:
function imgui.BeforeDrawFrame()
    imgui.GetIO().Fonts:Clear()

    -- Загрузка шрифта Font Awesome в память
    local fa_font_buffer = readFileSync(getFolderPath(0x14) .. '/resource/fonts/fa-solid-900.ttf')
    local fa_font_size = 13.0
    local fa_font_config = imgui.ImFontConfig()
    fa_font_config.MergeMode = true
    local fa_glyph_ranges = imgui.ImGlyphRanges:new('fontawesome')

    fa_font = imgui.GetIO().Fonts:AddFontFromMemoryTTF(fa_font_buffer, fa_font_size, fa_font_config, fa_glyph_ranges)

    -- Загрузка шрифта EagleSans-Reg в память
    local other_font_buffer = readFileSync(getFolderPath(0x14) .. '/resource/fonts/EagleSans-Reg.ttf')
    local other_font_size = 16.0
    local other_glyph_ranges = imgui.GetIO().Fonts:GetGlyphRangesCyrillic()

    other_font = imgui.GetIO().Fonts:AddFontFromMemoryTTF(other_font_buffer, other_font_size, nil, other_glyph_ranges)

    imgui.GetIO().Fonts:SetFontDefault(other_font)

    imgui.RebuildFonts()
end

Я сделал загрузку шрифтов в память с помощью функции readFileSync, а затем использую метод AddFontFromMemoryTTF для добавления шрифтов в imgui.

Также обрати внимание, что я устанавливаю шрифт по умолчанию с помощью imgui.GetIO().Fonts:SetFontDefault(other_font).
 
  • Bug
Реакции: NEDE7U