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,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)