mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-21 09:40:01 +00:00
overlays/osk: clear on enter
This commit is contained in:
parent
3d99fea575
commit
fb974a4551
@ -746,7 +746,7 @@ error_code getText(vm::ptr<CellOskDialogCallbackReturnParam> OutputInfo, bool is
|
|||||||
std::lock_guard lock(info.text_mtx);
|
std::lock_guard lock(info.text_mtx);
|
||||||
|
|
||||||
info.valid_text = {};
|
info.valid_text = {};
|
||||||
osk->Clear();
|
osk->Clear(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -301,7 +301,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
virtual void Create(const osk_params& params) = 0;
|
virtual void Create(const osk_params& params) = 0;
|
||||||
virtual void Clear() = 0;
|
virtual void Clear(bool clear_all_data) = 0;
|
||||||
|
|
||||||
// Closes the dialog.
|
// Closes the dialog.
|
||||||
// Set status to CELL_OSKDIALOG_CLOSE_CONFIRM or CELL_OSKDIALOG_CLOSE_CANCEL for user input.
|
// Set status to CELL_OSKDIALOG_CLOSE_CONFIRM or CELL_OSKDIALOG_CLOSE_CANCEL for user input.
|
||||||
|
@ -24,6 +24,8 @@ namespace rsx
|
|||||||
|
|
||||||
void osk_dialog::Close(s32 status)
|
void osk_dialog::Close(s32 status)
|
||||||
{
|
{
|
||||||
|
osk.notice("Closing osk (status=%d)", status);
|
||||||
|
|
||||||
if (status == FAKE_CELL_OSKDIALOG_CLOSE_TERMINATE)
|
if (status == FAKE_CELL_OSKDIALOG_CLOSE_TERMINATE)
|
||||||
{
|
{
|
||||||
close(false, true);
|
close(false, true);
|
||||||
@ -63,21 +65,39 @@ namespace rsx
|
|||||||
if (!m_use_separate_windows || continuous_mode == CELL_OSKDIALOG_CONTINUOUS_MODE_NONE)
|
if (!m_use_separate_windows || continuous_mode == CELL_OSKDIALOG_CONTINUOUS_MODE_NONE)
|
||||||
{
|
{
|
||||||
close(true, true);
|
close(true, true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear text edit in continuous separate window mode. Keep actual data just in case.
|
||||||
|
Clear(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
fade_animation.active = true;
|
fade_animation.active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::Clear()
|
void osk_dialog::Clear(bool clear_all_data)
|
||||||
{
|
{
|
||||||
std::lock_guard lock(m_preview_mutex);
|
osk.notice("Clearing osk (clear_all_data=%d)", clear_all_data);
|
||||||
|
|
||||||
|
// Try to lock. Clear might be called recursively.
|
||||||
|
const bool locked = m_preview_mutex.try_lock();
|
||||||
|
|
||||||
m_preview.caret_position = 0;
|
m_preview.caret_position = 0;
|
||||||
m_preview.value.clear();
|
m_preview.set_text({});
|
||||||
|
|
||||||
|
if (clear_all_data)
|
||||||
|
{
|
||||||
on_text_changed();
|
on_text_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locked)
|
||||||
|
{
|
||||||
|
m_preview_mutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_update = true;
|
||||||
|
}
|
||||||
|
|
||||||
void osk_dialog::add_panel(const osk_panel& panel)
|
void osk_dialog::add_panel(const osk_panel& panel)
|
||||||
{
|
{
|
||||||
// On PS3 apparently only 7 panels are added, the rest is ignored
|
// On PS3 apparently only 7 panels are added, the rest is ignored
|
||||||
@ -961,10 +981,12 @@ namespace rsx
|
|||||||
|
|
||||||
void osk_dialog::on_text_changed()
|
void osk_dialog::on_text_changed()
|
||||||
{
|
{
|
||||||
const auto ws = u32string_to_utf16(m_preview.value);
|
const std::u16string ws = u32string_to_utf16(m_preview.value);
|
||||||
const usz length = std::min(osk_text.size(), ws.length() + 1) * sizeof(char16_t);
|
const usz length = std::min(osk_text.size(), ws.length() + 1) * sizeof(char16_t);
|
||||||
memcpy(osk_text.data(), ws.c_str(), length);
|
memcpy(osk_text.data(), ws.c_str(), length);
|
||||||
|
|
||||||
|
osk.notice("on_text_changed: osk_text='%s'", utf16_to_ascii8(ws));
|
||||||
|
|
||||||
// Muted contrast for placeholder text
|
// Muted contrast for placeholder text
|
||||||
m_preview.fore_color.a = m_preview.value.empty() ? 0.5f : 1.f;
|
m_preview.fore_color.a = m_preview.value.empty() ? 0.5f : 1.f;
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ namespace rsx
|
|||||||
|
|
||||||
void Create(const osk_params& params) override;
|
void Create(const osk_params& params) override;
|
||||||
void Close(s32 status) override;
|
void Close(s32 status) override;
|
||||||
void Clear() override;
|
void Clear(bool clear_all_data) override;
|
||||||
|
|
||||||
void initialize_layout(const std::u32string& title, const std::u32string& initial_text);
|
void initialize_layout(const std::u32string& title, const std::u32string& initial_text);
|
||||||
void add_panel(const osk_panel& panel);
|
void add_panel(const osk_panel& panel);
|
||||||
|
@ -182,7 +182,7 @@ void osk_dialog_frame::Create(const osk_params& params)
|
|||||||
|
|
||||||
void osk_dialog_frame::SetOskText(const QString& text)
|
void osk_dialog_frame::SetOskText(const QString& text)
|
||||||
{
|
{
|
||||||
std::memcpy(osk_text.data(), utils::bless<char16_t>(text.constData()), std::min(osk_text.size(), text.size() + 1ull) * sizeof(char16_t));
|
std::memcpy(osk_text.data(), utils::bless<char16_t>(text.constData()), std::min(osk_text.size(), text.size() + usz{1}) * sizeof(char16_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog_frame::Close(s32 status)
|
void osk_dialog_frame::Close(s32 status)
|
||||||
@ -204,9 +204,9 @@ void osk_dialog_frame::Close(s32 status)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog_frame::Clear()
|
void osk_dialog_frame::Clear(bool clear_all_data)
|
||||||
{
|
{
|
||||||
if (m_dialog)
|
if (m_dialog && clear_all_data)
|
||||||
{
|
{
|
||||||
SetOskText("");
|
SetOskText("");
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ public:
|
|||||||
~osk_dialog_frame();
|
~osk_dialog_frame();
|
||||||
void Create(const osk_params& params) override;
|
void Create(const osk_params& params) override;
|
||||||
void Close(s32 status) override;
|
void Close(s32 status) override;
|
||||||
void Clear() override;
|
void Clear(bool clear_all_data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetOskText(const QString& text);
|
void SetOskText(const QString& text);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user