From fca87575fd934d661ee80e5b045ae3ab474385a5 Mon Sep 17 00:00:00 2001 From: dbr Date: Thu, 10 Jun 2021 23:50:44 +1000 Subject: [PATCH 1/6] Add freetype feature Uses the upstream "imgui_freetype" to "Build font atlases using FreeType instead of stb_truetype (which is the default font rasterizer)" Closes #359 --- imgui-sys/Cargo.toml | 2 ++ imgui-sys/build.rs | 14 ++++++++++++++ imgui-sys/include_all_imgui.cpp | 4 ++++ imgui/Cargo.toml | 1 + 4 files changed, 21 insertions(+) diff --git a/imgui-sys/Cargo.toml b/imgui-sys/Cargo.toml index 29a68bb..f439900 100644 --- a/imgui-sys/Cargo.toml +++ b/imgui-sys/Cargo.toml @@ -18,7 +18,9 @@ chlorine = "1.0.7" [build-dependencies] cc = "1.0" +pkg-config = { version="0.3", optional=true } [features] default = [] wasm = [] +freetype = ["pkg-config"] diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index 25a11dc..c7e4311 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -48,6 +48,20 @@ fn main() -> io::Result<()> { build.define(key, *value); } + // Freetype font rasterizer feature + if std::env::var_os("CARGO_FEATURE_FREETYPE").is_some() { + let freetype = pkg_config::Config::new().find("freetype2").unwrap(); + for include in freetype.include_paths.iter() { + build.include(include); + } + build.define("IMGUI_ENABLE_FREETYPE", None); + println!("cargo:DEFINE_{}={}", "IMGUI_ENABLE_FREETYPE", ""); + + // imgui_freetype.cpp needs access to imgui.h + build.include( + manifest_dir.join("third-party/imgui/")); + } + let compiler = build.get_compiler(); // Avoid the if-supported flag functions for easy cases, as they're // kinda costly. diff --git a/imgui-sys/include_all_imgui.cpp b/imgui-sys/include_all_imgui.cpp index 2ba5922..fbda88d 100644 --- a/imgui-sys/include_all_imgui.cpp +++ b/imgui-sys/include_all_imgui.cpp @@ -9,4 +9,8 @@ #include "./third-party/imgui/imgui_tables.cpp" #include "./third-party/cimgui.cpp" +#ifdef IMGUI_ENABLE_FREETYPE +#include "./third-party/imgui/misc/freetype/imgui_freetype.cpp" +#endif + diff --git a/imgui/Cargo.toml b/imgui/Cargo.toml index 8fa6215..0034699 100644 --- a/imgui/Cargo.toml +++ b/imgui/Cargo.toml @@ -19,6 +19,7 @@ parking_lot = "0.11" [features] wasm = ["imgui-sys/wasm"] +freetype = ["imgui-sys/freetype"] [dev-dependencies] memoffset = "0.6" From a36fb757fd869aab9d82e8740019c05a4e7e02f6 Mon Sep 17 00:00:00 2001 From: dbr Date: Fri, 11 Jun 2021 00:34:03 +1000 Subject: [PATCH 2/6] Use #[cfg(feature=...)] instead of env-var --- imgui-sys/build.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index c7e4311..806675f 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -49,7 +49,8 @@ fn main() -> io::Result<()> { } // Freetype font rasterizer feature - if std::env::var_os("CARGO_FEATURE_FREETYPE").is_some() { + #[cfg(feature = "feature")] + { let freetype = pkg_config::Config::new().find("freetype2").unwrap(); for include in freetype.include_paths.iter() { build.include(include); From c4fbfdd43eaf054e34a950f4c3f6c80e867c666c Mon Sep 17 00:00:00 2001 From: dbr Date: Fri, 11 Jun 2021 00:34:19 +1000 Subject: [PATCH 3/6] fmt --- imgui-sys/build.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index 806675f..fcb9cdf 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -59,8 +59,7 @@ fn main() -> io::Result<()> { println!("cargo:DEFINE_{}={}", "IMGUI_ENABLE_FREETYPE", ""); // imgui_freetype.cpp needs access to imgui.h - build.include( - manifest_dir.join("third-party/imgui/")); + build.include(manifest_dir.join("third-party/imgui/")); } let compiler = build.get_compiler(); From 7808164911adae37fe9e3cd606281d6dad9ed1af Mon Sep 17 00:00:00 2001 From: dbr Date: Fri, 11 Jun 2021 11:24:14 +1000 Subject: [PATCH 4/6] Fix clippy --- imgui-sys/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index fcb9cdf..9be7863 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -56,7 +56,7 @@ fn main() -> io::Result<()> { build.include(include); } build.define("IMGUI_ENABLE_FREETYPE", None); - println!("cargo:DEFINE_{}={}", "IMGUI_ENABLE_FREETYPE", ""); + println!("cargo:DEFINE_IMGUI_ENABLE_FREETYPE="); // imgui_freetype.cpp needs access to imgui.h build.include(manifest_dir.join("third-party/imgui/")); From 4882a1f29dc9eb69c40352675da0b363d46c4715 Mon Sep 17 00:00:00 2001 From: dbr Date: Fri, 18 Jun 2021 12:29:37 +1000 Subject: [PATCH 5/6] Fix enabling of freetype feature --- imgui-sys/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index 9be7863..3dd6f79 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -49,7 +49,7 @@ fn main() -> io::Result<()> { } // Freetype font rasterizer feature - #[cfg(feature = "feature")] + #[cfg(feature = "freetype")] { let freetype = pkg_config::Config::new().find("freetype2").unwrap(); for include in freetype.include_paths.iter() { From 600ceeb7d6d8c78a2383539e725acbec77f8f678 Mon Sep 17 00:00:00 2001 From: dbr Date: Thu, 9 Sep 2021 12:56:07 +1000 Subject: [PATCH 6/6] Update changelog/readme --- CHANGELOG.markdown | 2 ++ README.markdown | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown index 6c9b1b3..b84e529 100644 --- a/CHANGELOG.markdown +++ b/CHANGELOG.markdown @@ -61,6 +61,8 @@ with the exception of the current default winit feature/dep version. Additionall - If you're using `DEP_IMGUI_DEFINE_`s for this already, then no change is needed. - If you're using `.cargo/config` to apply a build script override and link against a prebuilt `Dear Imgui` (or something else along these lines), you need to ensure you link with a version that was built using `-DIMGUI_USE_WCHAR32`. +- Support for the freetype font rasterizer. Enabled by the non-default `freetype` feature, e.g `imgui = {version = "...", features=["freetype"]})` + ## [0.7.0] - 2021-02-04 - Upgrade to [Dear ImGui v1.80](https://github.com/ocornut/imgui/releases/tag/v1.80). (Note that the new table functionality is not yet supported, however) diff --git a/README.markdown b/README.markdown index fe039db..3754ac7 100644 --- a/README.markdown +++ b/README.markdown @@ -47,6 +47,7 @@ Window::new(im_str!("Hello world")) for more information and justification for this design. - Easy integration with Glium / pre-ll gfx (renderer) - Easy integration with winit (backend platform) +- Optional support for the freetype font rasterizer ## Choosing a backend platform and a renderer