Add new shared pointer and make use of it

This commit is contained in:
Gericom
2026-03-28 12:03:06 +01:00
parent bec797ffe7
commit 21a8790ebc
66 changed files with 1098 additions and 523 deletions

View File

@@ -1,5 +1,6 @@
#pragma once
#include <memory>
#include "core/SharedPtr.h"
#include "../views/IconGridItemView.h"
#include "../views/BannerListItemView.h"
#include "../views/AppBarView.h"
@@ -17,11 +18,11 @@ class IRomBrowserViewFactory
public:
virtual ~IRomBrowserViewFactory() = 0;
virtual IconGridItemView* CreateIconGridItemView() const = 0;
virtual SharedPtr<IconGridItemView> CreateIconGridItemView() const = 0;
virtual IconGridItemView::VramToken UploadIconGridItemViewGraphics(
const VramContext& vramContext) const { return IconGridItemView::VramToken(0); }
virtual BannerListItemView* CreateBannerListItemView(VBlankTextureLoader* vblankTextureLoader) const = 0;
virtual SharedPtr<BannerListItemView> CreateBannerListItemView(VBlankTextureLoader* vblankTextureLoader) const = 0;
virtual BannerListItemView::VramToken UploadBannerListItemViewGraphics(
const VramContext& vramContext) const { return BannerListItemView::VramToken(0); }
@@ -30,9 +31,9 @@ public:
virtual std::unique_ptr<BannerView> CreateFileInfoView() const = 0;
virtual std::unique_ptr<RecyclerViewBase> CreateCoverFlowRecyclerView() const = 0;
virtual SharedPtr<RecyclerViewBase> CreateCoverFlowRecyclerView() const = 0;
virtual FileRecyclerAdapter* CreateCoverFlowRecyclerAdapter(
virtual SharedPtr<FileRecyclerAdapter> CreateCoverFlowRecyclerAdapter(
RomBrowserViewModel* viewModel, const IThemeFileIconFactory* themeFileIconFactory,
VBlankTextureLoader* vblankTextureLoader) const = 0;

View File

@@ -7,10 +7,17 @@ class MaterialColorScheme;
class CarouselRecyclerView : public CoverFlowRecyclerViewBase
{
struct Private { explicit Private() = default; };
public:
explicit CarouselRecyclerView(const MaterialColorScheme* materialColorScheme)
CarouselRecyclerView(Private, const MaterialColorScheme* materialColorScheme)
: _materialColorScheme(materialColorScheme) { }
static SharedPtr<CarouselRecyclerView> CreateShared(const MaterialColorScheme* materialColorScheme)
{
return SharedPtr<CarouselRecyclerView>::MakeShared(Private(), materialColorScheme);
}
static void UploadGraphics(const VramContext& vramContext);
void Update() override;

View File

@@ -9,12 +9,12 @@ MaterialAppBarView::MaterialAppBarView(int x, int y, Orientation orientation,
{
for (int i = 0; i < _startButtonCount + _endButtonCount; i++)
{
_buttons[i] = new IconButton2DView(
_buttons[i] = SharedPtr<IconButton2DView>::MakeShared(
IconButtonView::Type::Standard,
IconButtonView::State::NoToggle,
md::sys::color::inverseOnSurface,
materialColorScheme);
AddChildTail(_buttons[i]);
AddChildTail(_buttons[i].GetPointer());
}
}
@@ -26,7 +26,7 @@ void MaterialAppBarView::InitVram(const VramContext& vramContext)
auto iconButtonVramToken = IconButton2DView::UploadGraphics(*objVramManager);
for (int i = 0; i < _startButtonCount + _endButtonCount; i++)
{
static_cast<IconButton2DView*>(_buttons[i])->SetGraphics(iconButtonVramToken);
static_cast<IconButton2DView*>(_buttons[i].GetPointer())->SetGraphics(iconButtonVramToken);
}
}
}

View File

@@ -13,21 +13,15 @@ void MaterialCoverFlowFileRecyclerAdapter::GetViewSize(int& width, int& height)
height = COVER_HEIGHT;
}
View* MaterialCoverFlowFileRecyclerAdapter::CreateView() const
SharedPtr<View> MaterialCoverFlowFileRecyclerAdapter::CreateView() const
{
return new MaterialCoverView(_vblankTextureLoader);
return SharedPtr<MaterialCoverView>::MakeShared(_vblankTextureLoader);
}
void MaterialCoverFlowFileRecyclerAdapter::DestroyView(View* view) const
{
auto coverView = static_cast<MaterialCoverView*>(view);
delete coverView;
}
TaskResult<void> MaterialCoverFlowFileRecyclerAdapter::BindView(View* view, int index,
TaskResult<void> MaterialCoverFlowFileRecyclerAdapter::BindView(SharedPtr<View> view, int index,
const InternalFileInfo* internalFileInfo, const vu8& cancelRequested) const
{
auto coverView = static_cast<MaterialCoverView*>(view);
auto coverView = static_cast<MaterialCoverView*>(view.GetPointer());
auto cover = _fileInfoManager->GetFileCover(index);
if (cancelRequested)
{
@@ -45,10 +39,10 @@ TaskResult<void> MaterialCoverFlowFileRecyclerAdapter::BindView(View* view, int
return TaskResult<void>::Completed();
}
void MaterialCoverFlowFileRecyclerAdapter::ReleaseView(View* view, int index) const
void MaterialCoverFlowFileRecyclerAdapter::ReleaseView(SharedPtr<View> view, int index) const
{
LOG_DEBUG("Releasing %d\n", index);
auto coverView = static_cast<MaterialCoverView*>(view);
auto coverView = static_cast<MaterialCoverView*>(view.GetPointer());
coverView->ClearCover();
_fileInfoManager->ReleaseFileInfo(index);
}

View File

@@ -19,15 +19,14 @@ public:
, _coverRepository(coverRepository) { }
void GetViewSize(int& width, int& height) const override;
View* CreateView() const override;
void DestroyView(View* view) const override;
void ReleaseView(View* view, int index) const override;
SharedPtr<View> CreateView() const override;
void ReleaseView(SharedPtr<View> view, int index) const override;
private:
const IRomBrowserViewFactory* _romBrowserViewFactory;
VBlankTextureLoader* _vblankTextureLoader;
const ICoverRepository* _coverRepository;
TaskResult<void> BindView(View* view, int index,
TaskResult<void> BindView(SharedPtr<View> view, int index,
const InternalFileInfo* internalFileInfo, const vu8& cancelRequested) const override;
};

View File

@@ -19,7 +19,7 @@ void MaterialCoverView::InitVram(const VramContext& vramContext)
void MaterialCoverView::Draw(GraphicsContext& graphicsContext)
{
if (_cover.IsValid() && _textureLoadRequest.GetState() == VBlankTextureLoadRequestState::LoadComplete)
if (_cover.Lock() && _textureLoadRequest.GetState() == VBlankTextureLoadRequestState::LoadComplete)
{
Gx::TexImageParam(_texVramOffset >> 3, false, true, false, true, GX_TEXSIZE_128,
GX_TEXSIZE_128, GX_TEXFMT_PLTT256, false, GX_TEXGEN_NONE);
@@ -46,11 +46,11 @@ void MaterialCoverView::Draw(GraphicsContext& graphicsContext)
void MaterialCoverView::UploadCoverGraphics()
{
if (_cover.IsValid())
if (auto cover = _cover.Lock())
{
_cover->SetTexVramOffset(_texVramOffset, _plttVramOffset);
cover->SetTexVramOffset(_texVramOffset, _plttVramOffset);
_vblankTextureLoader->CancelLoad(_textureLoadRequest);
_textureLoadRequest = _cover->CreateTextureLoadRequest();
_textureLoadRequest = cover->CreateTextureLoadRequest();
_vblankTextureLoader->RequestLoad(_textureLoadRequest);
}
}

View File

@@ -1,6 +1,5 @@
#pragma once
#include <memory>
#include "core/SharedPtr.h"
#include "core/AtomicSharedPtr.h"
#include "gui/views/View.h"
#include "romBrowser/FileType/FileCover.h"
#include "gui/VBlankTextureLoader.h"
@@ -27,19 +26,13 @@ public:
void SetCover(SharedPtr<FileCover> cover)
{
if (_cover.IsValid())
{
_vblankTextureLoader->CancelLoad(_textureLoadRequest);
}
_vblankTextureLoader->CancelLoad(_textureLoadRequest);
_cover = std::move(cover);
}
void ClearCover()
{
if (_cover.IsValid())
{
_vblankTextureLoader->CancelLoad(_textureLoadRequest);
}
_vblankTextureLoader->CancelLoad(_textureLoadRequest);
_cover.Reset();
}
@@ -47,7 +40,7 @@ public:
private:
VBlankTextureLoader* _vblankTextureLoader;
SharedPtr<FileCover> _cover;
AtomicSharedPtr<FileCover> _cover;
VBlankTextureLoadRequest _textureLoadRequest;
u32 _texVramOffset = 0;
u32 _plttVramOffset = 0;

View File

@@ -18,9 +18,9 @@ public:
const IFontRepository* fontRepository)
: _materialColorScheme(materialColorScheme), _fontRepository(fontRepository) { }
IconGridItemView* CreateIconGridItemView() const override
SharedPtr<IconGridItemView> CreateIconGridItemView() const override
{
return new MaterialIconGridItemView(_materialColorScheme);
return SharedPtr<MaterialIconGridItemView>::MakeShared(_materialColorScheme);
}
IconGridItemView::VramToken UploadIconGridItemViewGraphics(
@@ -29,9 +29,9 @@ public:
return MaterialIconGridItemView::UploadGraphics(vramContext);
}
BannerListItemView* CreateBannerListItemView(VBlankTextureLoader* vblankTextureLoader) const override
SharedPtr<BannerListItemView> CreateBannerListItemView(VBlankTextureLoader* vblankTextureLoader) const override
{
return new MaterialBannerListItemView(_materialColorScheme, _fontRepository);
return SharedPtr<MaterialBannerListItemView>::MakeShared(_materialColorScheme, _fontRepository);
}
BannerListItemView::VramToken UploadBannerListItemViewGraphics(
@@ -51,16 +51,16 @@ public:
return std::make_unique<MaterialFileInfoCardView>(_materialColorScheme, _fontRepository);
}
std::unique_ptr<RecyclerViewBase> CreateCoverFlowRecyclerView() const override
SharedPtr<RecyclerViewBase> CreateCoverFlowRecyclerView() const override
{
return std::make_unique<CarouselRecyclerView>(_materialColorScheme);
return CarouselRecyclerView::CreateShared(_materialColorScheme);
}
FileRecyclerAdapter* CreateCoverFlowRecyclerAdapter(
SharedPtr<FileRecyclerAdapter> CreateCoverFlowRecyclerAdapter(
RomBrowserViewModel* viewModel, const IThemeFileIconFactory* themeFileIconFactory,
VBlankTextureLoader* vblankTextureLoader) const override
{
return new MaterialCoverFlowFileRecyclerAdapter(
return SharedPtr<MaterialCoverFlowFileRecyclerAdapter>::MakeShared(
&viewModel->GetFileInfoManager(), viewModel->GetIoTaskQueue(),
themeFileIconFactory, this, vblankTextureLoader, &viewModel->GetCoverRepository());
}

View File

@@ -4,8 +4,6 @@
#include "romBrowser/views/IconButton3DView.h"
#include "CustomAppBarView.h"
#define BLOCK_VTX_PACK(x, y, z) (((x)&0x3FF) | ((((y) >> 3) & 0x3FF) << 10) | ((z) << 20))
CustomAppBarView::CustomAppBarView(int x, int y, Orientation orientation,
int startButtonCount, int endButtonCount, const MaterialColorScheme* materialColorScheme,
u32 scrimTexVramOffset, u32 scrimPlttVramOffset)
@@ -14,12 +12,12 @@ CustomAppBarView::CustomAppBarView(int x, int y, Orientation orientation,
{
for (int i = 0; i < _startButtonCount + _endButtonCount; i++)
{
_buttons[i] = new IconButton3DView(
_buttons[i] = SharedPtr<IconButton3DView>::MakeShared(
IconButtonView::Type::Tonal,
IconButtonView::State::NoToggle,
md::sys::color::inverseOnSurface,
materialColorScheme);
AddChildTail(_buttons[i]);
AddChildTail(_buttons[i].GetPointer());
}
}

View File

@@ -21,15 +21,15 @@ public:
const IFontRepository* fontRepository)
: _customThemeInfo(customThemeInfo), _materialColorScheme(materialColorScheme), _fontRepository(fontRepository) { }
IconGridItemView* CreateIconGridItemView() const override
SharedPtr<IconGridItemView> CreateIconGridItemView() const override
{
return new CustomIconGridItemView(_customThemeInfo, _gridCellTexVramOffset, _gridCellPlttVramOffset,
return SharedPtr<CustomIconGridItemView>::MakeShared(_customThemeInfo, _gridCellTexVramOffset, _gridCellPlttVramOffset,
_gridCellSelectedTexVramOffset, _gridCellSelectedPlttVramOffset);
}
BannerListItemView* CreateBannerListItemView(VBlankTextureLoader* vblankTextureLoader) const override
SharedPtr<BannerListItemView> CreateBannerListItemView(VBlankTextureLoader* vblankTextureLoader) const override
{
return new CustomBannerListItemView(_customThemeInfo, _materialColorScheme, _fontRepository,
return SharedPtr<CustomBannerListItemView>::MakeShared(_customThemeInfo, _materialColorScheme, _fontRepository,
_bannerListCellTexVramOffset, _bannerListCellPlttVramOffset,
_bannerListCellSelectedTexVramOffset, _bannerListCellSelectedPlttVramOffset, vblankTextureLoader);
}
@@ -51,16 +51,16 @@ public:
return std::make_unique<CustomFileInfoView>(_customThemeInfo, _fontRepository);
}
std::unique_ptr<RecyclerViewBase> CreateCoverFlowRecyclerView() const override
SharedPtr<RecyclerViewBase> CreateCoverFlowRecyclerView() const override
{
return std::make_unique<CoverFlowRecyclerView>();
return CoverFlowRecyclerView::CreateShared();
}
FileRecyclerAdapter* CreateCoverFlowRecyclerAdapter(
SharedPtr<FileRecyclerAdapter> CreateCoverFlowRecyclerAdapter(
RomBrowserViewModel* viewModel, const IThemeFileIconFactory* themeFileIconFactory,
VBlankTextureLoader* vblankTextureLoader) const override
{
return new CoverFlowFileRecyclerAdapter(
return SharedPtr<CoverFlowFileRecyclerAdapter>::MakeShared(
&viewModel->GetFileInfoManager(), viewModel->GetIoTaskQueue(),
themeFileIconFactory, this, vblankTextureLoader, &viewModel->GetCoverRepository());
}