Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mobius3/font-chef
A font cooking library
https://github.com/mobius3/font-chef
c cpp font-baking
Last synced: 3 months ago
JSON representation
A font cooking library
- Host: GitHub
- URL: https://github.com/mobius3/font-chef
- Owner: mobius3
- License: mit
- Created: 2020-05-25T02:10:42.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-11-14T14:55:05.000Z (almost 3 years ago)
- Last Synced: 2024-07-23T05:36:02.675Z (4 months ago)
- Topics: c, cpp, font-baking
- Language: C
- Homepage: https://mobius3.github.io/font-chef
- Size: 810 KB
- Stars: 52
- Watchers: 6
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Font Chef
*Font Chef* is a cross-platform C99 and C++ library to create character atlas of pre-rasterized glyphs from a font at a specified size and color. It is mostly useful in situations where you cannot afford to rasterize a piece of text again whenever it changes.
It abstracts [stb_truetype](https://github.com/nothings/stb/blob/master/stb_truetype.h) to render glyphs to a pixmap and to produce appropriate clipping rects to later display those glyphs.
**Hello world in C++**
```c++
fc::font font = fc::from(font_data, fc::px(30), fc_color_black).add(fc_basic_latin).cook();
fc::render_result result = font.render("Hello, world!");
// use font.pixels() to make a texture
for (auto & map : result) {
render(texture, map.source, map.target);
}
```**Hello world in C**
```c
fc_font * font = fc_construct(font_data, fc_px(30), fc_color_black);
fc_add(fc_basic_latin.start, fc_basic_latin.end);
fc_cook(font);
// use fc_get_pixels(font) to make a textureconst char hello[] = "Hello, world!";
fc_character_mapping output[32];
int count = fc_render(font, text, strlen(hello), &output);
for (int i = 0; i < count; i++) {
render(texture, output[i].source, output[i].target
}
```**Features**
- Small, clean and easy-to-use API
- Ships with C++ wrapper classes
- Considers kerning when resolving rendering rects
- Ships with many standard unicode blocks to choose from
- Rendering API agnostic (it does not render anything directly, it returns pixels and clipping rects)
- Fully documented with examples for each function
- No external dependencies## Integrating with your code
### Using pre-built releases
Download a pre-built release package suitable for your platform and
uncompress it somewhere you'll remember later (usually where you put
other development libraries). Let's assume you uncompressed font-chef to
`/home/me/libs/font-chef`.**Using CMake**: If you're using CMake, specify the variable
`CMAKE_PREFIX_PATH` to point to it before running CMake in your project:```shell script
cmake -DCMAKE_PREFIX_PATH=/home/me/libs
```Afterwards you can use `find_package(font-chef)` and
`target_link_libraries( PUBLIC font-chef)` to link
`` against font-chef.**Not using CMake**: Assuming you uncompressed font-chef to the same path as
above, you should configure your build system to look for include files
inside `/home/me/libs/font-chef/include` and to look for shared objects to
link against inside `/home/me/libs/font-chef/lib`. In case of Windows, you
should also point your linker to `font-chef/bin` as well.### Using a source release and CMake
Uncompress font-chef in a folder inside your project (e.g,
`your-project/third-party/font-chef`) and then use
`add_subdirectory(third-party/font-chef EXCLUDE_FROM_ALL)` to add the
library target. Afterwards you can use `find_package(font-chef)` and
`target_link_libraries( PUBLIC font-chef)` to link
`` against font-chef.Compiling the `.c` files directly in your project is not recommended nor
supported.## Compile from source
You'll need CMake installed and in your path and also capable of finding
you compiler and linker. Then, after checking out this repository:```shell script
mkdir build/
cd build/
cmake ..
make
```## Examples
Examples for C and C++ are in the [src/examples](src/examples) folder. To build them, when running cmake as in [Compile from source](#compile-from-source), add the following variable:
```shell script
cmake .. -DFONT_CHEF_BUILD_EXAMPLES=1
```You will need SDL2 available and CMake needs to be able to find it.
## Documentation
See [here](https://mobius3.github.io/font-chef)