diff --git a/arm9/source/romBrowser/FileType/FileIcon.h b/arm9/source/romBrowser/FileType/FileIcon.h index 514aa4f..0d2e548 100644 --- a/arm9/source/romBrowser/FileType/FileIcon.h +++ b/arm9/source/romBrowser/FileType/FileIcon.h @@ -13,9 +13,17 @@ class FileIcon public: virtual ~FileIcon() = 0; - /// @brief Uploads the graphics of this icon to the specified \p vram address. - /// @param vram The vram address to load the graphics to. - virtual void UploadGraphics(vu16* vram) = 0; + /// @brief Sets the OBJ vram address and offset to use. + /// @param objVramAddress The OBJ vram address to use. + /// @param objVramOffset The OBJ vram offset to use. + virtual void SetVramAddress(vu16* objVramAddress, u32 objVramOffset) + { + _vramAddress = objVramAddress; + _vramOffset = objVramOffset; + } + + /// @brief Uploads the graphics of this icon to the vram address specified by SetVramAddress. + virtual void UploadGraphics() = 0; /// @brief Updates this icon. virtual void Update() { } @@ -25,10 +33,6 @@ public: /// @param backgroundColor The color on which the icon is drawn. virtual void Draw(GraphicsContext& graphicsContext, const Rgb<8, 8, 8>& backgroundColor) = 0; - /// @brief Sets the OBJ vram offset of this icon. - /// @param offset The OBJ vram offset. - void SetObjVramOffset(u32 offset) { _vramOffset = offset; } - /// @brief Sets the icon animation frame. /// @param frame The animation frame. void SetAnimFrame(u32 frame) @@ -50,6 +54,7 @@ public: } protected: + vu16* _vramAddress = nullptr; u32 _vramOffset = 0; u32 _frame = 0; Point _position; diff --git a/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.cpp b/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.cpp index e2ad50a..2126d67 100644 --- a/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.cpp +++ b/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.cpp @@ -38,14 +38,18 @@ NdsFileIcon::NdsFileIcon(const nds_banner_t* banner) } } -void NdsFileIcon::UploadGraphics(vu16* vram) +void NdsFileIcon::SetVramAddress(vu16* objVramAddress, u32 objVramOffset) { - _vramAddress = vram; + FileIcon::SetVramAddress(objVramAddress, objVramOffset); _currentVramSlot = 0; _currentGfxIdx = -1; - if (!_animated) +} + +void NdsFileIcon::UploadGraphics() +{ + if (_vramAddress != nullptr && !_animated) { - dma_ntrCopy32(3, _banner->iconGfx, vram, sizeof(_banner->iconGfx)); + dma_ntrCopy32(3, _banner->iconGfx, _vramAddress, sizeof(_banner->iconGfx)); } } diff --git a/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.h b/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.h index 611ea3f..6a5095e 100644 --- a/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.h +++ b/arm9/source/romBrowser/FileType/Nds/NdsFileIcon.h @@ -8,7 +8,8 @@ class NdsFileIcon : public FileIcon public: explicit NdsFileIcon(const nds_banner_t* banner); - void UploadGraphics(vu16* vram) override; + void SetVramAddress(vu16* objVramAddress, u32 objVramOffset) override; + void UploadGraphics() override; void Update() override; void Draw(GraphicsContext& graphicsContext, const Rgb<8, 8, 8>& backgroundColor) override; @@ -16,13 +17,11 @@ private: const nds_banner_t* _banner; bool _animated; int _animTokenIdx; - // int _durationCounter; u32 _lastAnimToken; u32 _animLength; u16 _tokenStartTimes[65]; bool _loop; - vu16* _vramAddress = nullptr; int _currentVramSlot = 0; int _currentGfxIdx = -1; }; \ No newline at end of file diff --git a/arm9/source/romBrowser/FileType/StaticIcon.cpp b/arm9/source/romBrowser/FileType/StaticIcon.cpp index d1f84c1..064b955 100644 --- a/arm9/source/romBrowser/FileType/StaticIcon.cpp +++ b/arm9/source/romBrowser/FileType/StaticIcon.cpp @@ -7,9 +7,12 @@ #include "gui/palette/DirectPalette.h" #include "StaticIcon.h" -void StaticIcon::UploadGraphics(vu16* vram) +void StaticIcon::UploadGraphics() { - dma_ntrCopy32(3, _tileData, vram, 512); + if (_vramAddress != nullptr) + { + dma_ntrCopy32(3, _tileData, _vramAddress, 512); + } } void StaticIcon::Update() diff --git a/arm9/source/romBrowser/FileType/StaticIcon.h b/arm9/source/romBrowser/FileType/StaticIcon.h index 69f896e..a887c3a 100644 --- a/arm9/source/romBrowser/FileType/StaticIcon.h +++ b/arm9/source/romBrowser/FileType/StaticIcon.h @@ -7,7 +7,7 @@ public: StaticIcon(const u8* tileData, const u16* paletteData) : _tileData(tileData), _paletteData(paletteData) { } - void UploadGraphics(vu16* vram) override; + void UploadGraphics() override; void Update() override; void Draw(GraphicsContext& graphicsContext, const Rgb<8, 8, 8>& backgroundColor) override; diff --git a/arm9/source/romBrowser/Theme/Material/MaterialBannerListItemView.cpp b/arm9/source/romBrowser/Theme/Material/MaterialBannerListItemView.cpp index 28d0755..46a4f7f 100644 --- a/arm9/source/romBrowser/Theme/Material/MaterialBannerListItemView.cpp +++ b/arm9/source/romBrowser/Theme/Material/MaterialBannerListItemView.cpp @@ -119,7 +119,6 @@ void MaterialBannerListItemView::Draw(GraphicsContext& graphicsContext) if (_icon) { - _icon->SetObjVramOffset(_iconVramOffset); _icon->SetPosition(6 + _position.x, 6 + _position.y); _icon->Draw(graphicsContext, frontColor); } diff --git a/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.cpp b/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.cpp index e77fcb3..49a596e 100644 --- a/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.cpp +++ b/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.cpp @@ -24,23 +24,26 @@ MaterialFileIcon::MaterialFileIcon(const TCHAR* name, const MaterialColorScheme* _displayName[i] = 0; } -void MaterialFileIcon::UploadGraphics(vu16* vram) +void MaterialFileIcon::UploadGraphics() { - dma_ntrCopy32(3, GetIconTiles(), vram, 32 * 32 / 2); + if (_vramAddress != nullptr) + { + dma_ntrCopy32(3, GetIconTiles(), _vramAddress, 32 * 32 / 2); - auto font = _fontRepository->GetFont(FontType::Medium11); - u8 tileBuffer[32 * 16 / 2]; - memset(tileBuffer, 0, sizeof(tileBuffer)); - u32 textWidth, textHeight; - nft2_measureString(font, _displayName, textWidth, textHeight); - nft2_string_render_params_t renderParams; - renderParams.x = ((int)32 - (int)textWidth) / 2; - renderParams.y = 0; - renderParams.width = 32; - renderParams.height = 16; - renderParams.a5i3 = false; - nft2_renderString(font, _displayName, tileBuffer, 32, &renderParams); - memcpy((u8*)vram + largeFolderIconTilesLen, tileBuffer, sizeof(tileBuffer)); + auto font = _fontRepository->GetFont(FontType::Medium11); + u8 tileBuffer[32 * 16 / 2]; + memset(tileBuffer, 0, sizeof(tileBuffer)); + u32 textWidth, textHeight; + nft2_measureString(font, _displayName, textWidth, textHeight); + nft2_string_render_params_t renderParams; + renderParams.x = ((int)32 - (int)textWidth) / 2; + renderParams.y = 0; + renderParams.width = 32; + renderParams.height = 16; + renderParams.a5i3 = false; + nft2_renderString(font, _displayName, tileBuffer, 32, &renderParams); + memcpy((u8*)_vramAddress + largeFolderIconTilesLen, tileBuffer, sizeof(tileBuffer)); + } } void MaterialFileIcon::Draw(GraphicsContext& graphicsContext, const Rgb<8, 8, 8>& backgroundColor) diff --git a/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.h b/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.h index 8aa2e4e..0c740b2 100644 --- a/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.h +++ b/arm9/source/romBrowser/Theme/Material/MaterialFileIcon.h @@ -11,7 +11,7 @@ public: MaterialFileIcon(const TCHAR* name, const MaterialColorScheme* materialColorScheme, const IFontRepository* fontRepository); - void UploadGraphics(vu16* vram) override; + void UploadGraphics() override; void Draw(GraphicsContext& graphicsContext, const Rgb<8, 8, 8>& backgroundColor) override; protected: diff --git a/arm9/source/romBrowser/Theme/Material/MaterialFileInfoCardView.cpp b/arm9/source/romBrowser/Theme/Material/MaterialFileInfoCardView.cpp index 3bf3536..d8ec052 100644 --- a/arm9/source/romBrowser/Theme/Material/MaterialFileInfoCardView.cpp +++ b/arm9/source/romBrowser/Theme/Material/MaterialFileInfoCardView.cpp @@ -78,7 +78,6 @@ void MaterialFileInfoCardView::Draw(GraphicsContext& graphicsContext) if (_icon) { - _icon->SetObjVramOffset(_iconVramOffset); _icon->Draw(graphicsContext, fgColor); } } diff --git a/arm9/source/romBrowser/Theme/Material/MaterialIconGridItemView.cpp b/arm9/source/romBrowser/Theme/Material/MaterialIconGridItemView.cpp index 86ca5de..adf68db 100644 --- a/arm9/source/romBrowser/Theme/Material/MaterialIconGridItemView.cpp +++ b/arm9/source/romBrowser/Theme/Material/MaterialIconGridItemView.cpp @@ -47,7 +47,6 @@ void MaterialIconGridItemView::Draw(GraphicsContext& graphicsContext) if (_icon) { - _icon->SetObjVramOffset(_iconVramOffset); _icon->SetPosition(6 + _position.x, 6 + _position.y); _icon->Draw(graphicsContext, frontColor); } diff --git a/arm9/source/romBrowser/Theme/custom/CustomBannerListItemView.cpp b/arm9/source/romBrowser/Theme/custom/CustomBannerListItemView.cpp index 8ba2ad2..6572dc5 100644 --- a/arm9/source/romBrowser/Theme/custom/CustomBannerListItemView.cpp +++ b/arm9/source/romBrowser/Theme/custom/CustomBannerListItemView.cpp @@ -117,7 +117,6 @@ void CustomBannerListItemView::Draw(GraphicsContext& graphicsContext) if (_icon) { - _icon->SetObjVramOffset(_iconVramOffset); _icon->SetPosition(6 + _position.x, 6 + _position.y); _icon->Draw(graphicsContext, backgroundColor); } diff --git a/arm9/source/romBrowser/Theme/custom/CustomFileInfoView.cpp b/arm9/source/romBrowser/Theme/custom/CustomFileInfoView.cpp index ad8925d..a910316 100644 --- a/arm9/source/romBrowser/Theme/custom/CustomFileInfoView.cpp +++ b/arm9/source/romBrowser/Theme/custom/CustomFileInfoView.cpp @@ -47,7 +47,6 @@ void CustomFileInfoView::Draw(GraphicsContext& graphicsContext) if (_icon) { - _icon->SetObjVramOffset(_iconVramOffset); _icon->Draw(graphicsContext, _backgroundColor); } } diff --git a/arm9/source/romBrowser/Theme/custom/CustomIconGridItemView.cpp b/arm9/source/romBrowser/Theme/custom/CustomIconGridItemView.cpp index 286489b..23cf1a6 100644 --- a/arm9/source/romBrowser/Theme/custom/CustomIconGridItemView.cpp +++ b/arm9/source/romBrowser/Theme/custom/CustomIconGridItemView.cpp @@ -47,7 +47,6 @@ void CustomIconGridItemView::Draw(GraphicsContext& graphicsContext) if (_icon) { - _icon->SetObjVramOffset(_iconVramOffset); _icon->SetPosition(6 + _position.x, 6 + _position.y); _icon->Draw(graphicsContext, Rgb<8, 8, 8>(200, 200, 200)); } diff --git a/arm9/source/romBrowser/views/BannerView.h b/arm9/source/romBrowser/views/BannerView.h index 36511e8..93bb97f 100644 --- a/arm9/source/romBrowser/views/BannerView.h +++ b/arm9/source/romBrowser/views/BannerView.h @@ -26,13 +26,17 @@ public: void SetIcon(std::unique_ptr icon) { _icon = std::move(icon); + if (_icon) + { + _icon->SetVramAddress(_iconVram, _iconVramOffset); + } } void UploadIconGraphics() const { if (_icon) { - _icon->UploadGraphics(_iconVram); + _icon->UploadGraphics(); } } diff --git a/arm9/source/romBrowser/views/IconGridItemView.h b/arm9/source/romBrowser/views/IconGridItemView.h index aaeb8c3..5d3b6bb 100644 --- a/arm9/source/romBrowser/views/IconGridItemView.h +++ b/arm9/source/romBrowser/views/IconGridItemView.h @@ -27,13 +27,17 @@ public: void SetIcon(std::unique_ptr icon) { _icon = std::move(icon); + if (_icon) + { + _icon->SetVramAddress(_iconVram, _iconVramOffset); + } } void UploadIconGraphics() const { if (_icon) { - _icon->UploadGraphics(_iconVram); + _icon->UploadGraphics(); } }