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:
@@ -6,21 +6,12 @@
|
||||
AppBarView::AppBarView(int x, int y, Orientation orientation,
|
||||
int startButtonCount, int endButtonCount, const MaterialColorScheme* materialColorScheme)
|
||||
: _orientation(orientation)
|
||||
, _buttons(std::make_unique<IconButtonView*[]>(startButtonCount + endButtonCount))
|
||||
, _buttons(std::make_unique<SharedPtr<IconButtonView>[]>(startButtonCount + endButtonCount))
|
||||
, _startButtonCount(startButtonCount), _endButtonCount(endButtonCount)
|
||||
{
|
||||
SetPosition(x, y);
|
||||
}
|
||||
|
||||
AppBarView::~AppBarView()
|
||||
{
|
||||
for (int i = 0; i < _startButtonCount + _endButtonCount; i++)
|
||||
{
|
||||
delete _buttons[i];
|
||||
_buttons[i] = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle AppBarView::GetBounds() const
|
||||
{
|
||||
if (_orientation == Orientation::Horizontal)
|
||||
@@ -39,9 +30,9 @@ void AppBarView::Update()
|
||||
ViewContainer::Update();
|
||||
}
|
||||
|
||||
View* AppBarView::MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source)
|
||||
SharedPtr<View> AppBarView::MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source)
|
||||
{
|
||||
int idx = FindButtonIndex(currentFocus);
|
||||
int idx = FindButtonIndex(currentFocus.GetPointer());
|
||||
if (idx >= 0)
|
||||
{
|
||||
if (_orientation == Orientation::Horizontal)
|
||||
@@ -71,21 +62,28 @@ View* AppBarView::MoveFocus(View* currentFocus, FocusMoveDirection direction, Vi
|
||||
else if ((_orientation == Orientation::Horizontal && (direction == FocusMoveDirection::Up || direction == FocusMoveDirection::Down)) ||
|
||||
(_orientation == Orientation::Vertical && (direction == FocusMoveDirection::Left || direction == FocusMoveDirection::Right)))
|
||||
{
|
||||
if (currentFocus == nullptr)
|
||||
if (!currentFocus)
|
||||
return _buttons[0];
|
||||
Point curFocusPoint = currentFocus->GetBounds().GetCenter();
|
||||
s64 bestDistance = std::numeric_limits<s64>::max();
|
||||
View* nearestButton = nullptr;
|
||||
int nearestButton = -1;
|
||||
for (int i = 0; i < _startButtonCount + _endButtonCount; i++)
|
||||
{
|
||||
s64 distance = curFocusPoint.DistanceSquaredTo(_buttons[i]->GetBounds().GetCenter());
|
||||
if (distance < bestDistance)
|
||||
{
|
||||
bestDistance = distance;
|
||||
nearestButton = _buttons[i];
|
||||
nearestButton = i;
|
||||
}
|
||||
}
|
||||
return nearestButton;
|
||||
if (nearestButton >= 0)
|
||||
{
|
||||
return _buttons[nearestButton];
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
return View::MoveFocus(currentFocus, direction, this);
|
||||
@@ -126,7 +124,7 @@ int AppBarView::FindButtonIndex(const View* view)
|
||||
{
|
||||
for (int i = 0; i < _startButtonCount + _endButtonCount; i++)
|
||||
{
|
||||
if (_buttons[i] == view)
|
||||
if (_buttons[i].GetPointer() == view)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -14,8 +14,6 @@ public:
|
||||
Vertical
|
||||
};
|
||||
|
||||
virtual ~AppBarView();
|
||||
|
||||
void SetButtonIcon(int button, u32 vramOffset)
|
||||
{
|
||||
_buttons[button]->SetIconVramOffset(vramOffset);
|
||||
@@ -28,14 +26,14 @@ public:
|
||||
|
||||
Rectangle GetBounds() const override;
|
||||
void Update() override;
|
||||
View* MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
SharedPtr<View> MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
void Focus(FocusManager& focusManager, int button);
|
||||
|
||||
constexpr Orientation GetOrientation() const { return _orientation; }
|
||||
|
||||
protected:
|
||||
Orientation _orientation;
|
||||
std::unique_ptr<IconButtonView*[]> _buttons;
|
||||
std::unique_ptr<SharedPtr<IconButtonView>[]> _buttons;
|
||||
int _startButtonCount;
|
||||
int _endButtonCount;
|
||||
|
||||
|
||||
@@ -5,7 +5,16 @@
|
||||
|
||||
class CoverFlowRecyclerView : public CoverFlowRecyclerViewBase
|
||||
{
|
||||
struct Private { explicit Private() = default; };
|
||||
|
||||
public:
|
||||
explicit CoverFlowRecyclerView(Private) { }
|
||||
|
||||
static SharedPtr<CoverFlowRecyclerView> CreateShared()
|
||||
{
|
||||
return SharedPtr<CoverFlowRecyclerView>::MakeShared(Private());
|
||||
}
|
||||
|
||||
void Update() override;
|
||||
void Draw(GraphicsContext& graphicsContext) override;
|
||||
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
#include "common.h"
|
||||
#include "CoverFlowRecyclerViewBase.h"
|
||||
|
||||
CoverFlowRecyclerViewBase::~CoverFlowRecyclerViewBase()
|
||||
{
|
||||
for (u32 i = _viewPoolFreeCount; i < _viewPool.size(); i++)
|
||||
{
|
||||
_adapter->ReleaseView(_viewPool[i].view, _viewPool[i].itemIdx);
|
||||
}
|
||||
}
|
||||
|
||||
void CoverFlowRecyclerViewBase::InitVram(const VramContext& vramContext)
|
||||
{
|
||||
for (u32 i = 0; i < _viewPool.size(); i++)
|
||||
@@ -9,17 +17,18 @@ void CoverFlowRecyclerViewBase::InitVram(const VramContext& vramContext)
|
||||
}
|
||||
}
|
||||
|
||||
void CoverFlowRecyclerViewBase::SetAdapter(const RecyclerAdapter* adapter, int initialSelectedIndex)
|
||||
void CoverFlowRecyclerViewBase::SetAdapter(SharedPtr<const RecyclerAdapter> adapter, int initialSelectedIndex)
|
||||
{
|
||||
if (_adapter)
|
||||
{
|
||||
_selectedItem = nullptr;
|
||||
for (u32 i = 0; i < _viewPool.size(); i++)
|
||||
for (u32 i = _viewPoolFreeCount; i < _viewPool.size(); i++)
|
||||
{
|
||||
_adapter->DestroyView(_viewPool[i].view);
|
||||
_adapter->ReleaseView(_viewPool[i].view, _viewPool[i].itemIdx);
|
||||
_viewPool[i].view.Reset();
|
||||
}
|
||||
}
|
||||
_adapter = adapter;
|
||||
_adapter = std::move(adapter);
|
||||
// _adapter->GetViewSize(_itemWidth, _itemHeight);
|
||||
_itemCount = _adapter->GetItemCount();
|
||||
|
||||
@@ -41,14 +50,14 @@ void CoverFlowRecyclerViewBase::SetAdapter(const RecyclerAdapter* adapter, int i
|
||||
}
|
||||
}
|
||||
|
||||
View* CoverFlowRecyclerViewBase::MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source)
|
||||
SharedPtr<View> CoverFlowRecyclerViewBase::MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source)
|
||||
{
|
||||
if (!_selectedItem || currentFocus != _selectedItem->view)
|
||||
if (!_selectedItem || currentFocus.GetPointer() != _selectedItem->view.GetPointer())
|
||||
{
|
||||
// incoming focus
|
||||
if (direction == FocusMoveDirection::Down)
|
||||
{
|
||||
return _selectedItem ? _selectedItem->view : this;
|
||||
return _selectedItem ? _selectedItem->view : SharedFromThis();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -78,7 +87,7 @@ View* CoverFlowRecyclerViewBase::MoveFocus(View* currentFocus, FocusMoveDirectio
|
||||
return View::MoveFocus(currentFocus, direction, this);
|
||||
}
|
||||
|
||||
return _selectedItem ? _selectedItem->view : this;
|
||||
return _selectedItem ? _selectedItem->view : SharedFromThis();
|
||||
}
|
||||
|
||||
CoverFlowRecyclerViewBase::ViewPoolEntry* CoverFlowRecyclerViewBase::GetViewPoolEntryByItemIndex(int itemIdx)
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
#pragma once
|
||||
#include <array>
|
||||
#include "core/EnableSharedFromThis.h"
|
||||
#include "gui/views/RecyclerViewBase.h"
|
||||
|
||||
class CoverFlowRecyclerViewBase : public RecyclerViewBase
|
||||
class CoverFlowRecyclerViewBase : public RecyclerViewBase, public EnableSharedFromThis<CoverFlowRecyclerViewBase>
|
||||
{
|
||||
public:
|
||||
~CoverFlowRecyclerViewBase() override;
|
||||
|
||||
void InitVram(const VramContext& vramContext) override;
|
||||
void SetAdapter(const RecyclerAdapter* adapter, int initialSelectedIndex = 0) override;
|
||||
View* MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
void SetAdapter(SharedPtr<const RecyclerAdapter> adapter, int initialSelectedIndex = 0) override;
|
||||
SharedPtr<View> MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
|
||||
Rectangle GetBounds() const override
|
||||
{
|
||||
@@ -16,7 +19,14 @@ public:
|
||||
|
||||
void Focus(FocusManager& focusManager) override
|
||||
{
|
||||
focusManager.Focus(_selectedItem ? _selectedItem->view : this);
|
||||
if (_selectedItem == nullptr)
|
||||
{
|
||||
focusManager.Focus(SharedFromThis());
|
||||
}
|
||||
else
|
||||
{
|
||||
focusManager.Focus(_selectedItem->view);
|
||||
}
|
||||
}
|
||||
|
||||
int GetSelectedItem() const override
|
||||
@@ -27,7 +37,7 @@ public:
|
||||
protected:
|
||||
struct ViewPoolEntry
|
||||
{
|
||||
View* view;
|
||||
SharedPtr<View> view;
|
||||
int itemIdx = -1;
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ void CoverView::InitVram(const VramContext& vramContext)
|
||||
|
||||
void CoverView::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);
|
||||
@@ -85,11 +85,11 @@ void CoverView::Draw(GraphicsContext& graphicsContext)
|
||||
|
||||
void CoverView::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,6 @@
|
||||
#pragma once
|
||||
#include <memory>
|
||||
#include "core/SharedPtr.h"
|
||||
#include "core/AtomicSharedPtr.h"
|
||||
#include "gui/views/View.h"
|
||||
#include "../FileType/FileCover.h"
|
||||
#include "gui/VBlankTextureLoader.h"
|
||||
@@ -29,19 +29,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();
|
||||
}
|
||||
|
||||
@@ -49,7 +43,7 @@ public:
|
||||
|
||||
private:
|
||||
VBlankTextureLoader* _vblankTextureLoader;
|
||||
SharedPtr<FileCover> _cover;
|
||||
AtomicSharedPtr<FileCover> _cover;
|
||||
VBlankTextureLoadRequest _textureLoadRequest;
|
||||
u32 _texVramOffset = 0;
|
||||
u32 _plttVramOffset = 0;
|
||||
|
||||
@@ -70,13 +70,13 @@ DisplaySettingsBottomSheetView::DisplaySettingsBottomSheetView(
|
||||
for (auto& layoutOption : _layoutOptions)
|
||||
{
|
||||
layoutOption = CreateLayoutOptionIconButton();
|
||||
AddChildTail(&layoutOption);
|
||||
AddChildTail(layoutOption.GetPointer());
|
||||
}
|
||||
|
||||
for (auto& sortOption : _sortOptions)
|
||||
{
|
||||
sortOption = CreateSortOptionIconButton();
|
||||
AddChildTail(&sortOption);
|
||||
AddChildTail(sortOption.GetPointer());
|
||||
}
|
||||
|
||||
// for (auto& filterOption : _filterOptions)
|
||||
@@ -88,38 +88,48 @@ DisplaySettingsBottomSheetView::DisplaySettingsBottomSheetView(
|
||||
// _filterOptions[0].SetState(IconButtonView::State::ToggleSelected);
|
||||
}
|
||||
|
||||
IconButton2DView DisplaySettingsBottomSheetView::CreateLayoutOptionIconButton()
|
||||
SharedPtr<IconButton2DView> DisplaySettingsBottomSheetView::CreateLayoutOptionIconButton()
|
||||
{
|
||||
IconButton2DView layoutOption
|
||||
{
|
||||
auto layoutOption = SharedPtr<IconButton2DView>::MakeShared(
|
||||
IconButtonView::Type::Tonal,
|
||||
IconButtonView::State::ToggleUnselected,
|
||||
md::sys::color::surfaceContainerLow,
|
||||
_materialColorScheme
|
||||
};
|
||||
layoutOption.SetAction([] (IconButtonView* sender, void* arg)
|
||||
);
|
||||
layoutOption->SetAction([] (IconButtonView* sender, void* arg)
|
||||
{
|
||||
auto self = reinterpret_cast<DisplaySettingsBottomSheetView*>(arg);
|
||||
u32 idx = ((IconButton2DView*)sender) - &self->_layoutOptions[0];
|
||||
self->_viewModel->SetRomBrowserDisplayMode(sRomBrowserDisplayModes[idx]);
|
||||
for (u32 i = 0; i < self->_layoutOptions.size(); i++)
|
||||
{
|
||||
if (self->_layoutOptions[i].GetPointer() == sender)
|
||||
{
|
||||
self->_viewModel->SetRomBrowserDisplayMode(sRomBrowserDisplayModes[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
return layoutOption;
|
||||
}
|
||||
|
||||
IconButton2DView DisplaySettingsBottomSheetView::CreateSortOptionIconButton()
|
||||
SharedPtr<IconButton2DView> DisplaySettingsBottomSheetView::CreateSortOptionIconButton()
|
||||
{
|
||||
IconButton2DView sortOption
|
||||
{
|
||||
auto sortOption = SharedPtr<IconButton2DView>::MakeShared(
|
||||
IconButtonView::Type::Tonal,
|
||||
IconButtonView::State::ToggleUnselected,
|
||||
md::sys::color::surfaceContainerLow,
|
||||
_materialColorScheme
|
||||
};
|
||||
sortOption.SetAction([] (IconButtonView* sender, void* arg)
|
||||
);
|
||||
sortOption->SetAction([] (IconButtonView* sender, void* arg)
|
||||
{
|
||||
auto self = reinterpret_cast<DisplaySettingsBottomSheetView*>(arg);
|
||||
u32 idx = ((IconButton2DView*)sender) - &self->_sortOptions[0];
|
||||
self->_viewModel->SetRomBrowserSortMode(sRomBrowserSortModes[idx]);
|
||||
for (u32 i = 0; i < self->_sortOptions.size(); i++)
|
||||
{
|
||||
if (self->_sortOptions[i].GetPointer() == sender)
|
||||
{
|
||||
self->_viewModel->SetRomBrowserSortMode(sRomBrowserSortModes[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
return sortOption;
|
||||
}
|
||||
@@ -144,14 +154,14 @@ void DisplaySettingsBottomSheetView::InitVram(const VramContext& vramContext)
|
||||
if (objVramManager)
|
||||
{
|
||||
// layout options
|
||||
_layoutOptions[0].SetIconVramOffset(LoadIcon(*objVramManager, hGridIconTiles, hGridIconTilesLen));
|
||||
_layoutOptions[1].SetIconVramOffset(LoadIcon(*objVramManager, vGridIconTiles, vGridIconTilesLen));
|
||||
_layoutOptions[2].SetIconVramOffset(LoadIcon(*objVramManager, bannerListIconTiles, bannerListIconTilesLen));
|
||||
_layoutOptions[3].SetIconVramOffset(LoadIcon(*objVramManager, coverflowIconTiles, coverflowIconTilesLen));
|
||||
_layoutOptions[0]->SetIconVramOffset(LoadIcon(*objVramManager, hGridIconTiles, hGridIconTilesLen));
|
||||
_layoutOptions[1]->SetIconVramOffset(LoadIcon(*objVramManager, vGridIconTiles, vGridIconTilesLen));
|
||||
_layoutOptions[2]->SetIconVramOffset(LoadIcon(*objVramManager, bannerListIconTiles, bannerListIconTilesLen));
|
||||
_layoutOptions[3]->SetIconVramOffset(LoadIcon(*objVramManager, coverflowIconTiles, coverflowIconTilesLen));
|
||||
|
||||
// sort options
|
||||
_sortOptions[0].SetIconVramOffset(LoadIcon(*objVramManager, sortNameAscendingIconTiles, sortNameAscendingIconTilesLen));
|
||||
_sortOptions[1].SetIconVramOffset(LoadIcon(*objVramManager, sortNameDescendingIconTiles, sortNameDescendingIconTilesLen));
|
||||
_sortOptions[0]->SetIconVramOffset(LoadIcon(*objVramManager, sortNameAscendingIconTiles, sortNameAscendingIconTilesLen));
|
||||
_sortOptions[1]->SetIconVramOffset(LoadIcon(*objVramManager, sortNameDescendingIconTiles, sortNameDescendingIconTilesLen));
|
||||
// _sortOptions[2].SetIconVramOffset(LoadIcon(objVramManager, recentIconTiles, recentIconTilesLen));
|
||||
|
||||
// filter options
|
||||
@@ -180,8 +190,8 @@ void DisplaySettingsBottomSheetView::Update()
|
||||
u32 idx = 0;
|
||||
for (auto& layoutOption : _layoutOptions)
|
||||
{
|
||||
layoutOption.SetPosition(x, _position.y + 38);
|
||||
layoutOption.SetState(sRomBrowserDisplayModes[idx] == selectedDisplayMode
|
||||
layoutOption->SetPosition(x, _position.y + 38);
|
||||
layoutOption->SetState(sRomBrowserDisplayModes[idx] == selectedDisplayMode
|
||||
? IconButtonView::State::ToggleSelected
|
||||
: IconButtonView::State::ToggleUnselected);
|
||||
x += 32;
|
||||
@@ -192,8 +202,8 @@ void DisplaySettingsBottomSheetView::Update()
|
||||
idx = 0;
|
||||
for (auto& sortOption : _sortOptions)
|
||||
{
|
||||
sortOption.SetPosition(x, _position.y + 70);
|
||||
sortOption.SetState(sRomBrowserSortModes[idx] == selectedSortMode
|
||||
sortOption->SetPosition(x, _position.y + 70);
|
||||
sortOption->SetState(sRomBrowserSortModes[idx] == selectedSortMode
|
||||
? IconButtonView::State::ToggleSelected
|
||||
: IconButtonView::State::ToggleUnselected);
|
||||
x += 32;
|
||||
@@ -237,25 +247,25 @@ bool DisplaySettingsBottomSheetView::HandleInput(
|
||||
return false;
|
||||
}
|
||||
|
||||
View* DisplaySettingsBottomSheetView::MoveFocus(View* currentFocus,
|
||||
SharedPtr<View> DisplaySettingsBottomSheetView::MoveFocus(const SharedPtr<View>& currentFocus,
|
||||
FocusMoveDirection direction, View* source)
|
||||
{
|
||||
int idx = 0;
|
||||
for (auto& layoutOption : _layoutOptions)
|
||||
{
|
||||
if (currentFocus == &layoutOption)
|
||||
if (currentFocus.GetPointer() == layoutOption.GetPointer())
|
||||
{
|
||||
if (direction == FocusMoveDirection::Left)
|
||||
{
|
||||
if (--idx < 0)
|
||||
idx += _layoutOptions.size();
|
||||
return &_layoutOptions[idx];
|
||||
return _layoutOptions[idx];
|
||||
}
|
||||
else if (direction == FocusMoveDirection::Right)
|
||||
{
|
||||
if (++idx >= (int)_layoutOptions.size())
|
||||
idx = 0;
|
||||
return &_layoutOptions[idx];
|
||||
return _layoutOptions[idx];
|
||||
}
|
||||
// else if (direction == FocusMoveDirection::Up)
|
||||
// {
|
||||
@@ -267,7 +277,7 @@ View* DisplaySettingsBottomSheetView::MoveFocus(View* currentFocus,
|
||||
{
|
||||
if (idx >= (int)_sortOptions.size())
|
||||
idx = _sortOptions.size() - 1;
|
||||
return &_sortOptions[idx];
|
||||
return _sortOptions[idx];
|
||||
}
|
||||
}
|
||||
idx++;
|
||||
@@ -275,25 +285,25 @@ View* DisplaySettingsBottomSheetView::MoveFocus(View* currentFocus,
|
||||
idx = 0;
|
||||
for (auto& sortOption : _sortOptions)
|
||||
{
|
||||
if (currentFocus == &sortOption)
|
||||
if (currentFocus.GetPointer() == sortOption.GetPointer())
|
||||
{
|
||||
if (direction == FocusMoveDirection::Left)
|
||||
{
|
||||
if (--idx < 0)
|
||||
idx += _sortOptions.size();
|
||||
return &_sortOptions[idx];
|
||||
return _sortOptions[idx];
|
||||
}
|
||||
else if (direction == FocusMoveDirection::Right)
|
||||
{
|
||||
if (++idx >= (int)_sortOptions.size())
|
||||
idx = 0;
|
||||
return &_sortOptions[idx];
|
||||
return _sortOptions[idx];
|
||||
}
|
||||
else //if (direction == FocusMoveDirection::Up)
|
||||
{
|
||||
if (idx >= (int)_layoutOptions.size())
|
||||
idx = _layoutOptions.size() - 1;
|
||||
return &_layoutOptions[idx];
|
||||
return _layoutOptions[idx];
|
||||
}
|
||||
// else //if (direction == FocusMoveDirection::Down)
|
||||
// {
|
||||
@@ -343,9 +353,13 @@ void DisplaySettingsBottomSheetView::SetGraphics(
|
||||
const IconButton2DView::VramToken& iconButtonVramToken)
|
||||
{
|
||||
for (auto& layoutOption : _layoutOptions)
|
||||
layoutOption.SetGraphics(iconButtonVramToken);
|
||||
{
|
||||
layoutOption->SetGraphics(iconButtonVramToken);
|
||||
}
|
||||
for (auto& sortOption : _sortOptions)
|
||||
sortOption.SetGraphics(iconButtonVramToken);
|
||||
{
|
||||
sortOption->SetGraphics(iconButtonVramToken);
|
||||
}
|
||||
// for (auto& filterOption : _filterOptions)
|
||||
// filterOption.SetGraphics(iconButtonVramToken);
|
||||
}
|
||||
|
||||
@@ -19,14 +19,14 @@ public:
|
||||
void Update() override;
|
||||
void Draw(GraphicsContext& graphicsContext) override;
|
||||
bool HandleInput(const InputProvider& inputProvider, FocusManager& focusManager) override;
|
||||
View* MoveFocus(View* currentFocus,
|
||||
SharedPtr<View> MoveFocus(const SharedPtr<View>& currentFocus,
|
||||
FocusMoveDirection direction, View* source) override;
|
||||
|
||||
void SetGraphics(const IconButton2DView::VramToken& iconButtonVramToken);
|
||||
|
||||
void Focus(FocusManager& focusManager) override
|
||||
{
|
||||
focusManager.Focus(&_layoutOptions[0]);
|
||||
focusManager.Focus(_layoutOptions[0]);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -37,14 +37,14 @@ private:
|
||||
Label2DView _sortingLabel;
|
||||
// LabelView _filtersLabel;
|
||||
|
||||
std::array<IconButton2DView, 4> _layoutOptions;
|
||||
std::array<IconButton2DView, /*3*/2> _sortOptions;
|
||||
std::array<SharedPtr<IconButton2DView>, 4> _layoutOptions;
|
||||
std::array<SharedPtr<IconButton2DView>, /*3*/2> _sortOptions;
|
||||
// std::array<IconButton2DView, 5> _filterOptions;
|
||||
|
||||
const MaterialColorScheme* _materialColorScheme;
|
||||
|
||||
IconButton2DView CreateLayoutOptionIconButton();
|
||||
IconButton2DView CreateSortOptionIconButton();
|
||||
SharedPtr<IconButton2DView> CreateLayoutOptionIconButton();
|
||||
SharedPtr<IconButton2DView> CreateSortOptionIconButton();
|
||||
// IconButton2DView CreateFilterOptionIconButton();
|
||||
|
||||
void UpdateLabels();
|
||||
|
||||
@@ -13,15 +13,15 @@ NdsGameDetailsBottomSheetView::NdsGameDetailsBottomSheetView(
|
||||
IRomBrowserController* romBrowserController, const MaterialColorScheme* materialColorScheme,
|
||||
const IFontRepository* fontRepository)
|
||||
: _romBrowserController(romBrowserController)
|
||||
, _cheatsChip(md::sys::color::surfaceContainerLow, materialColorScheme, fontRepository)
|
||||
, _favoriteChip(md::sys::color::surfaceContainerLow, materialColorScheme, fontRepository)
|
||||
, _cheatsChip(SharedPtr<ChipView>::MakeShared(md::sys::color::surfaceContainerLow, materialColorScheme, fontRepository))
|
||||
, _favoriteChip(SharedPtr<ChipView>::MakeShared(md::sys::color::surfaceContainerLow, materialColorScheme, fontRepository))
|
||||
{
|
||||
_cheatsChip.SetText(u"Cheats");
|
||||
_cheatsChip.SetSelected(false);
|
||||
AddChildTail(&_cheatsChip);
|
||||
_favoriteChip.SetText(u"Favorite");
|
||||
_favoriteChip.SetSelected(true);
|
||||
AddChildTail(&_favoriteChip);
|
||||
_cheatsChip->SetText(u"Cheats");
|
||||
_cheatsChip->SetSelected(false);
|
||||
AddChildTail(_cheatsChip.GetPointer());
|
||||
_favoriteChip->SetText(u"Favorite");
|
||||
_favoriteChip->SetSelected(true);
|
||||
AddChildTail(_favoriteChip.GetPointer());
|
||||
}
|
||||
|
||||
void NdsGameDetailsBottomSheetView::InitVram(const VramContext& vramContext)
|
||||
@@ -37,15 +37,15 @@ void NdsGameDetailsBottomSheetView::InitVram(const VramContext& vramContext)
|
||||
_smallHeartIconFilledVramOffset = objVramManager->Alloc(smallHeartIconFilledTilesLen);
|
||||
dma_ntrCopy32(3, smallHeartIconFilledTiles, objVramManager->GetVramAddress(_smallHeartIconFilledVramOffset), smallHeartIconFilledTilesLen);
|
||||
|
||||
_favoriteChip.SetIcon(true, _smallHeartIconFilledVramOffset);
|
||||
_favoriteChip->SetIcon(true, _smallHeartIconFilledVramOffset);
|
||||
}
|
||||
}
|
||||
|
||||
void NdsGameDetailsBottomSheetView::Update()
|
||||
{
|
||||
BottomSheetView::Update();
|
||||
_cheatsChip.SetPosition(92, _position.y + 21);
|
||||
_favoriteChip.SetPosition(162, _position.y + 21);
|
||||
_cheatsChip->SetPosition(92, _position.y + 21);
|
||||
_favoriteChip->SetPosition(162, _position.y + 21);
|
||||
}
|
||||
|
||||
void NdsGameDetailsBottomSheetView::Draw(GraphicsContext& graphicsContext)
|
||||
@@ -59,13 +59,13 @@ void NdsGameDetailsBottomSheetView::Draw(GraphicsContext& graphicsContext)
|
||||
graphicsContext.ResetClipArea();
|
||||
}
|
||||
|
||||
View* NdsGameDetailsBottomSheetView::MoveFocus(View* currentFocus,
|
||||
SharedPtr<View> NdsGameDetailsBottomSheetView::MoveFocus(const SharedPtr<View>& currentFocus,
|
||||
FocusMoveDirection direction, View* source)
|
||||
{
|
||||
if (currentFocus == &_cheatsChip && direction == FocusMoveDirection::Right)
|
||||
return &_favoriteChip;
|
||||
else if (currentFocus == &_favoriteChip && direction == FocusMoveDirection::Left)
|
||||
return &_cheatsChip;
|
||||
if (currentFocus.GetPointer() == _cheatsChip.GetPointer() && direction == FocusMoveDirection::Right)
|
||||
return _favoriteChip;
|
||||
else if (currentFocus.GetPointer() == _favoriteChip.GetPointer() && direction == FocusMoveDirection::Left)
|
||||
return _cheatsChip;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ public:
|
||||
|
||||
void SetGraphics(const ChipView::VramToken& chipVramToken)
|
||||
{
|
||||
_cheatsChip.SetGraphics(chipVramToken);
|
||||
_favoriteChip.SetGraphics(chipVramToken);
|
||||
_cheatsChip->SetGraphics(chipVramToken);
|
||||
_favoriteChip->SetGraphics(chipVramToken);
|
||||
}
|
||||
|
||||
void InitVram(const VramContext& vramContext) override;
|
||||
@@ -27,10 +27,10 @@ public:
|
||||
|
||||
void Focus(FocusManager& focusManager) override
|
||||
{
|
||||
focusManager.Focus(&_cheatsChip);
|
||||
focusManager.Focus(_cheatsChip);
|
||||
}
|
||||
|
||||
View* MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
SharedPtr<View> MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
|
||||
bool HandleInput(const InputProvider& inputProvider, FocusManager& focusManager) override;
|
||||
|
||||
@@ -38,6 +38,6 @@ private:
|
||||
IRomBrowserController* _romBrowserController;
|
||||
u32 _smallHeartIconVramOffset;
|
||||
u32 _smallHeartIconFilledVramOffset;
|
||||
ChipView _cheatsChip;
|
||||
ChipView _favoriteChip;
|
||||
SharedPtr<ChipView> _cheatsChip;
|
||||
SharedPtr<ChipView> _favoriteChip;
|
||||
};
|
||||
@@ -114,9 +114,9 @@ void RomBrowserAppBarView::VBlank()
|
||||
_appBarView->VBlank();
|
||||
}
|
||||
|
||||
View* RomBrowserAppBarView::MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source)
|
||||
SharedPtr<View> RomBrowserAppBarView::MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source)
|
||||
{
|
||||
if (currentFocus == nullptr)
|
||||
if (!currentFocus)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public:
|
||||
return Rectangle(0, 0, 256, 192);
|
||||
}
|
||||
|
||||
View* MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
SharedPtr<View> MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
|
||||
void Focus(FocusManager& focusManager)
|
||||
{
|
||||
|
||||
@@ -54,9 +54,9 @@ void RomBrowserBottomScreenView::VBlank()
|
||||
_romBrowserView->VBlank();
|
||||
}
|
||||
|
||||
View* RomBrowserBottomScreenView::MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source)
|
||||
SharedPtr<View> RomBrowserBottomScreenView::MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source)
|
||||
{
|
||||
if (currentFocus == nullptr)
|
||||
if (!currentFocus)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "../DisplayMode/RomBrowserDisplayMode.h"
|
||||
#include "RomBrowserView.h"
|
||||
#include "RomBrowserAppBarView.h"
|
||||
#include "core/SharedPtr.h"
|
||||
#include "../viewModels/RomBrowserBottomScreenViewModel.h"
|
||||
|
||||
class IRomBrowserViewFactory;
|
||||
@@ -32,7 +31,7 @@ public:
|
||||
return Rectangle(0, 0, 256, 192);
|
||||
}
|
||||
|
||||
View* MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
SharedPtr<View> MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
|
||||
void Focus(FocusManager& focusManager)
|
||||
{
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
#include "RomBrowserTopScreenView.h"
|
||||
|
||||
RomBrowserTopScreenView::RomBrowserTopScreenView(
|
||||
const SharedPtr<RomBrowserViewModel>& viewModel,
|
||||
SharedPtr<RomBrowserViewModel> viewModel,
|
||||
const RomBrowserDisplayMode* displayMode,
|
||||
const IThemeFileIconFactory* themeFileIconFactory,
|
||||
const IRomBrowserViewFactory* romBrowserViewFactory)
|
||||
: _viewModel(viewModel)
|
||||
: _viewModel(std::move(viewModel))
|
||||
, _themeFileIconFactory(themeFileIconFactory)
|
||||
, _fileInfoView(romBrowserViewFactory->CreateFileInfoView())
|
||||
, _showCover(displayMode->ShowCoverOnTopScreen())
|
||||
|
||||
@@ -12,7 +12,7 @@ class IRomBrowserViewFactory;
|
||||
class RomBrowserTopScreenView : public ViewContainer
|
||||
{
|
||||
public:
|
||||
RomBrowserTopScreenView(const SharedPtr<RomBrowserViewModel>& viewModel,
|
||||
RomBrowserTopScreenView(SharedPtr<RomBrowserViewModel> viewModel,
|
||||
const RomBrowserDisplayMode* displayMode,
|
||||
const IThemeFileIconFactory* themeFileIconFactory,
|
||||
const IRomBrowserViewFactory* romBrowserViewFactory);
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
#include "RomBrowserView.h"
|
||||
|
||||
RomBrowserView::RomBrowserView(
|
||||
const SharedPtr<RomBrowserViewModel>& viewModel,
|
||||
SharedPtr<RomBrowserViewModel> viewModel,
|
||||
const RomBrowserDisplayMode& displayMode,
|
||||
const IThemeFileIconFactory* themeFileIconFactory,
|
||||
const IRomBrowserViewFactory* romBrowserViewFactory,
|
||||
VBlankTextureLoader* vblankTextureLoader)
|
||||
: _viewModel(viewModel), _isVertical(displayMode.IsVertical())
|
||||
: _viewModel(std::move(viewModel)), _isVertical(displayMode.IsVertical())
|
||||
{
|
||||
_fileGridView = displayMode.CreateRecyclerView(romBrowserViewFactory);
|
||||
_fileGridView->SetParent(this);
|
||||
@@ -18,12 +18,6 @@ RomBrowserView::RomBrowserView(
|
||||
_viewModel.GetPointer(), themeFileIconFactory, romBrowserViewFactory, vblankTextureLoader);
|
||||
}
|
||||
|
||||
RomBrowserView::~RomBrowserView()
|
||||
{
|
||||
_fileGridView.reset();
|
||||
delete _fileRecyclerAdapter;
|
||||
}
|
||||
|
||||
void RomBrowserView::InitVram(const VramContext& vramContext)
|
||||
{
|
||||
_fileRecyclerAdapter->InitVram(vramContext); // first initialize the shared vram for the items
|
||||
@@ -48,9 +42,9 @@ void RomBrowserView::VBlank()
|
||||
_fileGridView->VBlank();
|
||||
}
|
||||
|
||||
View* RomBrowserView::MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source)
|
||||
SharedPtr<View> RomBrowserView::MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source)
|
||||
{
|
||||
if (currentFocus == nullptr)
|
||||
if (!currentFocus)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
@@ -72,7 +66,7 @@ View* RomBrowserView::MoveFocus(View* currentFocus, FocusMoveDirection direction
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
else if (source == _fileGridView.get())
|
||||
else if (source == _fileGridView.GetPointer())
|
||||
{
|
||||
return View::MoveFocus(currentFocus, direction, source);
|
||||
}
|
||||
@@ -83,7 +77,7 @@ bool RomBrowserView::HandleInput(const InputProvider& inputProvider, FocusManage
|
||||
{
|
||||
if (inputProvider.Triggered(InputKey::A))
|
||||
{
|
||||
if (focusManager.IsFocusInside(_fileGridView.get()))
|
||||
if (focusManager.IsFocusInside(_fileGridView.GetPointer()))
|
||||
{
|
||||
_viewModel->ItemActivated();
|
||||
return true;
|
||||
@@ -91,7 +85,7 @@ bool RomBrowserView::HandleInput(const InputProvider& inputProvider, FocusManage
|
||||
}
|
||||
else if (inputProvider.Triggered(InputKey::Y))
|
||||
{
|
||||
if (focusManager.IsFocusInside(_fileGridView.get()))
|
||||
if (focusManager.IsFocusInside(_fileGridView.GetPointer()))
|
||||
{
|
||||
_viewModel->ShowGameInfo();
|
||||
return true;
|
||||
|
||||
@@ -13,14 +13,12 @@ class RomBrowserView : public View
|
||||
{
|
||||
public:
|
||||
RomBrowserView(
|
||||
const SharedPtr<RomBrowserViewModel>& viewModel,
|
||||
SharedPtr<RomBrowserViewModel> viewModel,
|
||||
const RomBrowserDisplayMode& displayMode,
|
||||
const IThemeFileIconFactory* themeFileIconFactory,
|
||||
const IRomBrowserViewFactory* romBrowserViewFactory,
|
||||
VBlankTextureLoader* vblankTextureLoader);
|
||||
|
||||
~RomBrowserView();
|
||||
|
||||
void InitVram(const VramContext& vramContext) override;
|
||||
void Update() override;
|
||||
void Draw(GraphicsContext& graphicsContext) override;
|
||||
@@ -40,14 +38,14 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
View* MoveFocus(
|
||||
View* currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
SharedPtr<View> MoveFocus(
|
||||
const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source) override;
|
||||
|
||||
bool HandleInput(const InputProvider& inputProvider, FocusManager& focusManager) override;
|
||||
|
||||
private:
|
||||
SharedPtr<RomBrowserViewModel> _viewModel;
|
||||
std::unique_ptr<RecyclerViewBase> _fileGridView;
|
||||
FileRecyclerAdapter* _fileRecyclerAdapter;
|
||||
SharedPtr<RecyclerViewBase> _fileGridView;
|
||||
SharedPtr<FileRecyclerAdapter> _fileRecyclerAdapter;
|
||||
bool _isVertical;
|
||||
};
|
||||
|
||||
@@ -25,25 +25,20 @@ public:
|
||||
height = 24;
|
||||
}
|
||||
|
||||
View* CreateView() const override
|
||||
SharedPtr<View> CreateView() const override
|
||||
{
|
||||
return new CheatListItemView(_vramOffsets, _materialColorScheme, _fontRepository);
|
||||
return SharedPtr<CheatListItemView>::MakeShared(_vramOffsets, _materialColorScheme, _fontRepository);
|
||||
}
|
||||
|
||||
void DestroyView(View* view) const override
|
||||
void BindView(SharedPtr<View> view, int index) const override
|
||||
{
|
||||
delete (CheatListItemView*)view;
|
||||
}
|
||||
|
||||
void BindView(View* view, int index) const override
|
||||
{
|
||||
auto listItemView = static_cast<CheatListItemView*>(view);
|
||||
auto listItemView = static_cast<CheatListItemView*>(view.GetPointer());
|
||||
u32 numberOfSubEntries = 0;
|
||||
auto subEntries = _cheatCategory->GetSubEntries(numberOfSubEntries);
|
||||
listItemView->SetEntry(&subEntries[index]);
|
||||
}
|
||||
|
||||
void ReleaseView(View* view, int index) const override
|
||||
void ReleaseView(SharedPtr<View> view, int index) const override
|
||||
{
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ CheatsBottomSheetView::CheatsBottomSheetView(std::unique_ptr<CheatsViewModel> vi
|
||||
, _titleLabel(64, 16, 25, fontRepository->GetFont(FontType::Medium11))
|
||||
, _secondaryLabel(177, 16, 64, fontRepository->GetFont(FontType::Regular10))
|
||||
, _descriptionLabel(224, 16, 256, fontRepository->GetFont(FontType::Medium7_5))
|
||||
, _cheatListRecycler(std::make_unique<RecyclerView>(
|
||||
, _cheatListRecycler(RecyclerView::CreateShared(
|
||||
LIST_X, LIST_Y, LIST_WIDTH, LIST_HEIGHT, RecyclerView::Mode::VerticalList))
|
||||
, _materialColorScheme(materialColorScheme)
|
||||
, _fontRepository(fontRepository)
|
||||
@@ -51,7 +51,7 @@ CheatsBottomSheetView::CheatsBottomSheetView(std::unique_ptr<CheatsViewModel> vi
|
||||
AddChildTail(&_titleLabel);
|
||||
AddChildTail(&_secondaryLabel);
|
||||
AddChildTail(&_descriptionLabel);
|
||||
AddChildTail(_cheatListRecycler.get());
|
||||
AddChildTail(_cheatListRecycler.GetPointer());
|
||||
}
|
||||
|
||||
void CheatsBottomSheetView::InitVram(const VramContext& vramContext)
|
||||
@@ -96,9 +96,9 @@ void CheatsBottomSheetView::Update()
|
||||
_cheatListRecycler->SetPosition(LIST_X, _position.y + LIST_Y);
|
||||
if (_viewModel->GetState() == CheatsViewModel::State::DisplayCheats)
|
||||
{
|
||||
if (_cheatsAdapter == nullptr && _objVramManager != nullptr)
|
||||
if (!_cheatsAdapter && _objVramManager != nullptr)
|
||||
{
|
||||
_cheatsAdapter = new CheatsAdapter(
|
||||
_cheatsAdapter = SharedPtr<CheatsAdapter>::MakeShared(
|
||||
_viewModel->GetCurrentCheatCategory(), _materialColorScheme, _fontRepository, _vramOffsets);
|
||||
_cheatListRecycler->SetAdapter(_cheatsAdapter);
|
||||
|
||||
@@ -199,7 +199,7 @@ bool CheatsBottomSheetView::HandleInput(const InputProvider& inputProvider, Focu
|
||||
{
|
||||
if (inputProvider.Triggered(InputKey::A))
|
||||
{
|
||||
if (focusManager.IsFocusInside(_cheatListRecycler.get()))
|
||||
if (focusManager.IsFocusInside(_cheatListRecycler.GetPointer()))
|
||||
{
|
||||
auto oldCategory = _viewModel->GetCurrentCheatCategory();
|
||||
_viewModel->ActivateSelectedItem();
|
||||
@@ -240,11 +240,9 @@ void CheatsBottomSheetView::UpdateCheatList()
|
||||
// Need to unfocus first, otherwise the focus manager still contains a pointer to a view that is going to be destroyed
|
||||
_focusManager->Unfocus();
|
||||
|
||||
auto oldAdapter = _cheatsAdapter;
|
||||
_cheatsAdapter = new CheatsAdapter(
|
||||
_cheatsAdapter = SharedPtr<CheatsAdapter>::MakeShared(
|
||||
_viewModel->GetCurrentCheatCategory(), _materialColorScheme, _fontRepository, _vramOffsets);
|
||||
_cheatListRecycler->SetAdapter(_cheatsAdapter, _viewModel->GetSelectedItem());
|
||||
delete oldAdapter;
|
||||
|
||||
// Ugly hack
|
||||
((DescendingStackVramManager*)_objVramManager)->SetState(_savedVramState);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include <memory>
|
||||
#include "core/SharedPtr.h"
|
||||
#include "romBrowser/views/BottomSheetView.h"
|
||||
#include "gui/views/Label2DView.h"
|
||||
#include "gui/views/RecyclerView.h"
|
||||
@@ -19,15 +20,6 @@ public:
|
||||
const MaterialColorScheme* materialColorScheme, const IFontRepository* fontRepository,
|
||||
FocusManager* focusManager);
|
||||
|
||||
~CheatsBottomSheetView() override
|
||||
{
|
||||
_cheatListRecycler.reset();
|
||||
if (_cheatsAdapter != nullptr)
|
||||
{
|
||||
delete _cheatsAdapter;
|
||||
}
|
||||
}
|
||||
|
||||
void InitVram(const VramContext& vramContext) override;
|
||||
void Update() override;
|
||||
void Draw(GraphicsContext& graphicsContext) override;
|
||||
@@ -43,8 +35,8 @@ private:
|
||||
Label2DView _titleLabel;
|
||||
Label2DView _secondaryLabel;
|
||||
Label2DView _descriptionLabel;
|
||||
std::unique_ptr<RecyclerView> _cheatListRecycler;
|
||||
CheatsAdapter* _cheatsAdapter = nullptr;
|
||||
SharedPtr<RecyclerView> _cheatListRecycler;
|
||||
SharedPtr<CheatsAdapter> _cheatsAdapter;
|
||||
const MaterialColorScheme* _materialColorScheme;
|
||||
const IFontRepository* _fontRepository;
|
||||
IVramManager* _objVramManager = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user