imgui fonts

Vespan

loneliness
Автор темы
Проверенный
2,102
1,631
Версия MoonLoader
.026-beta
как в real time менять шрифт-размер шрифта(IMGUI)
 
  • Грустно
Реакции: askfmaskfaosflas

RedHolms

Известный
Проверенный
617
360
Как раз недавно решал такую-же проблему, но с подгрузкой различных шрифтов

!!! Код немного подредактируй !!!
Lua:
do
   local self = {
      ToLoad = {}
   }

   ImGuiWantLoadFontEx = function(font_info)
      font_info.dest[0] = ImGuiStubFont

      local font_path = GetFontFullPath(font_info)
      if not doesFileExist(font_path) then
         print("font '" .. font_path .. "' doesn't exist, using default")
         return
      end

      -- if not loaded, load it at next frame
      table.insert(self.ToLoad, font_info)
   end

   ImGuiWantLoadFont = function(filename, size, dest)
      local font_info = {
         filename = filename,
         size = size,
         dest = dest
      }

      ImGuiWantLoadFontEx(font_info)
   end

   self.frame = ImGui.OnFrame(
      function() return #self.ToLoad > 0 end,
      function()
         local FontAtlas = ImGui.GetIO().Fonts

         for _, font_info in pairs(self.ToLoad) do
            local glyph_ranges_builder = ImGui.ImFontGlyphRangesBuilder()
            glyph_ranges_builder:AddRanges(FontAtlas:GetGlyphRangesDefault())
            glyph_ranges_builder:AddRanges(FontAtlas:GetGlyphRangesCyrillic())

            local glyph_ranges = ImGui.ImVector_ImWchar()
            glyph_ranges_builder:BuildRanges(glyph_ranges)

            local font = FontAtlas:AddFontFromFileTTF(GetFontFullPath(font_info), font_info.size, nil, glyph_ranges[0].Data)

            if not font then
               print("failed to load '" .. font_info.filename .. "' font")
               return
            end
            print("font loaded " .. tostring(font))

            font_info.dest[0] = font
         end

         ImGui.InvalidateFontsTexture()
         self.ToLoad = {}
      end,
      function(pl) pl.HideCursor = true end
   )

   ImGuiFrames._FontsLoader = self
end

Для загрузки шрифта:
Lua:
local font = new["ImFont*"]()

ImGuiWantLoadFont("имя файла", размер, font)

-- in draw
ImGui.PushFont(font)
...
ImGui.PopFon()

p.s.
GetFontFullPath - функция, которая возвращает полный путь до шрифта, её надо сделать самому, у меня она была так:
Lua:
local CFG = {
...
   FONTS_DIRECTORY = getFolderPath(0x14),
...
}

GetFontFullPath = function(font_info)
   return CFG.FONTS_DIRECTORY .. '\\' .. font_info.filename
end
 

Vespan

loneliness
Автор темы
Проверенный
2,102
1,631
Как раз недавно решал такую-же проблему, но с подгрузкой различных шрифтов

!!! Код немного подредактируй !!!
Lua:
do
   local self = {
      ToLoad = {}
   }

   ImGuiWantLoadFontEx = function(font_info)
      font_info.dest[0] = ImGuiStubFont

      local font_path = GetFontFullPath(font_info)
      if not doesFileExist(font_path) then
         print("font '" .. font_path .. "' doesn't exist, using default")
         return
      end

      -- if not loaded, load it at next frame
      table.insert(self.ToLoad, font_info)
   end

   ImGuiWantLoadFont = function(filename, size, dest)
      local font_info = {
         filename = filename,
         size = size,
         dest = dest
      }

      ImGuiWantLoadFontEx(font_info)
   end

   self.frame = ImGui.OnFrame(
      function() return #self.ToLoad > 0 end,
      function()
         local FontAtlas = ImGui.GetIO().Fonts

         for _, font_info in pairs(self.ToLoad) do
            local glyph_ranges_builder = ImGui.ImFontGlyphRangesBuilder()
            glyph_ranges_builder:AddRanges(FontAtlas:GetGlyphRangesDefault())
            glyph_ranges_builder:AddRanges(FontAtlas:GetGlyphRangesCyrillic())

            local glyph_ranges = ImGui.ImVector_ImWchar()
            glyph_ranges_builder:BuildRanges(glyph_ranges)

            local font = FontAtlas:AddFontFromFileTTF(GetFontFullPath(font_info), font_info.size, nil, glyph_ranges[0].Data)

            if not font then
               print("failed to load '" .. font_info.filename .. "' font")
               return
            end
            print("font loaded " .. tostring(font))

            font_info.dest[0] = font
         end

         ImGui.InvalidateFontsTexture()
         self.ToLoad = {}
      end,
      function(pl) pl.HideCursor = true end
   )

   ImGuiFrames._FontsLoader = self
end

Для загрузки шрифта:
Lua:
local font = new["ImFont*"]()

ImGuiWantLoadFont("имя файла", размер, font)

-- in draw
ImGui.PushFont(font)
...
ImGui.PopFon()

p.s.
GetFontFullPath - функция, которая возвращает полный путь до шрифта, её надо сделать самому, у меня она была так:
Lua:
local CFG = {
...
   FONTS_DIRECTORY = getFolderPath(0x14),
...
}

GetFontFullPath = function(font_info)
   return CFG.FONTS_DIRECTORY .. '\\' .. font_info.filename
end
эт0 mimgui,мне над когда я дёргаю imgui.SliderInt для изменение размера,и..изменяться размер шрифта,тоже самое с imgui.Combo когда там шрифты и когда я выбираю шрифт - изменяеться шрифт
 

RedHolms

Известный
Проверенный
617
360
эт0 mimgui,мне над когда я дёргаю imgui.SliderInt для изменение размера,и..изменяться размер шрифта,тоже самое с imgui.Combo когда там шрифты и когда я выбираю шрифт - изменяеться шрифт
Сори, под moon imgui не знаю
Пора переходить на mimgui)
 
  • Нравится
Реакции: YarikVL

Vespan

loneliness
Автор темы
Проверенный
2,102
1,631
Пора переходить на mimgui)
1664562014611.png


Lua:
local font = nil
function imgui.BeforeDrawFrame()
    if font == nil then
        font = imgui.GetIO().Fonts:AddFontFromFileTTF(getFolderPath(0x14) .. '\\arial.ttf', size.v, nil, imgui.GetIO().Fonts:GetGlyphRangesCyrillic())
    end
end
--
imgui.GetIO().Fonts.ConfigData[1].SizePixels = size.v--[[int]]
-- не извеняеться,хотя есть вставить в print,то возвращает размер шрифта
 
Последнее редактирование:
  • Нравится
Реакции: Loocking

RedHolms

Известный
Проверенный
617
360
Посмотреть вложение 171127

Lua:
local font = nil
function imgui.BeforeDrawFrame()
    if font == nil then
        font = imgui.GetIO().Fonts:AddFontFromFileTTF(getFolderPath(0x14) .. '\\arial.ttf', size.v, nil, imgui.GetIO().Fonts:GetGlyphRangesCyrillic())
    end
end
--
imgui.GetIO().Fonts.ConfigData[1].SizePixels = size.v--[[int]]
-- не извеняеться,хотя есть вставить в print,то возвращает размер шрифта
Попробуй после
imgui.GetIO().Fonts.ConfigData[1].SizePixels

Вызывать
imgui.InvalidateFontsTexture()
в BeforeDrawFrame!