mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-07 12:05:52 +00:00
FullscreenUI: Allow using right mouse button for 'back'
This commit is contained in:
parent
224cb6ac8e
commit
1b678d0ebc
@ -97,6 +97,7 @@ using ImGuiFullscreen::BeginFullscreenWindow;
|
|||||||
using ImGuiFullscreen::BeginHorizontalMenu;
|
using ImGuiFullscreen::BeginHorizontalMenu;
|
||||||
using ImGuiFullscreen::BeginMenuButtons;
|
using ImGuiFullscreen::BeginMenuButtons;
|
||||||
using ImGuiFullscreen::BeginNavBar;
|
using ImGuiFullscreen::BeginNavBar;
|
||||||
|
using ImGuiFullscreen::CancelPendingMenuClose;
|
||||||
using ImGuiFullscreen::CenterImage;
|
using ImGuiFullscreen::CenterImage;
|
||||||
using ImGuiFullscreen::DefaultActiveButton;
|
using ImGuiFullscreen::DefaultActiveButton;
|
||||||
using ImGuiFullscreen::DrawShadowedText;
|
using ImGuiFullscreen::DrawShadowedText;
|
||||||
@ -2192,6 +2193,7 @@ void FullscreenUI::DrawInputBindingButton(SettingsInterface* bsi, InputBindingIn
|
|||||||
}
|
}
|
||||||
else if (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false))
|
else if (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false))
|
||||||
{
|
{
|
||||||
|
CancelPendingMenuClose();
|
||||||
bsi->DeleteValue(section, name);
|
bsi->DeleteValue(section, name);
|
||||||
SetSettingsChanged(bsi);
|
SetSettingsChanged(bsi);
|
||||||
}
|
}
|
||||||
@ -7149,6 +7151,7 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
|
|||||||
(ImGui::IsItemClicked(ImGuiMouseButton_Right) ||
|
(ImGui::IsItemClicked(ImGuiMouseButton_Right) ||
|
||||||
ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) || ImGui::IsKeyPressed(ImGuiKey_F1, false)))
|
ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) || ImGui::IsKeyPressed(ImGuiKey_F1, false)))
|
||||||
{
|
{
|
||||||
|
CancelPendingMenuClose();
|
||||||
s_state.save_state_selector_submenu_index = static_cast<s32>(i);
|
s_state.save_state_selector_submenu_index = static_cast<s32>(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7665,6 +7668,7 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size)
|
|||||||
(ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) ||
|
(ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) ||
|
||||||
ImGui::IsKeyPressed(ImGuiKey_F3, false)))
|
ImGui::IsKeyPressed(ImGuiKey_F3, false)))
|
||||||
{
|
{
|
||||||
|
CancelPendingMenuClose();
|
||||||
HandleGameListOptions(selected_entry);
|
HandleGameListOptions(selected_entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7927,6 +7931,7 @@ void FullscreenUI::DrawGameGrid(const ImVec2& heading_size)
|
|||||||
(ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) ||
|
(ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) ||
|
||||||
ImGui::IsKeyPressed(ImGuiKey_F3, false)))
|
ImGui::IsKeyPressed(ImGuiKey_F3, false)))
|
||||||
{
|
{
|
||||||
|
CancelPendingMenuClose();
|
||||||
HandleGameListOptions(entry);
|
HandleGameListOptions(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,16 @@ static ImGuiID GetBackgroundProgressID(const char* str_id);
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
enum class CloseButtonState
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
KeyboardPressed,
|
||||||
|
MousePressed,
|
||||||
|
GamepadPressed,
|
||||||
|
AnyReleased,
|
||||||
|
Cancelled,
|
||||||
|
};
|
||||||
|
|
||||||
struct FileSelectorItem
|
struct FileSelectorItem
|
||||||
{
|
{
|
||||||
FileSelectorItem() = default;
|
FileSelectorItem() = default;
|
||||||
@ -109,7 +119,7 @@ struct ALIGN_TO_CACHE_LINE UIState
|
|||||||
std::recursive_mutex shared_state_mutex;
|
std::recursive_mutex shared_state_mutex;
|
||||||
|
|
||||||
u32 menu_button_index = 0;
|
u32 menu_button_index = 0;
|
||||||
u32 close_button_state = 0;
|
CloseButtonState close_button_state = CloseButtonState::None;
|
||||||
ImGuiDir has_pending_nav_move = ImGuiDir_None;
|
ImGuiDir has_pending_nav_move = ImGuiDir_None;
|
||||||
FocusResetType focus_reset_queued = FocusResetType::None;
|
FocusResetType focus_reset_queued = FocusResetType::None;
|
||||||
bool initialized = false;
|
bool initialized = false;
|
||||||
@ -199,7 +209,7 @@ bool ImGuiFullscreen::Initialize(const char* placeholder_image_path)
|
|||||||
std::unique_lock lock(s_state.shared_state_mutex);
|
std::unique_lock lock(s_state.shared_state_mutex);
|
||||||
|
|
||||||
s_state.focus_reset_queued = FocusResetType::ViewChanged;
|
s_state.focus_reset_queued = FocusResetType::ViewChanged;
|
||||||
s_state.close_button_state = 0;
|
s_state.close_button_state = CloseButtonState::None;
|
||||||
|
|
||||||
s_state.placeholder_texture = LoadTexture(placeholder_image_path);
|
s_state.placeholder_texture = LoadTexture(placeholder_image_path);
|
||||||
if (!s_state.placeholder_texture)
|
if (!s_state.placeholder_texture)
|
||||||
@ -661,7 +671,8 @@ void ImGuiFullscreen::PopResetLayout()
|
|||||||
void ImGuiFullscreen::QueueResetFocus(FocusResetType type)
|
void ImGuiFullscreen::QueueResetFocus(FocusResetType type)
|
||||||
{
|
{
|
||||||
s_state.focus_reset_queued = type;
|
s_state.focus_reset_queued = type;
|
||||||
s_state.close_button_state = 0;
|
s_state.close_button_state =
|
||||||
|
(s_state.close_button_state != CloseButtonState::Cancelled) ? CloseButtonState::None : CloseButtonState::Cancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGuiFullscreen::ResetFocusHere()
|
bool ImGuiFullscreen::ResetFocusHere()
|
||||||
@ -728,29 +739,37 @@ bool ImGuiFullscreen::WantsToCloseMenu()
|
|||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
|
|
||||||
// Wait for the Close button to be released, THEN pressed
|
// Wait for the Close button to be pressed, THEN released
|
||||||
if (s_state.close_button_state == 0)
|
if (s_state.close_button_state == CloseButtonState::None)
|
||||||
{
|
{
|
||||||
if (ImGui::IsKeyPressed(ImGuiKey_Escape, false))
|
if (ImGui::IsKeyPressed(ImGuiKey_Escape, false))
|
||||||
s_state.close_button_state = 1;
|
s_state.close_button_state = CloseButtonState::KeyboardPressed;
|
||||||
|
else if (ImGui::IsKeyPressed(ImGuiKey_MouseRight, false))
|
||||||
|
s_state.close_button_state = CloseButtonState::MousePressed;
|
||||||
else if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadCancel, false))
|
else if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadCancel, false))
|
||||||
s_state.close_button_state = 2;
|
s_state.close_button_state = CloseButtonState::GamepadPressed;
|
||||||
}
|
}
|
||||||
else if ((s_state.close_button_state == 1 && ImGui::IsKeyReleased(ImGuiKey_Escape)) ||
|
else if ((s_state.close_button_state == CloseButtonState::KeyboardPressed && ImGui::IsKeyReleased(ImGuiKey_Escape)) ||
|
||||||
(s_state.close_button_state == 2 && ImGui::IsKeyReleased(ImGuiKey_NavGamepadCancel)))
|
(s_state.close_button_state == CloseButtonState::MousePressed &&
|
||||||
|
ImGui::IsKeyReleased(ImGuiKey_MouseRight)) ||
|
||||||
|
(s_state.close_button_state == CloseButtonState::GamepadPressed &&
|
||||||
|
ImGui::IsKeyReleased(ImGuiKey_NavGamepadCancel)))
|
||||||
{
|
{
|
||||||
s_state.close_button_state = 3;
|
s_state.close_button_state = CloseButtonState::AnyReleased;
|
||||||
}
|
}
|
||||||
return s_state.close_button_state > 1;
|
return (s_state.close_button_state == CloseButtonState::AnyReleased);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::ResetCloseMenuIfNeeded()
|
void ImGuiFullscreen::ResetCloseMenuIfNeeded()
|
||||||
{
|
{
|
||||||
// If s_close_button_state reached the "Released" state, reset it after the tick
|
// If s_close_button_state reached the "Released" state, reset it after the tick
|
||||||
if (s_state.close_button_state > 1)
|
s_state.close_button_state =
|
||||||
{
|
(s_state.close_button_state >= CloseButtonState::AnyReleased) ? CloseButtonState::None : s_state.close_button_state;
|
||||||
s_state.close_button_state = 0;
|
}
|
||||||
}
|
|
||||||
|
void ImGuiFullscreen::CancelPendingMenuClose()
|
||||||
|
{
|
||||||
|
s_state.close_button_state = CloseButtonState::Cancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::PushPrimaryColor()
|
void ImGuiFullscreen::PushPrimaryColor()
|
||||||
|
@ -171,6 +171,7 @@ void ForceKeyNavEnabled();
|
|||||||
|
|
||||||
bool WantsToCloseMenu();
|
bool WantsToCloseMenu();
|
||||||
void ResetCloseMenuIfNeeded();
|
void ResetCloseMenuIfNeeded();
|
||||||
|
void CancelPendingMenuClose();
|
||||||
|
|
||||||
void PushPrimaryColor();
|
void PushPrimaryColor();
|
||||||
void PopPrimaryColor();
|
void PopPrimaryColor();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user