From 44970d47462a3a4fe59a74a0caffc51e8862492d Mon Sep 17 00:00:00 2001 From: Narr the Reg <5944268+german77@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:43:25 -0600 Subject: [PATCH 1/2] message: Add ScalableFontMgr headers --- .clang-format | 44 +++++++++++--------- CMakeLists.txt | 8 +++- include/message/euiFontMgr.h | 54 +++++++++++++++++++++++++ include/message/euiScalableFontMgr.h | 60 ++++++++++++++++++++++++++++ include/sys/euiSharcArchive.h | 27 +++++++++++++ 5 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 include/message/euiFontMgr.h create mode 100644 include/message/euiScalableFontMgr.h create mode 100644 include/sys/euiSharcArchive.h diff --git a/.clang-format b/.clang-format index ef86260..08eb890 100644 --- a/.clang-format +++ b/.clang-format @@ -1,10 +1,10 @@ --- -Language: Cpp +Language: Cpp AccessModifierOffset: -4 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false -AlignOperands: true +AlignOperands: true AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortBlocksOnASingleLine: Never @@ -22,28 +22,30 @@ BreakBeforeBinaryOperators: None BreakBeforeBraces: Attach BreakBeforeTernaryOperators: false BreakConstructorInitializersBeforeComma: false -ColumnLimit: 100 -CommentPragmas: '^ (IWYU pragma:|NOLINT)' +ColumnLimit: 100 +CommentPragmas: '^ (IWYU pragma:|NOLINT)' ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: false -DisableFormat: false -ForEachMacros: [] +DisableFormat: false +ForEachMacros: [ ] IncludeCategories: - - Regex: '^<[Ww]indows\.h>$' - Priority: 1 - - Regex: '^<' - Priority: 2 - - Regex: '^"' - Priority: 3 + - Regex: '^<[Ww]indows\.h>$' + Priority: 1 + - Regex: '^<' + Priority: 2 + - Regex: '^"' + Priority: 3 IndentCaseLabels: false -IndentWidth: 4 +IndentWidth: 4 IndentWrappedFunctionNames: false +InsertNewlineAtEOF: true KeepEmptyLinesAtTheStartOfBlocks: false +LineEnding: LF MacroBlockBegin: '' -MacroBlockEnd: '' +MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBlockIndentWidth: 4 @@ -56,19 +58,23 @@ PenaltyBreakString: 1000 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Left -ReflowComments: true -SortIncludes: true +QualifierAlignment: Left +ReflowComments: true +RemoveBracesLLVM: true +SeparateDefinitionBlocks: Always +SortIncludes: true SpaceAfterCStyleCast: false SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 2 -SpacesInAngles: false +SpacesInAngles: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: c++17 -TabWidth: 4 -UseTab: Never +TabWidth: 4 +UseTab: Never +WhitespaceSensitiveMacros: [ "SEAD_ENUM", "SEAD_ENUM_EX", "SEAD_ENUM_EX_VALUES" ] ... diff --git a/CMakeLists.txt b/CMakeLists.txt index c0458ae..433a5d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,9 @@ project(eui CXX ASM) add_library(eui OBJECT include/euiControlBase.h + include/message/euiScalableFontMgr.h + include/message/euiFontMgr.h + include/sys/euiSharcArchive.h src/euiControlBase.cpp ) @@ -11,7 +14,10 @@ target_compile_options(eui PRIVATE -fno-strict-aliasing) target_compile_options(eui PRIVATE -Wno-invalid-offsetof) target_include_directories(eui PUBLIC include/) +if(NOT TARGET sead) + add_subdirectory(../sead) +endif() if(NOT TARGET agl) add_subdirectory(../agl) endif() -target_link_libraries(eui PUBLIC agl) +target_link_libraries(eui PUBLIC agl sead) diff --git a/include/message/euiFontMgr.h b/include/message/euiFontMgr.h new file mode 100644 index 0000000..5c9aeaf --- /dev/null +++ b/include/message/euiFontMgr.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include + +#include "sys/euiSharcArchive.h" + +namespace sead { +class Heap; +} + +namespace nn::font { +class Font; +class ResFont; +} // namespace nn::font + +namespace eui { +class ScalableFontMgr; + +class FontMgr { + SEAD_SINGLETON_DISPOSER(FontMgr) +public: + FontMgr(); + + void initialize(sead::Heap*, void*, u32, const sead::Buffer&, + eui::ScalableFontMgr*); + void finalize(); + void registFont(nn::ui2d::ResourceAccessor*); + const nn::font::Font* tryGetFont(const sead::SafeString&) const; + nn::font::Font* tryGetFont(const sead::SafeString&); + const nn::font::Font* getFont(const sead::SafeString&) const; + nn::font::Font* getFont(const sead::SafeString&); + const nn::font::Font* getFontByMessageIndex(u32) const; + nn::font::Font* getFontByMessageIndex(u32); + void setRubyFont(const sead::SafeString&); + void setRubyFont(const nn::font::Font*); + bool isScalableFont(const sead::SafeString&) const; + void findFontName(sead::BufferedSafeString*, const nn::font::Font*) const; + + ScalableFontMgr* getScalableFontMgr() const { return mScalableFontMrg; } + +private: + char filler[0x8]; + SharcArchive mSharcArchive; + sead::PtrArray _30; + sead::PtrArray _40; + nn::font::Font* mRubyFont; + ScalableFontMgr* mScalableFontMrg; +}; + +static_assert(sizeof(FontMgr) == 0x60); + +} // namespace eui diff --git a/include/message/euiScalableFontMgr.h b/include/message/euiScalableFontMgr.h new file mode 100644 index 0000000..be316f4 --- /dev/null +++ b/include/message/euiScalableFontMgr.h @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include + +namespace nn::font { +class ScalableFont; +class TextureCache; +} // namespace nn::font + +namespace nn::ui2d { +class ResourceAccessor; +} + +namespace eui { +class FontMgr; +class ScalableFontTextBoxEx; + +class ScalableFontMgr { + SEAD_SINGLETON_DISPOSER(ScalableFontMgr) +public: + struct InitializeArg; + + ScalableFontMgr(); + + void initialize(const InitializeArg&); + void update(); + void registFont(nn::ui2d::ResourceAccessor*); + const nn::font::ScalableFont* getFont(const sead::SafeString&) const; + nn::font::ScalableFont* getFont(const sead::SafeString&); + bool isGlyphsReady(const char16*, u32, const nn::font::ScalableFont*, const eui::FontMgr*); + bool registerGlyphs(const char16*, u32, const nn::font::ScalableFont*, const eui::FontMgr*, + s32); + const char* findFontName(const nn::font::ScalableFont*) const; + void reserveRegisterGlyphs(eui::ScalableFontTextBoxEx*); + void dumpTextureCacheGlyphTreeMap() const; + s32 getTextureCacheNoSpaceError() const; + void clearNoSpaceError(); + + bool is_55() const { return _55; } + +private: + bool registerGlyphs_(const char16*, u32, const nn::font::ScalableFont*, const eui::FontMgr*, + s32, bool); + bool isNeedPlot_(char16, u32, u32); + + char filler[0x18]; + nn::font::TextureCache* _38; + sead::Thread* _40; + ScalableFontTextBoxEx* _48; + s32 _50; + bool _54; + bool _55; + bool _56; +}; + +static_assert(sizeof(ScalableFontMgr) == 0x58); + +} // namespace eui diff --git a/include/sys/euiSharcArchive.h b/include/sys/euiSharcArchive.h new file mode 100644 index 0000000..b280fa9 --- /dev/null +++ b/include/sys/euiSharcArchive.h @@ -0,0 +1,27 @@ +#pragma once + +#include + +namespace sead { +class Heap; +} + +namespace eui { + +class SharcArchive { +public: + class FileReader; + + SharcArchive(); + + void finalize(); + void initialize(sead::Heap*, void*, u32); + void startFileReader(eui::SharcArchive::FileReader*) const; + +private: + char _filler[0x8]; +}; + +static_assert(sizeof(SharcArchive) == 0x8); + +} // namespace eui From 34cbe27b6833d4caab8a3ccc8966499623524730 Mon Sep 17 00:00:00 2001 From: Narr the Reg <5944268+german77@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:50:45 -0600 Subject: [PATCH 2/2] First review --- CMakeLists.txt | 10 +++++----- include/message/euiFontMgr.h | 4 ++-- include/message/euiScalableFontMgr.h | 1 + include/sys/euiSharcArchive.h | 3 ++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 433a5d4..b1c6b45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,12 @@ project(eui CXX ASM) add_library(eui OBJECT - include/euiControlBase.h - include/message/euiScalableFontMgr.h - include/message/euiFontMgr.h - include/sys/euiSharcArchive.h + include/euiControlBase.h + include/message/euiFontMgr.h + include/message/euiScalableFontMgr.h + include/sys/euiSharcArchive.h - src/euiControlBase.cpp + src/euiControlBase.cpp ) target_compile_options(eui PRIVATE -fno-exceptions) diff --git a/include/message/euiFontMgr.h b/include/message/euiFontMgr.h index 5c9aeaf..8dff688 100644 --- a/include/message/euiFontMgr.h +++ b/include/message/euiFontMgr.h @@ -22,6 +22,7 @@ class FontMgr { SEAD_SINGLETON_DISPOSER(FontMgr) public: FontMgr(); + virtual ~FontMgr(); void initialize(sead::Heap*, void*, u32, const sead::Buffer&, eui::ScalableFontMgr*); @@ -36,12 +37,11 @@ class FontMgr { void setRubyFont(const sead::SafeString&); void setRubyFont(const nn::font::Font*); bool isScalableFont(const sead::SafeString&) const; - void findFontName(sead::BufferedSafeString*, const nn::font::Font*) const; + bool findFontName(sead::BufferedSafeString*, const nn::font::Font*) const; ScalableFontMgr* getScalableFontMgr() const { return mScalableFontMrg; } private: - char filler[0x8]; SharcArchive mSharcArchive; sead::PtrArray _30; sead::PtrArray _40; diff --git a/include/message/euiScalableFontMgr.h b/include/message/euiScalableFontMgr.h index be316f4..759fa4c 100644 --- a/include/message/euiScalableFontMgr.h +++ b/include/message/euiScalableFontMgr.h @@ -23,6 +23,7 @@ class ScalableFontMgr { struct InitializeArg; ScalableFontMgr(); + virtual ~ScalableFontMgr(); void initialize(const InitializeArg&); void update(); diff --git a/include/sys/euiSharcArchive.h b/include/sys/euiSharcArchive.h index b280fa9..a411e07 100644 --- a/include/sys/euiSharcArchive.h +++ b/include/sys/euiSharcArchive.h @@ -13,13 +13,14 @@ class SharcArchive { class FileReader; SharcArchive(); + ~SharcArchive(); void finalize(); void initialize(sead::Heap*, void*, u32); void startFileReader(eui::SharcArchive::FileReader*) const; private: - char _filler[0x8]; + sead::Resource* mResource; }; static_assert(sizeof(SharcArchive) == 0x8);