Example #1
0
        private void onTextEntered(SDL_TextInputEvent args)
        {
            var text = "";

            unsafe
            {
                text = Encoding.UTF8.GetString(args.text, 32);
            }

            this.text.AddRange(text);
        }
        /// <summary>
        /// Handles SDL2's TEXTINPUT event.
        /// </summary>
        private unsafe void OnTextInput(ref SDL_TextInputEvent evt)
        {
            var window = Ultraviolet.GetPlatform().Windows.GetByID((int)evt.windowID);

            fixed(byte *input = evt.text)
            {
                if (ConvertTextInputToUtf16(input))
                {
                    OnTextInput(window);
                }
            }
        }
Example #3
0
        private static string GetText(SDL_TextInputEvent textEvent)
        {
            unsafe
            {
                var i = 0;
                var data = new byte[SDL_TEXTINPUTEVENT_TEXT_SIZE];
                for (; i < SDL_TEXTINPUTEVENT_TEXT_SIZE; i++)
                {
                    var b = textEvent.text[i];
                    if (b == '\0')
                        break;

                    data[i] = b;
                }

                return Encoding.UTF8.GetString(data, 0, i);
            }
        }
Example #4
0
        /// <summary>
        /// 处理TextInput事件
        /// </summary>
        private static unsafe void HandleTextInputEvent(SDL_TextInputEvent e)
        {
            uint byteCount = 0;

            // Loop until the null terminator is found or the max size is reached.
            while (byteCount < SDL_TextInputEvent.MaxTextSize && e.text[byteCount++] != 0)
            {
            }
            if (byteCount > 1)
            {
                // We don't want the null terminator.
                byteCount -= 1;
                int      charCount  = Encoding.UTF8.GetCharCount(e.text, (int)byteCount);
                char *   charsPtr   = stackalloc char[charCount];
                var      syt        = Encoding.UTF8.GetString(e.text, (int)byteCount);
                string   input_text = syt;
                CefRange range      = new CefRange();
                range.From = -1;
                _host.ImeCommitText(input_text, range, 0);
            }
        }
Example #5
0
        /// <summary>
        /// 直接转换相关事件
        /// </summary>
        /// <param name="ev"></param>
        public static unsafe void HandleEvent(SDL_Event *ev)
        {
            if (_host == null)
            {
                return;
            }
            switch (ev->type)
            {
            case SDL_EventType.Quit:
                //Close();
                break;

            case SDL_EventType.Terminating:
                //Close();
                break;

            case SDL_EventType.WindowEvent:
                //SDL_WindowEvent windowEvent = Unsafe.Read<SDL_WindowEvent>(ev);
                //HandleWindowEvent(windowEvent);
                break;

            case SDL_EventType.KeyDown:
            case SDL_EventType.KeyUp:
                SDL_KeyboardEvent keyboardEvent = Unsafe.Read <SDL_KeyboardEvent>(ev);
                HandleKeyboardEvent(keyboardEvent);
                break;

            case SDL_EventType.TextEditing:
                break;

            case SDL_EventType.TextInput:
                SDL_TextInputEvent textInputEvent = Unsafe.Read <SDL_TextInputEvent>(ev);
                HandleTextInputEvent(textInputEvent);
                break;

            case SDL_EventType.KeyMapChanged:
                break;

            case SDL_EventType.MouseMotion:
                SDL_MouseMotionEvent mouseMotionEvent = Unsafe.Read <SDL_MouseMotionEvent>(ev);
                HandleMouseMotionEvent(mouseMotionEvent);
                break;

            case SDL_EventType.MouseButtonDown:
            case SDL_EventType.MouseButtonUp:
                SDL_MouseButtonEvent mouseButtonEvent = Unsafe.Read <SDL_MouseButtonEvent>(ev);
                HandleMouseButtonEvent(mouseButtonEvent);
                break;

            case SDL_EventType.MouseWheel:
                SDL_MouseWheelEvent mouseWheelEvent = Unsafe.Read <SDL_MouseWheelEvent>(ev);
                HandleMouseWheelEvent(mouseWheelEvent);
                break;

            case SDL_EventType.JoyAxisMotion:
                break;

            case SDL_EventType.JoyBallMotion:
                break;

            case SDL_EventType.JoyHatMotion:
                break;

            case SDL_EventType.JoyButtonDown:
                break;

            case SDL_EventType.JoyButtonUp:
                break;

            case SDL_EventType.JoyDeviceAdded:
                break;

            case SDL_EventType.JoyDeviceRemoved:
                break;

            case SDL_EventType.ControllerAxisMotion:
                break;

            case SDL_EventType.ControllerButtonDown:
                break;

            case SDL_EventType.ControllerButtonUp:
                break;

            case SDL_EventType.ControllerDeviceAdded:
                break;

            case SDL_EventType.ControllerDeviceRemoved:
                break;

            case SDL_EventType.ControllerDeviceRemapped:
                break;

            case SDL_EventType.FingerDown:
                break;

            case SDL_EventType.FingerUp:
                break;

            case SDL_EventType.FingerMotion:
                break;

            case SDL_EventType.DollarGesture:
                break;

            case SDL_EventType.DollarRecord:
                break;

            case SDL_EventType.MultiGesture:
                break;

            case SDL_EventType.ClipboardUpdate:
                break;

            case SDL_EventType.DropFile:
                break;

            case SDL_EventType.DropTest:
                break;

            case SDL_EventType.DropBegin:
                break;

            case SDL_EventType.DropComplete:
                break;

            case SDL_EventType.AudioDeviceAdded:
                break;

            case SDL_EventType.AudioDeviceRemoved:
                break;

            case SDL_EventType.RenderTargetsReset:
                break;

            case SDL_EventType.RenderDeviceReset:
                break;

            case SDL_EventType.UserEvent:
                break;

            case SDL_EventType.LastEvent:
                break;

            default:
                // Ignore
                break;
            }
        }