Ejemplo n.º 1
0
        public SoftwareKeyboardRenderer(IHostUiTheme uiTheme)
        {
            _renderer = new SoftwareKeyboardRendererBase(uiTheme);

            StartTextBoxBlinker(_textBoxBlinkTimedAction, _state, _stateLock);
            StartRenderer(_renderAction, _renderer, _state, _stateLock);
        }
Ejemplo n.º 2
0
        private static void StartRenderer(TimedAction timedAction, SoftwareKeyboardRendererBase renderer, SoftwareKeyboardUiState state, object stateLock)
        {
            SoftwareKeyboardUiState internalState = new SoftwareKeyboardUiState();

            bool canCreateSurface = false;
            bool needsUpdate      = true;

            timedAction.Reset(() =>
            {
                lock (stateLock)
                {
                    if (!Monitor.Wait(stateLock, RendererWaitTimeoutMilliseconds))
                    {
                        return;
                    }

                    needsUpdate  = UpdateStateField(ref state.InputText, ref internalState.InputText);
                    needsUpdate |= UpdateStateField(ref state.CursorBegin, ref internalState.CursorBegin);
                    needsUpdate |= UpdateStateField(ref state.CursorEnd, ref internalState.CursorEnd);
                    needsUpdate |= UpdateStateField(ref state.AcceptPressed, ref internalState.AcceptPressed);
                    needsUpdate |= UpdateStateField(ref state.CancelPressed, ref internalState.CancelPressed);
                    needsUpdate |= UpdateStateField(ref state.OverwriteMode, ref internalState.OverwriteMode);
                    needsUpdate |= UpdateStateField(ref state.TypingEnabled, ref internalState.TypingEnabled);
                    needsUpdate |= UpdateStateField(ref state.ControllerEnabled, ref internalState.ControllerEnabled);
                    needsUpdate |= UpdateStateField(ref state.TextBoxBlinkCounter, ref internalState.TextBoxBlinkCounter);

                    canCreateSurface = state.SurfaceInfo != null && internalState.SurfaceInfo == null;

                    if (canCreateSurface)
                    {
                        internalState.SurfaceInfo = state.SurfaceInfo;
                    }
                }

                if (canCreateSurface)
                {
                    renderer.CreateSurface(internalState.SurfaceInfo);
                }

                if (needsUpdate)
                {
                    renderer.DrawMutableElements(internalState);
                    renderer.CopyImageToBuffer();
                    needsUpdate = false;
                }
            });
        }