From 380b95bc59e7dc419f89df951cdc086e792cb0ff Mon Sep 17 00:00:00 2001
From: Caian Benedicto <caianbene@gmail.com>
Date: Tue, 12 Oct 2021 16:54:21 -0300
Subject: Inline software keyboard without input pop up dialog (#2180)

* Initial implementation

* Refactor dynamic text input keys out to facilitate configuration via UI

* Fix code styling

* Add per applet indirect layer handles

* Remove static functions from SoftwareKeyboardRenderer

* Remove inline keyboard reset delay

* Remove inline keyboard V2 responses

* Add inline keyboard soft-lock recovering

* Add comments

* Forward accept and cancel key names to the keyboard and add soft-lock prevention line

* Add dummy window to handle paste events

* Rework inline keyboard state machine and graphics

* Implement IHostUiHandler interfaces on headless WindowBase class

* Add inline keyboard assets

* Fix coding style

* Fix coding style

* Change mode cycling shortcut to F6

* Fix invalid calc size error in games using extended calc

* Remove unnecessary namespaces
---
 .../SoftwareKeyboard/SoftwareKeyboardAppearEx.cs   | 100 +++++++++++++++++++++
 1 file changed, 100 insertions(+)
 create mode 100644 Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardAppearEx.cs

(limited to 'Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardAppearEx.cs')

diff --git a/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardAppearEx.cs b/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardAppearEx.cs
new file mode 100644
index 00000000..d1756b07
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardAppearEx.cs
@@ -0,0 +1,100 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
+{
+    /// <summary>
+    /// A structure with appearance configurations for the software keyboard when running in inline mode.
+    /// </summary>
+    [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
+    struct SoftwareKeyboardAppearEx
+    {
+        public const int OkTextLength = 8;
+
+        public KeyboardMode KeyboardMode;
+
+        /// <summary>
+        /// The string displayed in the Submit button.
+        /// </summary>
+        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = OkTextLength + 1)]
+        public string OkText;
+
+        /// <summary>
+        /// The character displayed in the left button of the numeric keyboard.
+        /// </summary>
+        public char LeftOptionalSymbolKey;
+
+        /// <summary>
+        /// The character displayed in the right button of the numeric keyboard.
+        /// </summary>
+        public char RightOptionalSymbolKey;
+
+        /// <summary>
+        /// When set, predictive typing is enabled making use of the system dictionary, and any custom user dictionary.
+        /// </summary>
+        [MarshalAs(UnmanagedType.I1)]
+        public bool PredictionEnabled;
+
+        /// <summary>
+        /// When set, there is only the option to accept the input.
+        /// </summary>
+        [MarshalAs(UnmanagedType.I1)]
+        public bool CancelButtonDisabled;
+
+        /// <summary>
+        /// Specifies prohibited characters that cannot be input into the text entry area.
+        /// </summary>
+        public InvalidCharFlags InvalidChars;
+
+        /// <summary>
+        /// Maximum text length allowed.
+        /// </summary>
+        public int TextMaxLength;
+
+        /// <summary>
+        /// Minimum text length allowed.
+        /// </summary>
+        public int TextMinLength;
+
+        /// <summary>
+        /// Indicates the return button is enabled in the keyboard. This allows for input with multiple lines.
+        /// </summary>
+        [MarshalAs(UnmanagedType.I1)]
+        public bool UseNewLine;
+
+        /// <summary>
+        /// [10.0.0+] If value is 1 or 2, then keytopAsFloating=0 and footerScalable=1 in Calc.
+        /// </summary>
+        public KeyboardMiniaturizationMode MiniaturizationMode;
+
+        public byte Reserved1;
+        public byte Reserved2;
+
+        /// <summary>
+        /// Bit field with invalid buttons for the keyboard.
+        /// </summary>
+        public InvalidButtonFlags InvalidButtons;
+
+        [MarshalAs(UnmanagedType.I1)]
+        public bool UseSaveData;
+
+        public uint   Reserved3;
+        public ushort Reserved4;
+        public byte   Reserved5;
+
+        /// <summary>
+        /// The id of the user associated with the appear request.
+        /// </summary>
+        public ulong Uid0;
+        public ulong Uid1;
+
+        /// <summary>
+        /// The sampling number for the keyboard appearance.
+        /// </summary>
+        public ulong SamplingNumber;
+
+        public ulong Reserved6;
+        public ulong Reserved7;
+        public ulong Reserved8;
+        public ulong Reserved9;
+    }
+}
-- 
cgit v1.2.3-70-g09d2