Add touch input support, add fast scrolling support for coverflow display mode, fix use after free bug in banner list mode

This commit is contained in:
Gericom
2026-04-04 19:24:39 +02:00
parent 21a8790ebc
commit 97762b14d3
119 changed files with 2251 additions and 762 deletions

View File

@@ -0,0 +1,76 @@
#include "common.h"
#include "gui/FocusManager.h"
#include "gui/input/InputProvider.h"
#include "gui/views/View.h"
#include "romBrowser/viewModels/RomBrowserItemViewModel.h"
#include "RomBrowserItemInputHandler.h"
#define LONG_PRESS_FRAMES 30
bool RomBrowserItemInputHandler::HandleInput(const InputProvider& inputProvider, FocusManager& focusManager)
{
if (inputProvider.Triggered(InputKey::A))
{
_viewModel->Activate();
return true;
}
else if (inputProvider.Triggered(InputKey::Y))
{
_viewModel->ShowGameInfo();
return true;
}
else
{
return false;
}
}
void RomBrowserItemInputHandler::HandlePenDown(const Point& touchPoint, FocusManager& focusManager)
{
if (_view->GetBounds().Contains(touchPoint))
{
_penDown = true;
_penDownFrames = 0;
}
}
void RomBrowserItemInputHandler::HandlePenMove(const Point& touchPoint, FocusManager& focusManager)
{
if (_penDown && _view->GetBounds().Contains(touchPoint))
{
if (++_penDownFrames == LONG_PRESS_FRAMES)
{
// Long press
if (focusManager.GetCurrentFocus().GetPointer() != _view)
{
focusManager.Focus(_view->SharedFromThis());
}
_viewModel->ShowGameInfo();
_penDown = false; // pen action is complete
}
}
else
{
_penDown = false;
}
}
void RomBrowserItemInputHandler::HandlePenUp(const Point& lastTouchPoint, FocusManager& focusManager)
{
if (_penDown && _view->GetBounds().Contains(lastTouchPoint))
{
// Short tap
if (focusManager.GetCurrentFocus().GetPointer() == _view)
{
_viewModel->Activate();
}
else
{
focusManager.Focus(_view->SharedFromThis());
}
}
_penDown = false;
}