aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs
diff options
context:
space:
mode:
authorCaian Benedicto <caianbene@gmail.com>2021-10-12 16:54:21 -0300
committerGitHub <noreply@github.com>2021-10-12 21:54:21 +0200
commit380b95bc59e7dc419f89df951cdc086e792cb0ff (patch)
tree59a636b48db991d8e13132d7d3f41464d9b04b24 /Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs
parent69093cf2d69490862aff974f170cee63a0016fd0 (diff)
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
Diffstat (limited to 'Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs')
-rw-r--r--Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs182
1 files changed, 182 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs b/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs
new file mode 100644
index 00000000..fded8975
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardCalcEx.cs
@@ -0,0 +1,182 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
+{
+ /// <summary>
+ /// A structure with configuration options of the software keyboard when starting a new input request in inline mode.
+ /// This is the extended version of the structure with extended appear options.
+ /// </summary>
+ [StructLayout(LayoutKind.Sequential, Pack=1, CharSet = CharSet.Unicode)]
+ struct SoftwareKeyboardCalcEx
+ {
+ /// <summary>
+ /// This struct was built following Switchbrew's specs, but this size (larger) is also found in real games.
+ /// It's assumed that this is padding at the end of this struct, because all members seem OK.
+ /// </summary>
+ public const int AlternativeSize = 1256;
+
+ public const int InputTextLength = 505;
+
+ public uint Unknown;
+
+ /// <summary>
+ /// The size of the Calc struct, as reported by the process communicating with the applet.
+ /// </summary>
+ public ushort Size;
+
+ public byte Unknown1;
+ public byte Unknown2;
+
+ /// <summary>
+ /// Configuration flags. Each bit in the bitfield enabled a different operation of the keyboard
+ /// using the data provided with the Calc structure.
+ /// </summary>
+ public KeyboardCalcFlags Flags;
+
+ /// <summary>
+ /// The original parameters used when initializing the keyboard applet.
+ /// Flag: 0x1
+ /// </summary>
+ public SoftwareKeyboardInitialize Initialize;
+
+ /// <summary>
+ /// The audio volume used by the sound effects of the keyboard.
+ /// Flag: 0x2
+ /// </summary>
+ public float Volume;
+
+ /// <summary>
+ /// The initial position of the text cursor (caret) in the provided input text.
+ /// Flag: 0x10
+ /// </summary>
+ public int CursorPos;
+
+ /// <summary>
+ /// Appearance configurations for the on-screen keyboard.
+ /// </summary>
+ public SoftwareKeyboardAppearEx Appear;
+
+ /// <summary>
+ /// The initial input text to be used by the software keyboard.
+ /// Flag: 0x8
+ /// </summary>
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = InputTextLength + 1)]
+ public string InputText;
+
+ /// <summary>
+ /// When set, the strings communicated by software keyboard will be encoded as UTF-8 instead of UTF-16.
+ /// Flag: 0x20
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool UseUtf8;
+
+ public byte Unknown3;
+
+ /// <summary>
+ /// [5.0.0+] Enable the backspace key in the software keyboard.
+ /// Flag: 0x8000
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool BackspaceEnabled;
+
+ public short Unknown4;
+ public byte Unknown5;
+
+ /// <summary>
+ /// Flag: 0x200
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool KeytopAsFloating;
+
+ /// <summary>
+ /// Flag: 0x100
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool FooterScalable;
+
+ /// <summary>
+ /// Flag: 0x100
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool AlphaEnabledInInputMode;
+
+ /// <summary>
+ /// Flag: 0x100
+ /// </summary>
+ public byte InputModeFadeType;
+
+ /// <summary>
+ /// When set, the software keyboard ignores touch input.
+ /// Flag: 0x200
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool TouchDisabled;
+
+ /// <summary>
+ /// When set, the software keyboard ignores hardware keyboard commands.
+ /// Flag: 0x800
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool HardwareKeyboardDisabled;
+
+ public uint Unknown6;
+ public uint Unknown7;
+
+ /// <summary>
+ /// Default value is 1.0.
+ /// Flag: 0x200
+ /// </summary>
+ public float KeytopScale0;
+
+ /// <summary>
+ /// Default value is 1.0.
+ /// Flag: 0x200
+ /// </summary>
+ public float KeytopScale1;
+
+ public float KeytopTranslate0;
+ public float KeytopTranslate1;
+
+ /// <summary>
+ /// Default value is 1.0.
+ /// Flag: 0x100
+ /// </summary>
+ public float KeytopBgAlpha;
+
+ /// <summary>
+ /// Default value is 1.0.
+ /// Flag: 0x100
+ /// </summary>
+ public float FooterBgAlpha;
+
+ /// <summary>
+ /// Default value is 1.0.
+ /// Flag: 0x200
+ /// </summary>
+ public float BalloonScale;
+
+ public float Unknown8;
+ public uint Unknown9;
+ public uint Unknown10;
+ public uint Unknown11;
+
+ /// <summary>
+ /// [5.0.0+] Enable sound effect.
+ /// Flag: Enable: 0x2000
+ /// Disable: 0x4000
+ /// </summary>
+ public byte SeGroup;
+
+ /// <summary>
+ /// [6.0.0+] Enables the Trigger field when Trigger is non-zero.
+ /// </summary>
+ public byte TriggerFlag;
+
+ /// <summary>
+ /// [6.0.0+] Always set to zero.
+ /// </summary>
+ public byte Trigger;
+
+ public byte Padding;
+ }
+}