From 79944cfa132c623ec5d62c1d61a7e3ab9a33422d Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Tue, 31 Jan 2023 23:51:43 +0000 Subject: [PATCH] Added variables to build SDL2_ttf with HarfBuzz and added functions to the engine to support defining the text direction and script name --- extern/SDL2/CMakeLists.txt | 2 ++ include/GameEngine.h | 9 +++++++++ src/GameEngine.c | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/extern/SDL2/CMakeLists.txt b/extern/SDL2/CMakeLists.txt index 604d7bd..7c5dc2b 100644 --- a/extern/SDL2/CMakeLists.txt +++ b/extern/SDL2/CMakeLists.txt @@ -6,6 +6,8 @@ set(SDL2_DISABLE_UNINSTALL OFF CACHE BOOL "" FORCE) set(SDL2IMAGE_VENDORED ON CACHE BOOL "" FORCE) set(SDL2MIXER_VENDORED ON CACHE BOOL "" FORCE) set(SDL2TTF_VENDORED ON CACHE BOOL "" FORCE) +set(SDL2TTF_HARFBUZZ ON CACHE BOOL "" FORCE) +set(TTF_USE_HARFBUZZ ON CACHE BOOL "" FORCE) set(SDL2IMAGE_TIF ON CACHE BOOL "" FORCE) add_subdirectory(SDL) diff --git a/include/GameEngine.h b/include/GameEngine.h index 86c01bd..c5726b6 100644 --- a/include/GameEngine.h +++ b/include/GameEngine.h @@ -14,6 +14,13 @@ extern "C" { #endif // !__cplusplus +typedef enum { + FONT_DIRECTION_LTR = TTF_DIRECTION_LTR, + FONT_DIRECTION_RTL = TTF_DIRECTION_RTL, + FONT_DIRECTION_TTB = TTF_DIRECTION_TTB, + FONT_DIRECTION_BTT = TTF_DIRECTION_BTT, +} FontDirection; + // GENERAL ENGINE API /** @@ -80,6 +87,8 @@ TextSize get_text_size_from_font_asset(AssetID id, const char *text); void render_text_with_font_asset(AssetID id, const char *text, f32 x, f32 y, SDL_Color color); void set_font_asset_size(AssetID id, u32 size); +i32 set_font_direction(AssetID id, FontDirection direction); +i32 set_font_script_name(AssetID id, const char *script); // END RENDERING API // AUDIO API diff --git a/src/GameEngine.c b/src/GameEngine.c index 9e3e6ca..b98e6f0 100644 --- a/src/GameEngine.c +++ b/src/GameEngine.c @@ -413,6 +413,32 @@ void set_font_asset_size(AssetID id, u32 size) { TTF_SetFontSize(font, size); } +i32 set_font_direction(AssetID id, FontDirection direction) { + if (id < 0) { + return -2; + } + + TTF_Font *font = get_font(GameEngine.asset_manager, id); + if (!font) { + return -2; + } + + return TTF_SetFontDirection(font, (TTF_Direction)direction); +} + +i32 set_font_script_name(AssetID id, const char *script) { + if (id < 0) { + return -2; + } + + TTF_Font *font = get_font(GameEngine.asset_manager, id); + if (!font) { + return -2; + } + + return TTF_SetFontScriptName(font, script); +} + i8 play_audio_asset(AssetID id, i16 loops, bool fade_in, u32 fade_length_in_ms) { if (id < 0) {