software_keyboard.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <functional>
  5. #include "common/common_types.h"
  6. #include "core/frontend/applets/applet.h"
  7. #include "core/hle/service/am/frontend/applet_software_keyboard_types.h"
  8. namespace Core::Frontend {
  9. struct KeyboardInitializeParameters {
  10. std::u16string ok_text;
  11. std::u16string header_text;
  12. std::u16string sub_text;
  13. std::u16string guide_text;
  14. std::u16string initial_text;
  15. char16_t left_optional_symbol_key;
  16. char16_t right_optional_symbol_key;
  17. u32 max_text_length;
  18. u32 min_text_length;
  19. s32 initial_cursor_position;
  20. Service::AM::Frontend::SwkbdType type;
  21. Service::AM::Frontend::SwkbdPasswordMode password_mode;
  22. Service::AM::Frontend::SwkbdTextDrawType text_draw_type;
  23. Service::AM::Frontend::SwkbdKeyDisableFlags key_disable_flags;
  24. bool use_blur_background;
  25. bool enable_backspace_button;
  26. bool enable_return_button;
  27. bool disable_cancel_button;
  28. };
  29. struct InlineAppearParameters {
  30. u32 max_text_length;
  31. u32 min_text_length;
  32. f32 key_top_scale_x;
  33. f32 key_top_scale_y;
  34. f32 key_top_translate_x;
  35. f32 key_top_translate_y;
  36. Service::AM::Frontend::SwkbdType type;
  37. Service::AM::Frontend::SwkbdKeyDisableFlags key_disable_flags;
  38. bool key_top_as_floating;
  39. bool enable_backspace_button;
  40. bool enable_return_button;
  41. bool disable_cancel_button;
  42. };
  43. struct InlineTextParameters {
  44. std::u16string input_text;
  45. s32 cursor_position;
  46. };
  47. class SoftwareKeyboardApplet : public Applet {
  48. public:
  49. using SubmitInlineCallback =
  50. std::function<void(Service::AM::Frontend::SwkbdReplyType, std::u16string, s32)>;
  51. using SubmitNormalCallback =
  52. std::function<void(Service::AM::Frontend::SwkbdResult, std::u16string, bool)>;
  53. virtual ~SoftwareKeyboardApplet();
  54. virtual void InitializeKeyboard(bool is_inline,
  55. KeyboardInitializeParameters initialize_parameters,
  56. SubmitNormalCallback submit_normal_callback_,
  57. SubmitInlineCallback submit_inline_callback_) = 0;
  58. virtual void ShowNormalKeyboard() const = 0;
  59. virtual void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result,
  60. std::u16string text_check_message) const = 0;
  61. virtual void ShowInlineKeyboard(InlineAppearParameters appear_parameters) const = 0;
  62. virtual void HideInlineKeyboard() const = 0;
  63. virtual void InlineTextChanged(InlineTextParameters text_parameters) const = 0;
  64. virtual void ExitKeyboard() const = 0;
  65. };
  66. class DefaultSoftwareKeyboardApplet final : public SoftwareKeyboardApplet {
  67. public:
  68. ~DefaultSoftwareKeyboardApplet() override;
  69. void Close() const override;
  70. void InitializeKeyboard(bool is_inline, KeyboardInitializeParameters initialize_parameters,
  71. SubmitNormalCallback submit_normal_callback_,
  72. SubmitInlineCallback submit_inline_callback_) override;
  73. void ShowNormalKeyboard() const override;
  74. void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result,
  75. std::u16string text_check_message) const override;
  76. void ShowInlineKeyboard(InlineAppearParameters appear_parameters) const override;
  77. void HideInlineKeyboard() const override;
  78. void InlineTextChanged(InlineTextParameters text_parameters) const override;
  79. void ExitKeyboard() const override;
  80. private:
  81. void SubmitNormalText(std::u16string text) const;
  82. void SubmitInlineText(std::u16string_view text) const;
  83. KeyboardInitializeParameters parameters{};
  84. mutable SubmitNormalCallback submit_normal_callback;
  85. mutable SubmitInlineCallback submit_inline_callback;
  86. };
  87. } // namespace Core::Frontend