mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 13:30:02 +00:00
Merge pull request #17420 from hrydgard/analog-mapping-glitch-fix
Fix glitch when mapping analog inputs, caused by multiple TriggerFinish
This commit is contained in:
commit
d5ac88ecec
@ -149,7 +149,7 @@ TouchInput UIScreen::transformTouch(const TouchInput &touch) {
|
||||
}
|
||||
|
||||
void UIScreen::touch(const TouchInput &touch) {
|
||||
if (root_) {
|
||||
if (root_ && !ignoreInput_) {
|
||||
if (ClickDebug && (touch.flags & TOUCH_DOWN)) {
|
||||
INFO_LOG(SYSTEM, "Touch down!");
|
||||
std::vector<UI::View *> views;
|
||||
@ -164,13 +164,21 @@ void UIScreen::touch(const TouchInput &touch) {
|
||||
}
|
||||
|
||||
bool UIScreen::key(const KeyInput &key) {
|
||||
if (root_) {
|
||||
if (root_ && !ignoreInput_) {
|
||||
return UI::KeyEvent(key, root_);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void UIScreen::axis(const AxisInput &axis) {
|
||||
if (root_ && !ignoreInput_) {
|
||||
UI::AxisEvent(axis, root_);
|
||||
}
|
||||
}
|
||||
|
||||
void UIScreen::TriggerFinish(DialogResult result) {
|
||||
// From here on, this dialog cannot receive input.
|
||||
ignoreInput_ = true;
|
||||
screenManager()->finishDialog(this, result);
|
||||
}
|
||||
|
||||
@ -196,12 +204,6 @@ void UIDialogScreen::sendMessage(const char *msg, const char *value) {
|
||||
}
|
||||
}
|
||||
|
||||
void UIScreen::axis(const AxisInput &axis) {
|
||||
if (root_) {
|
||||
UI::AxisEvent(axis, root_);
|
||||
}
|
||||
}
|
||||
|
||||
UI::EventReturn UIScreen::OnBack(UI::EventParams &e) {
|
||||
TriggerFinish(DR_BACK);
|
||||
return UI::EVENT_DONE;
|
||||
@ -313,6 +315,7 @@ void PopupScreen::SetPopupOffset(float y) {
|
||||
|
||||
void PopupScreen::TriggerFinish(DialogResult result) {
|
||||
if (CanComplete(result)) {
|
||||
ignoreInput_ = true;
|
||||
finishFrame_ = frames_;
|
||||
finishResult_ = result;
|
||||
|
||||
|
@ -50,6 +50,7 @@ protected:
|
||||
Vec3 scale_ = Vec3(1.0f);
|
||||
float alpha_ = 1.0f;
|
||||
bool ignoreInsets_ = false;
|
||||
bool ignoreInput_ = false;
|
||||
|
||||
private:
|
||||
void DoRecreateViews();
|
||||
|
@ -337,6 +337,8 @@ void KeyMappingNewKeyDialog::CreatePopupContents(UI::ViewGroup *parent) {
|
||||
}
|
||||
|
||||
bool KeyMappingNewKeyDialog::key(const KeyInput &key) {
|
||||
if (ignoreInput_)
|
||||
return true;
|
||||
if (time_now_d() < delayUntil_)
|
||||
return true;
|
||||
if (key.flags & KEY_DOWN) {
|
||||
@ -390,6 +392,8 @@ void KeyMappingNewMouseKeyDialog::CreatePopupContents(UI::ViewGroup *parent) {
|
||||
bool KeyMappingNewMouseKeyDialog::key(const KeyInput &key) {
|
||||
if (mapped_)
|
||||
return false;
|
||||
if (ignoreInput_)
|
||||
return true;
|
||||
if (key.flags & KEY_DOWN) {
|
||||
if (key.keyCode == NKCODE_ESCAPE) {
|
||||
TriggerFinish(DR_OK);
|
||||
@ -428,6 +432,8 @@ void KeyMappingNewKeyDialog::axis(const AxisInput &axis) {
|
||||
return;
|
||||
if (IgnoreAxisForMapping(axis.axisId))
|
||||
return;
|
||||
if (ignoreInput_)
|
||||
return;
|
||||
|
||||
if (axis.value > AXIS_BIND_THRESHOLD) {
|
||||
InputMapping mapping(axis.deviceId, axis.axisId, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user