mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-06-02 09:06:54 +02:00
Add new shared pointer and make use of it
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user