| Back -end | Ganhar | Linux | OSX |
|---|---|---|---|
| OpenGL 3 | |||
| Vulkan |
Versões Vulkan:

O ImGuifontStudio é uma ferramenta para fontes de subconjunto e extrair nomes de glifos para uso embutido ou não em um software, especialmente para uso com o IMGUI para uma maneira incorporada.
Muito inspirado / baseado no projeto iconfontcppheaders
Este é o meu primeiro grande software OpenSource.
Como um homem de aprendizagem, eu sempre desenvolvi meus softimentos em solo.
Então, talvez você tenha encontrado algumas coisas estranhas, padrão de design ruim, otimização ruim ou outros besteiras :)
Por favor, envie -me seu feedback. Gosto de todos os comentários construtivos e ajuda é bem -vinda.
Testado com sucesso do meu lado:
Para obter mais informações sobre como usar os arquivos gerados, consulte este projeto: https://github.com/juliettef/iconfontcppheaders
Meu suave faça o mesmo trabalho e mais, mas mais fácil para o usuário :)
Você precisa usar cmake. Para o 3 OS (Win, Linux, MacOS), o uso do CMake é exatamente o mesmo,
cmake -B my_build_directory -DCMAKE_BUILD_TYPE=BuildMode
cmake --build my_build_directory --config BuildModeAlguma versão em CMake precisa de modo de construção definida através da diretiva cmake_build_type ou via - -config quando iniciarmos a compilação. É por isso que coloco as possibilidades dos dois
A propósito, você precisa antes, para garantir que você precise de dependências.
Você precisa ter a biblioteca OpenGL instalada
Você precisa de muitos Lib: (X11, Xrandr, Xinerama, Xcursor, Mesa)
Se você estiver no Debian, você pode executar:
sudo apt-get update
sudo apt-get install libgl1-mesa-dev libx11-dev libxi-dev libxrandr-dev libxinerama-dev libxcursor-devVocê precisa de muitos Lib: OpenGL e Cacau Framework
O ImGuifontStudio gerará 4 tipos de arquivos, dependendo de suas necessidades.
| Tipo de arquivo | Descrição |
|---|---|
| FONT ARQUIVO TTF | Arquivo de fonte vetorial necessário para o modo externo |
| Código -fonte | .c/.cpp/.cs para c/c ++/c# com dados de fontes conectados para o modo incorporado |
| Código do cabeçalho | .h/.cs para c/c ++/c# com infos como (rótulos de glifos/codepoint min/max intervalos)]] |
| Cartão | .png Este cartão é um arquivo de imagem que mostra cada glifo e os rótulos correspondentes |
Para carregar isso em Imgui, você precisa mesclar o ícone da fonte na fonte principal atual usada no seu aplicativo Imgui. Mas precisamos apenas carregar alguns pontos de código, não toda a tabela Unicode. É por isso que você tem no arquivo de cabeçalho o intervalo Min/Max Infos.
Por exemplo, aqui neste exemplo para a fonte incorporada de carga, temos (com o prefixo IGFS da fonte):
ImGuiIO * ioptr = igGetIO ();
ImFontAtlas_AddFontDefault ( ioptr -> Fonts , NULL );
const ImWchar icons_ranges [ 3 ] = { ICON_MIN_IGFS , ICON_MAX_IGFS , 0 };
ImFontConfig * icons_config = ImFontConfig_ImFontConfig ();
icons_config -> MergeMode = true;
icons_config -> PixelSnapH = true;
ImFontAtlas_AddFontFromFileTTF ( ioptr -> Fonts , FONT_ICON_FILE_NAME_IGFS , 15.0f , icons_config , icons_ranges );
ImFontConfig_destroy ( icons_config ); ImGui::GetIO ().Fonts->AddFontDefault();
static const ImWchar icons_ranges[] = { ICON_MIN_IGFS, ICON_MAX_IGFS, 0 };
ImFontConfig icons_config; icons_config.MergeMode = true ; icons_config.PixelSnapH = true ;
ImGui::GetIO ().Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_IGFS, 15 . 0f , &icons_config, icons_ranges);ImGui.GetIO().Fonts.AddFontDefault();
unsafe
{
ImFontConfigPtr config = ImGuiNative. ImFontConfig_ImFontConfig (); config. MergeMode = true ; config. PixelSnapH = true ;
GCHandle rangeHandle = GCHandle. Alloc ( new ushort []{IconFonts. IGFS_Labels . ICON_MIN , IconFonts. IGFS_Labels . ICON_MAX , 0 }, GCHandleType. Pinned );
ImGui. GetIO (). Fonts . AddFontFromFileTTF (IconFonts. IGFS_Labels . FONT_ICON_FILE_NAME , 15 , config, rangeHandle. AddrOfPinnedObject ());
}Por exemplo, aqui neste exemplo para a fonte de carga incorporada, temos (com a font prefxi igfs):
ImGuiIO * ioptr = igGetIO ();
ImFontAtlas_AddFontDefault ( ioptr -> Fonts , NULL );
const ImWchar icons_ranges [ 3 ] = { ICON_MIN_IGFS , ICON_MAX_IGFS , 0 };
ImFontConfig * icons_config = ImFontConfig_ImFontConfig ();
icons_config -> MergeMode = true;
icons_config -> PixelSnapH = true;
ImFontAtlas_AddFontFromMemoryCompressedBase85TTF ( ioptr -> Fonts , FONT_ICON_FILE_NAME_IGFS , 15.0f , icons_config , icons_ranges );
ImFontConfig_destroy ( icons_config ); ImGui::GetIO ().Fonts->AddFontDefault();
static const ImWchar icons_ranges[] = { ICON_MIN_IGFS, ICON_MAX_IGFS, 0 };
ImFontConfig icons_config; icons_config.MergeMode = true ; icons_config.PixelSnapH = true ;
ImGui::GetIO ().Fonts->AddFontFromMemoryCompressedBase85TTF(FONT_ICON_BUFFER_NAME_IGFS, 15 . 0f , &icons_config, icons_ranges);ImGui.GetIO().Fonts.AddFontDefault();
unsafe
{
ImFontConfigPtr config = ImGuiNative. ImFontConfig_ImFontConfig (); config. MergeMode = true ; config. PixelSnapH = true ;
GCHandle rangeHandle = GCHandle. Alloc ( new ushort []{IconFonts. IGFS_Labels . ICON_MIN , IconFonts. IGFS_Labels . ICON_MAX , 0 }, GCHandleType. Pinned );
ImGui. GetIO (). Fonts . AddFontFromMemoryCompressedBase85TTF (IconFonts. IGFS_Bytes . compressed_data_base85 , 15 , config, rangeHandle. AddrOfPinnedObject ());
}Nos dois casos, o uso no código é o mesmo:
Após essa etapa, quando você tem um widget imgui para testar, basta colocar no campo da etiqueta, o glifo que você deseja, definido no arquivo de cabeçalho para etiquetas:
ImGui::Button (ICON_IGFS_FOLDER_OPEN " Open Font " ); ImGui::Button (IconFonts.IGFS_Labels.FOLDER_OPEN + " Open Font " ); E você terá o resultado: 
Você pode usar a guia Problema para problemas de relatório ou solicitação de recursos. Ou você também pode contribuir com as guias Discutir através de questões, ou/e puxar solicitações :)
ImGuifontStudio é um software de código aberto sob licença Apache 2.0
Visualização principal: painel de origem 
Visualização principal: painel final com duas fontes 
Visualização principal: Painel Final para Edição 
Amostra de um cartão: 
Deixe -me saber o seu projeto com um pciture e posso adicioná -lo aqui:
No momento (como eu sei), existe: