diff --git a/Makefile b/Makefile index 83654e0d..7f1fb98f 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ pkg-gba: build .PHONY: generate-studio-rsrc generate-studio-rsrc: + ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/olympic/studio/applib/src/rsrc.json ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json .PHONY: build-player diff --git a/src/olympic/studio/applib/src/CMakeLists.txt b/src/olympic/studio/applib/src/CMakeLists.txt index f3d48657..79fa52d2 100644 --- a/src/olympic/studio/applib/src/CMakeLists.txt +++ b/src/olympic/studio/applib/src/CMakeLists.txt @@ -5,6 +5,7 @@ add_library( clawviewer.cpp deleteconfirmation.cpp filedialogmanager.cpp + font.cpp makecopypopup.cpp newdir.cpp newmenu.cpp diff --git a/src/olympic/studio/applib/src/Roboto-Medium.ttf b/src/olympic/studio/applib/src/Roboto-Medium.ttf new file mode 100644 index 00000000..39c63d74 Binary files /dev/null and b/src/olympic/studio/applib/src/Roboto-Medium.ttf differ diff --git a/src/olympic/studio/applib/src/font.cpp b/src/olympic/studio/applib/src/font.cpp index 5c1f9a25..93dc573e 100644 --- a/src/olympic/studio/applib/src/font.cpp +++ b/src/olympic/studio/applib/src/font.cpp @@ -5,7 +5,7 @@ namespace studio::files { -static const ox::Array RobotoMedium_ttfData { +static constexpr ox::Array RobotoMedium_ttfData { 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x04, 0x00, 0x10, 0x47, 0x50, 0x4f, 0x53, 0x7d, 0xaa, 0x71, 0x8c, 0x00, 0x02, 0x08, 0xa8, 0x00, 0x00, 0x59, 0x0c, 0x47, 0x53, diff --git a/src/olympic/studio/applib/src/rsrc.json b/src/olympic/studio/applib/src/rsrc.json new file mode 100644 index 00000000..257edb6a --- /dev/null +++ b/src/olympic/studio/applib/src/rsrc.json @@ -0,0 +1,11 @@ +{ + "cpp": "font.cpp", + "hpp": "font.hpp", + "namespace": "studio::files", + "files": [ + { + "path": "Roboto-Medium.ttf", + "cpp_name": "RobotoMedium_ttf" + } + ] +} diff --git a/src/olympic/studio/applib/src/studioui.cpp b/src/olympic/studio/applib/src/studioui.cpp index ee549af6..fe6d96e0 100644 --- a/src/olympic/studio/applib/src/studioui.cpp +++ b/src/olympic/studio/applib/src/studioui.cpp @@ -14,6 +14,7 @@ #include #include "clawviewer.hpp" #include "filedialogmanager.hpp" +#include "font.hpp" #include "studioui.hpp" namespace studio { @@ -57,6 +58,19 @@ StudioUI::StudioUI(turbine::Context &ctx, ox::StringParam projectDataDir) noexce m_projectExplorer{keelCtx(m_tctx)}, m_newProject{m_projectDataDir}, m_aboutPopup{m_tctx} { + { + ImFontConfig fontCfg; + fontCfg.FontDataOwnedByAtlas = false; + auto const &io = ImGui::GetIO(); + auto const font = files::RobotoMedium_ttf(); + // const_cast is needed because this data is definitely const, + // but AddFontFromMemoryTTF requires a mutable buffer. + // However, setting fontCfg.FontDataOwnedByAtlas ensures + // that it will still be treated as const. + // ImGui documentation recognize that this is a bad design, + // and hopefully it will change at some point. + io.Fonts->AddFontFromMemoryTTF(const_cast(font.data()), static_cast(font.size()), 13, &fontCfg); + } turbine::setApplicationData(m_tctx, &m_sctx); m_projectExplorer.fileChosen.connect(this, &StudioUI::openFile); m_projectExplorer.addDir.connect(this, &StudioUI::addDir); diff --git a/util/scripts/file-to-cpp.py b/util/scripts/file-to-cpp.py index 79e789b7..2ce5090c 100755 --- a/util/scripts/file-to-cpp.py +++ b/util/scripts/file-to-cpp.py @@ -40,7 +40,7 @@ def file_to_cpp(path: str, cpp_name: str) -> tuple[str, str]: cpp = '' hpp = '' data, data_len = file_to_hex(path, "\t") - cpp += f'\nstatic constexpr ox::Array {cpp_name}Data {{\n{data}\n}};\n' + cpp += f'\nstatic const ox::Array {cpp_name}Data {{\n{data}\n}};\n' cpp += f'\nox::SpanView {cpp_name}() noexcept {{ return {cpp_name}Data; }}\n' hpp += f'\n[[nodiscard]]\nox::SpanView {cpp_name}() noexcept;\n' return cpp, hpp @@ -89,8 +89,9 @@ def proc_rsrc_file(rsrc_path: str):# Open and read the JSON file hpp += h if all_files is not None: all_files_func += f'\t\t{cpp_name}(),\n' - cpp += all_files_func + '\t};\n}\n' - hpp += all_files_func_decl + if all_files is not None: + cpp += all_files_func + '\t};\n}\n' + hpp += all_files_func_decl cpp += pop_ns hpp += pop_ns write_txt_file(os.path.join(base_path, data['cpp']), cpp)