mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-06-02 00:56:55 +02:00
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:
@@ -43,7 +43,7 @@ App::App(IAppSettingsService& appSettingsService, IBgmService& bgmService)
|
||||
, _subVramContext(nullptr, &_subObjVram, nullptr, nullptr)
|
||||
, _appSettingsService(appSettingsService)
|
||||
, _bgmService(bgmService)
|
||||
, _inputProvider(&_inputSource)
|
||||
, _inputProvider(&_keyInputSource, &_touchInputSource)
|
||||
, _inputRepeater(&_inputProvider,
|
||||
InputKey::DpadLeft | InputKey::DpadRight | InputKey::DpadUp | InputKey::DpadDown | InputKey::L | InputKey::R,
|
||||
25, 8)
|
||||
@@ -134,7 +134,7 @@ void App::Run()
|
||||
|
||||
StoreVramState(_vramStateBeforeMakeBottomScreenView);
|
||||
|
||||
_romBrowserBottomScreenView = std::make_unique<RomBrowserBottomScreenView>(
|
||||
_romBrowserBottomScreenView = RomBrowserBottomScreenView::CreateShared(
|
||||
&_romBrowserBottomScreenViewModel,
|
||||
RomBrowserDisplayModeFactory().GetRomBrowserDisplayMode(
|
||||
_romBrowserController.GetRomBrowserDisplaySettings().layout),
|
||||
@@ -301,8 +301,8 @@ void App::HandleShowGameInfoTrigger()
|
||||
// gameInfoDialog->SetGraphics(_chipViewVram);
|
||||
// _dialogPresenter.ShowDialog(std::move(gameInfoDialog));
|
||||
|
||||
auto cheatsViewModel = std::make_unique<CheatsViewModel>(_romBrowserController.GetTriggerFileInfo(), &_romBrowserController);
|
||||
auto cheatsDialog = std::make_unique<CheatsBottomSheetView>(
|
||||
auto cheatsViewModel = SharedPtr<CheatsViewModel>::MakeShared(_romBrowserController.GetTriggerFileInfo(), &_romBrowserController);
|
||||
auto cheatsDialog = CheatsBottomSheetView::CreateShared(
|
||||
std::move(cheatsViewModel), &_theme->GetMaterialColorScheme(), _theme->GetFontRepository(), &_focusManager);
|
||||
_dialogPresenter.ShowDialog(std::move(cheatsDialog));
|
||||
}
|
||||
@@ -316,7 +316,7 @@ void App::HandleHideGameInfoTrigger()
|
||||
|
||||
void App::HandleShowDisplaySettingsTrigger()
|
||||
{
|
||||
auto displaySettingsDialog = std::make_unique<DisplaySettingsBottomSheetView>(
|
||||
auto displaySettingsDialog = DisplaySettingsBottomSheetView::CreateShared(
|
||||
&_displaySettingsBottomSheetViewModel, &_theme->GetMaterialColorScheme(), _theme->GetFontRepository());
|
||||
displaySettingsDialog->SetGraphics(_iconButtonViewVram);
|
||||
_dialogPresenter.ShowDialog(std::move(displaySettingsDialog));
|
||||
@@ -337,11 +337,11 @@ void App::HandleNavigateTrigger()
|
||||
|
||||
void App::HandleFolderLoadDoneTrigger()
|
||||
{
|
||||
_romBrowserTopScreenView.reset();
|
||||
_romBrowserTopScreenView.Reset();
|
||||
RestoreVramState(_vramStateAfterMakeBottomScreenView);
|
||||
auto displayMode = RomBrowserDisplayModeFactory().GetRomBrowserDisplayMode(
|
||||
_romBrowserController.GetRomBrowserDisplaySettings().layout);
|
||||
_romBrowserTopScreenView = std::make_unique<RomBrowserTopScreenView>(
|
||||
_romBrowserTopScreenView = RomBrowserTopScreenView::CreateShared(
|
||||
_romBrowserController.GetRomBrowserViewModel(),
|
||||
displayMode,
|
||||
_materialThemeFileIconFactory.get(),
|
||||
@@ -358,7 +358,7 @@ void App::HandleChangeDisplayModeTrigger(RomBrowserState newState)
|
||||
RestoreVramState(_vramStateBeforeMakeBottomScreenView);
|
||||
auto displayMode = RomBrowserDisplayModeFactory().GetRomBrowserDisplayMode(
|
||||
_romBrowserController.GetRomBrowserDisplaySettings().layout);
|
||||
_romBrowserBottomScreenView = std::make_unique<RomBrowserBottomScreenView>(
|
||||
_romBrowserBottomScreenView = RomBrowserBottomScreenView::CreateShared(
|
||||
&_romBrowserBottomScreenViewModel,
|
||||
displayMode,
|
||||
_materialThemeFileIconFactory.get(),
|
||||
@@ -366,7 +366,7 @@ void App::HandleChangeDisplayModeTrigger(RomBrowserState newState)
|
||||
&_vblankTextureLoader);
|
||||
_romBrowserBottomScreenView->InitVram(_mainVramContext);
|
||||
StoreVramState(_vramStateAfterMakeBottomScreenView);
|
||||
_romBrowserTopScreenView = std::make_unique<RomBrowserTopScreenView>(
|
||||
_romBrowserTopScreenView = RomBrowserTopScreenView::CreateShared(
|
||||
_romBrowserController.GetRomBrowserViewModel(),
|
||||
displayMode,
|
||||
_materialThemeFileIconFactory.get(),
|
||||
@@ -405,7 +405,7 @@ void App::Update()
|
||||
bool isRomBrowserVisible = IsRomBrowserVisible();
|
||||
if (isRomBrowserVisible && !_exit && curState != RomBrowserState::Launching)
|
||||
{
|
||||
_focusManager.Update(_inputRepeater);
|
||||
HandleInput();
|
||||
}
|
||||
|
||||
if (_topBackground)
|
||||
@@ -523,3 +523,49 @@ void App::RestoreVramState(const VramState& vramState)
|
||||
_texturePaletteVram.SetState(vramState._texPlttVramState);
|
||||
_subObjVram.SetState(vramState._subObjVramState);
|
||||
}
|
||||
|
||||
void App::HandleInput()
|
||||
{
|
||||
_focusManager.Update(_inputRepeater);
|
||||
Point touchPoint;
|
||||
if (_inputRepeater.Triggered(InputKey::Touch) &&
|
||||
_inputRepeater.GetCurrentTouchPoint(touchPoint))
|
||||
{
|
||||
// pen down
|
||||
if (_dialogPresenter.IsBottomSheetVisible())
|
||||
{
|
||||
_dialogPresenter.HandlePenDown(touchPoint, _focusManager);
|
||||
}
|
||||
else
|
||||
{
|
||||
_romBrowserBottomScreenView->HandlePenDown(touchPoint, _focusManager);
|
||||
}
|
||||
_lastTouchPoint = touchPoint;
|
||||
}
|
||||
else if (_inputRepeater.Released(InputKey::Touch))
|
||||
{
|
||||
// pen up
|
||||
if (_dialogPresenter.IsBottomSheetVisible())
|
||||
{
|
||||
_dialogPresenter.HandlePenUp(_lastTouchPoint, _focusManager);
|
||||
}
|
||||
else
|
||||
{
|
||||
_romBrowserBottomScreenView->HandlePenUp(_lastTouchPoint, _focusManager);
|
||||
}
|
||||
}
|
||||
else if (_inputRepeater.Current(InputKey::Touch)
|
||||
&& _inputRepeater.GetCurrentTouchPoint(touchPoint))
|
||||
{
|
||||
// pen move
|
||||
if (_dialogPresenter.IsBottomSheetVisible())
|
||||
{
|
||||
_dialogPresenter.HandlePenMove(touchPoint, _focusManager);
|
||||
}
|
||||
else
|
||||
{
|
||||
_romBrowserBottomScreenView->HandlePenMove(touchPoint, _focusManager);
|
||||
}
|
||||
_lastTouchPoint = touchPoint;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user