diff --git a/dll/dll/settings.h b/dll/dll/settings.h index 7709ca16..70400e1c 100644 --- a/dll/dll/settings.h +++ b/dll/dll/settings.h @@ -112,6 +112,8 @@ struct Overlay_Appearance { constexpr const static NotificationPosition default_pos = NotificationPosition::top_right; + std::filesystem::path font_override; + float font_size = 16.0f; float icon_size = 64.0f; diff --git a/dll/settings_parser.cpp b/dll/settings_parser.cpp index abeb13d5..3a4f9b15 100644 --- a/dll/settings_parser.cpp +++ b/dll/settings_parser.cpp @@ -71,7 +71,7 @@ static void load_subscribed_groups_clans(std::string clans_filepath, Settings *s } } -static void load_overlay_appearance(std::string appearance_filepath, Settings *settings_client, Settings *settings_server) +static void load_overlay_appearance(std::string appearance_filepath, Settings *settings_client, Settings *settings_server, std::string &program_path) { std::ifstream appearance_file(utf8_decode(appearance_filepath)); if (appearance_file.is_open()) { @@ -101,7 +101,13 @@ static void load_overlay_appearance(std::string appearance_filepath, Settings *s PRINT_DEBUG(" Overlay appearance line '%s' = '%s'\n", name.c_str(), value.c_str()); try { - if (name.compare("Font_Size") == 0) { + if (name.compare("Font_Override") == 0) { + std::filesystem::path nfont_override = value; + if (nfont_override.is_relative()) + nfont_override = program_path / nfont_override; + settings_client->overlay_appearance.font_override = nfont_override; + settings_server->overlay_appearance.font_override = nfont_override; + } else if (name.compare("Font_Size") == 0) { float nfont_size = std::stof(value, NULL); settings_client->overlay_appearance.font_size = nfont_size; settings_server->overlay_appearance.font_size = nfont_size; @@ -1413,8 +1419,8 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s load_subscribed_groups_clans(local_storage->get_global_settings_path() + "subscribed_groups_clans.txt", settings_client, settings_server); load_subscribed_groups_clans(Local_Storage::get_game_settings_path() + "subscribed_groups_clans.txt", settings_client, settings_server); - load_overlay_appearance(local_storage->get_global_settings_path() + "overlay_appearance.txt", settings_client, settings_server); - load_overlay_appearance(Local_Storage::get_game_settings_path() + "overlay_appearance.txt", settings_client, settings_server); + load_overlay_appearance(local_storage->get_global_settings_path() + "overlay_appearance.txt", settings_client, settings_server, program_path); + load_overlay_appearance(Local_Storage::get_game_settings_path() + "overlay_appearance.txt", settings_client, settings_server, program_path); parse_mods_folder(settings_client, settings_server, local_storage); load_gamecontroller_settings(settings_client); diff --git a/overlay_experimental/steam_overlay.cpp b/overlay_experimental/steam_overlay.cpp index 1c3203f4..f5ddb2ad 100644 --- a/overlay_experimental/steam_overlay.cpp +++ b/overlay_experimental/steam_overlay.cpp @@ -232,7 +232,7 @@ void Steam_Overlay::create_fonts() fonts_atlas.Flags |= ImFontAtlasFlags_NoPowerOfTwoHeight; float font_size = settings->overlay_appearance.font_size; - + static ImFontConfig font_cfg{}; font_cfg.FontDataOwnedByAtlas = false; // https://github.com/ocornut/imgui/blob/master/docs/FONTS.md#loading-font-data-from-memory font_cfg.PixelSnapH = true; @@ -294,7 +294,14 @@ void Steam_Overlay::create_fonts() font_builder.BuildRanges(&ranges); font_cfg.GlyphRanges = ranges.Data; - fonts_atlas.AddFontDefault(&font_cfg); + std::filesystem::path font_override = settings->overlay_appearance.font_override; + if (std::filesystem::exists(font_override)) { + fonts_atlas.AddFontFromFileTTF(font_override.string().c_str(), font_size, &font_cfg); + font_cfg.MergeMode = true; // merge next fonts into the first one, as if they were all just 1 font file + } else { + PRINT_DEBUG("Steam_Overlay::create_fonts override font not exists. %s\n", font_override.c_str()); + } + ImFont *font = fonts_atlas.AddFontFromMemoryCompressedTTF(unifont_compressed_data, unifont_compressed_size, font_size, &font_cfg); font_notif = font_default = font; diff --git a/post_build/steam_settings.EXAMPLE/overlay_appearance.EXAMPLE.txt b/post_build/steam_settings.EXAMPLE/overlay_appearance.EXAMPLE.txt index 7cc2b5e7..317b26da 100644 --- a/post_build/steam_settings.EXAMPLE/overlay_appearance.EXAMPLE.txt +++ b/post_build/steam_settings.EXAMPLE/overlay_appearance.EXAMPLE.txt @@ -1,6 +1,10 @@ +; override font path +Font_Override unifont.ttf + ; global font size -; multiples of 16 is recommended, e.g. 16 32... +; for built-in font, multiple of 16 is recommended. e.g. 16 32... Font_Size 16.0 + ; achievement icon size Icon_Size 64.0