private static unsafe void ProcessTextInputEvent(Sdl2NativeWindow window, TextInputEvent ev) { // Calculate the length of the typed text string int length; for (length = 0; length < TextInputEvent.TextSize && ev.Text[length] != '\0'; length++) { ; } // Make sure we have enough space to decode this string int decoded_length = Encoding.UTF8.GetCharCount(ev.Text, length); if (window.DecodeTextBuffer.Length < decoded_length) { Array.Resize( ref window.DecodeTextBuffer, 2 * Math.Max(decoded_length, window.DecodeTextBuffer.Length)); } // Decode the string from UTF8 to .Net UTF16 fixed(char *pBuffer = window.DecodeTextBuffer) { decoded_length = System.Text.Encoding.UTF8.GetChars( ev.Text, length, pBuffer, window.DecodeTextBuffer.Length); } for (int i = 0; i < decoded_length; i++) { window.OnKeyPress(window.DecodeTextBuffer[i]); } }
static unsafe void ProcessTextInputEvent(Sdl2NativeWindow window, TextInputEvent ev) { // Calculate the length of the typed text string int length; for (length = 0; length < TextInputEvent.TextSize && ev.Text[length] != '\0'; length++) ; // Make sure we have enough space to decode this string int decoded_length = Encoding.UTF8.GetCharCount(ev.Text, length); if (window.DecodeTextBuffer.Length < decoded_length) { Array.Resize( ref window.DecodeTextBuffer, 2 * Math.Max(decoded_length, window.DecodeTextBuffer.Length)); } // Decode the string from UTF8 to .Net UTF16 fixed (char* pBuffer = window.DecodeTextBuffer) { decoded_length = System.Text.Encoding.UTF8.GetChars( ev.Text, length, pBuffer, window.DecodeTextBuffer.Length); } for (int i = 0; i < decoded_length; i++) { window.OnKeyPress(window.DecodeTextBuffer[i]); } }