pkg/cimgui: use freetype for font rendering

This commit is contained in:
Mitchell Hashimoto
2023-10-21 14:27:53 -07:00
parent d65b29a537
commit e62a8bbaae
4 changed files with 38 additions and 5 deletions

View File

@ -8,6 +8,11 @@ pub fn build(b: *std.Build) !void {
_ = b.addModule("cimgui", .{ .source_file = .{ .path = "main.zig" } }); _ = b.addModule("cimgui", .{ .source_file = .{ .path = "main.zig" } });
const imgui = b.dependency("imgui", .{}); const imgui = b.dependency("imgui", .{});
const freetype = b.dependency("freetype", .{
.target = target,
.optimize = optimize,
.@"enable-libpng" = true,
});
const lib = b.addStaticLibrary(.{ const lib = b.addStaticLibrary(.{
.name = "cimgui", .name = "cimgui",
.target = target, .target = target,
@ -15,6 +20,7 @@ pub fn build(b: *std.Build) !void {
}); });
lib.linkLibC(); lib.linkLibC();
lib.linkLibCpp(); lib.linkLibCpp();
lib.linkLibrary(freetype.artifact("freetype"));
if (target.isWindows()) { if (target.isWindows()) {
lib.linkSystemLibrary("imm32"); lib.linkSystemLibrary("imm32");
} }
@ -24,6 +30,7 @@ pub fn build(b: *std.Build) !void {
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);
defer flags.deinit(); defer flags.deinit();
try flags.appendSlice(&.{ try flags.appendSlice(&.{
"-DCIMGUI_FREETYPE=1",
"-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS=1", "-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS=1",
}); });
if (target.isWindows()) { if (target.isWindows()) {
@ -42,6 +49,7 @@ pub fn build(b: *std.Build) !void {
lib.addCSourceFile(.{ .file = imgui.path("imgui_demo.cpp"), .flags = flags.items }); lib.addCSourceFile(.{ .file = imgui.path("imgui_demo.cpp"), .flags = flags.items });
lib.addCSourceFile(.{ .file = imgui.path("imgui_widgets.cpp"), .flags = flags.items }); lib.addCSourceFile(.{ .file = imgui.path("imgui_widgets.cpp"), .flags = flags.items });
lib.addCSourceFile(.{ .file = imgui.path("imgui_tables.cpp"), .flags = flags.items }); lib.addCSourceFile(.{ .file = imgui.path("imgui_tables.cpp"), .flags = flags.items });
lib.addCSourceFile(.{ .file = imgui.path("misc/freetype/imgui_freetype.cpp"), .flags = flags.items });
lib.addCSourceFile(.{ lib.addCSourceFile(.{
.file = imgui.path("backends/imgui_impl_opengl3.cpp"), .file = imgui.path("backends/imgui_impl_opengl3.cpp"),

View File

@ -11,5 +11,6 @@
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },
.freetype = .{ .path = "../freetype" },
}, },
} }

View File

@ -1,7 +1,9 @@
//This file is automatically generated by generator.lua from https://github.com/cimgui/cimgui //This file is automatically generated by generator.lua from https://github.com/cimgui/cimgui
//based on imgui.h file version "1.89.9" 18990 from Dear ImGui https://github.com/ocornut/imgui //based on imgui.h file version "1.89.9" 18990 from Dear ImGui https://github.com/ocornut/imgui
//with imgui_internal.h api //with imgui_internal.h api
//with imgui_freetype.h api
//docking branch //docking branch
#define IMGUI_ENABLE_FREETYPE
#ifdef IMGUI_ENABLE_FREETYPE #ifdef IMGUI_ENABLE_FREETYPE
#ifndef CIMGUI_FREETYPE #ifndef CIMGUI_FREETYPE
#error "IMGUI_FREETYPE should be defined for Freetype linking" #error "IMGUI_FREETYPE should be defined for Freetype linking"
@ -19,6 +21,7 @@
#include "cimgui.h" #include "cimgui.h"
CIMGUI_API ImVec2* ImVec2_ImVec2_Nil(void) CIMGUI_API ImVec2* ImVec2_ImVec2_Nil(void)
{ {
return IM_NEW(ImVec2)(); return IM_NEW(ImVec2)();
@ -5397,10 +5400,6 @@ CIMGUI_API bool igIsKeyPressedMap(ImGuiKey key,bool repeat)
{ {
return ImGui::IsKeyPressedMap(key,repeat); return ImGui::IsKeyPressedMap(key,repeat);
} }
CIMGUI_API const ImFontBuilderIO* igImFontAtlasGetBuilderForStbTruetype()
{
return ImFontAtlasGetBuilderForStbTruetype();
}
CIMGUI_API void igImFontAtlasBuildInit(ImFontAtlas* atlas) CIMGUI_API void igImFontAtlasBuildInit(ImFontAtlas* atlas)
{ {
return ImFontAtlasBuildInit(atlas); return ImFontAtlasBuildInit(atlas);
@ -5433,6 +5432,14 @@ CIMGUI_API void igImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[2
{ {
return ImFontAtlasBuildMultiplyRectAlpha8(table,pixels,x,y,w,h,stride); return ImFontAtlasBuildMultiplyRectAlpha8(table,pixels,x,y,w,h,stride);
} }
CIMGUI_API const ImFontBuilderIO* ImGuiFreeType_GetBuilderForFreeType()
{
return ImGuiFreeType::GetBuilderForFreeType();
}
CIMGUI_API void ImGuiFreeType_SetAllocatorFunctions(void*(*alloc_func)(size_t sz,void* user_data),void(*free_func)(void* ptr,void* user_data),void* user_data)
{
return ImGuiFreeType::SetAllocatorFunctions(alloc_func,free_func,user_data);
}

View File

@ -1,6 +1,7 @@
//This file is automatically generated by generator.lua from https://github.com/cimgui/cimgui //This file is automatically generated by generator.lua from https://github.com/cimgui/cimgui
//based on imgui.h file version "1.89.9" 18990 from Dear ImGui https://github.com/ocornut/imgui //based on imgui.h file version "1.89.9" 18990 from Dear ImGui https://github.com/ocornut/imgui
//with imgui_internal.h api //with imgui_internal.h api
//with imgui_freetype.h api
//docking branch //docking branch
#ifndef CIMGUI_INCLUDED #ifndef CIMGUI_INCLUDED
#define CIMGUI_INCLUDED #define CIMGUI_INCLUDED
@ -3121,6 +3122,20 @@ struct ImFontBuilderIO
{ {
bool (*FontBuilder_Build)(ImFontAtlas* atlas); bool (*FontBuilder_Build)(ImFontAtlas* atlas);
}; };
struct ImFontAtlas;
struct ImFontBuilderIO;
typedef enum {
ImGuiFreeTypeBuilderFlags_NoHinting = 1 << 0,
ImGuiFreeTypeBuilderFlags_NoAutoHint = 1 << 1,
ImGuiFreeTypeBuilderFlags_ForceAutoHint = 1 << 2,
ImGuiFreeTypeBuilderFlags_LightHinting = 1 << 3,
ImGuiFreeTypeBuilderFlags_MonoHinting = 1 << 4,
ImGuiFreeTypeBuilderFlags_Bold = 1 << 5,
ImGuiFreeTypeBuilderFlags_Oblique = 1 << 6,
ImGuiFreeTypeBuilderFlags_Monochrome = 1 << 7,
ImGuiFreeTypeBuilderFlags_LoadColor = 1 << 8,
ImGuiFreeTypeBuilderFlags_Bitmap = 1 << 9
}ImGuiFreeTypeBuilderFlags;
#define IMGUI_HAS_DOCK 1 #define IMGUI_HAS_DOCK 1
#else #else
@ -4526,7 +4541,6 @@ CIMGUI_API void igDebugNodeViewport(ImGuiViewportP* viewport);
CIMGUI_API void igDebugRenderKeyboardPreview(ImDrawList* draw_list); CIMGUI_API void igDebugRenderKeyboardPreview(ImDrawList* draw_list);
CIMGUI_API void igDebugRenderViewportThumbnail(ImDrawList* draw_list,ImGuiViewportP* viewport,const ImRect bb); CIMGUI_API void igDebugRenderViewportThumbnail(ImDrawList* draw_list,ImGuiViewportP* viewport,const ImRect bb);
CIMGUI_API bool igIsKeyPressedMap(ImGuiKey key,bool repeat); CIMGUI_API bool igIsKeyPressedMap(ImGuiKey key,bool repeat);
CIMGUI_API const ImFontBuilderIO* igImFontAtlasGetBuilderForStbTruetype(void);
CIMGUI_API void igImFontAtlasBuildInit(ImFontAtlas* atlas); CIMGUI_API void igImFontAtlasBuildInit(ImFontAtlas* atlas);
CIMGUI_API void igImFontAtlasBuildSetupFont(ImFontAtlas* atlas,ImFont* font,ImFontConfig* font_config,float ascent,float descent); CIMGUI_API void igImFontAtlasBuildSetupFont(ImFontAtlas* atlas,ImFont* font,ImFontConfig* font_config,float ascent,float descent);
CIMGUI_API void igImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas,void* stbrp_context_opaque); CIMGUI_API void igImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas,void* stbrp_context_opaque);
@ -4535,6 +4549,8 @@ CIMGUI_API void igImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas,in
CIMGUI_API void igImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas,int x,int y,int w,int h,const char* in_str,char in_marker_char,unsigned int in_marker_pixel_value); CIMGUI_API void igImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas,int x,int y,int w,int h,const char* in_str,char in_marker_char,unsigned int in_marker_pixel_value);
CIMGUI_API void igImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256],float in_multiply_factor); CIMGUI_API void igImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256],float in_multiply_factor);
CIMGUI_API void igImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256],unsigned char* pixels,int x,int y,int w,int h,int stride); CIMGUI_API void igImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256],unsigned char* pixels,int x,int y,int w,int h,int stride);
CIMGUI_API const ImFontBuilderIO* ImGuiFreeType_GetBuilderForFreeType(void);
CIMGUI_API void ImGuiFreeType_SetAllocatorFunctions(void*(*alloc_func)(size_t sz,void* user_data),void(*free_func)(void* ptr,void* user_data),void* user_data);
/////////////////////////hand written functions /////////////////////////hand written functions
@ -4558,3 +4574,4 @@ CIMGUI_API void ImVector_ImWchar_UnInit(ImVector_ImWchar* p);