public void TextInput(char c, Keys key)
        {
            TextInputIsExecuting = true;

            lastInputColorSelector = new Color(255, 0, 0, 99);

            if (RecordTypedCharacters)
            {
                if (c == '\t')
                {
                    sbTotalMsg.Append("    ");
                }
                else
                {
                    if (key == Keys.Back)
                    {
                        if (sbTotalMsg.Length > 0)
                        {
                            sbTotalMsg.Length -= 1;
                        }
                    }
                    else
                    {
                        sbTotalMsg.Append(c);
                    }
                }
            }

            //k0_Rect = UsKeyStruct.GetRectangle(Keys.None, visualGraphicPosition);
            //k1_Rect = UsKeyStruct.GetRectangle(Keys.None, visualGraphicPosition);

            k0_Rect = UsKeyStruct.GetRectangle(key, visualGraphicPosition);
        }
        // control keys have firing priority.
        public void CntrKeyInput(Keys key0, Keys key1, Keys key2)
        {
            ControlKeyInputIsExecuting = false;
            TextInputIsExecuting       = false;

            ControlKeyInputIsExecuting = true;

            lastInputColorSelector = new Color(0, 0, 255, 99);

            k0_Rect = UsKeyStruct.GetRectangle(key0, visualGraphicPosition);
            k1_Rect = UsKeyStruct.GetRectangle(key1, visualGraphicPosition);
            k2_Rect = UsKeyStruct.GetRectangle(key2, visualGraphicPosition);

            // control z clear the input recording buffer.
            if (IsCommandActive(key0, key1, key2, Keys.LeftControl, Keys.Delete))
            {
                sbTotalMsg.Clear();
            }
        }
        public void Draw(SpriteBatch spriteBatch, SpriteFont currentFont, Texture2D keyboardTexture, Texture2D dot, Vector2 position, GameTime gameTime)
        {
            keyPressInfoPosition  = position + KeyPressInfoOffset;
            visualGraphicPosition = position + VisualGraphicPositionOffset;
            textPosition          = position + TextPositionOffset;
            var offsetTxtInputmsg   = keyPressInfoPosition + new Vector2(0, 120);
            var offsetCntrlInputmsg = keyPressInfoPosition + new Vector2(0, 140);
            var offsetClearTextmsg  = keyPressInfoPosition + new Vector2(0, 160);

            Color solid = lastInputColorSelector;

            solid.A = 255;

            if (KeysAndTextInput.Caps)
            {
                k_caps_Rect = UsKeyStruct.GetRectangle(Keys.CapsLock, visualGraphicPosition);
            }
            else
            {
                k_caps_Rect = UsKeyStruct.GetRectangle(Keys.None, visualGraphicPosition);
            }

            // display the visual keyboard.
            spriteBatch.Draw(keyboardTexture, visualGraphicPosition, Color.Wheat);
            if (TextInputIsExecuting || ControlKeyInputIsExecuting)
            {
                spriteBatch.Draw(dot, k0_Rect, lastInputColorSelector);
            }
            if (ControlKeyInputIsExecuting)
            {
                spriteBatch.Draw(dot, k1_Rect, lastInputColorSelector);
                spriteBatch.Draw(dot, k2_Rect, lastInputColorSelector);
            }
            spriteBatch.Draw(dot, k_caps_Rect, new Color(0, 120, 220, 79));

            if (DisplayKeypressText)
            {
                // watch the actual key presses.
                spriteBatch.DrawString(currentFont, KeysAndTextInput.KeyPressInformationMessage, keyPressInfoPosition, Color.Wheat);
                // display which are firing.
                if (TextInputIsExecuting)
                {
                    spriteBatch.DrawString(currentFont, textInputMsg, offsetTxtInputmsg, Color.Red);
                }
                if (ControlKeyInputIsExecuting)
                {
                    spriteBatch.DrawString(currentFont, controlKeyInputMsg, offsetCntrlInputmsg, Color.Blue);
                }
                // clear instructions.
                spriteBatch.DrawString(currentFont, userClearTextInstructionMsg, offsetClearTextmsg, Color.White);
            }

            // display key presses as a continuous string.
            if (DisplayRecordedTypedCharacters)
            {
                spriteBatch.DrawString(currentFont, sbTotalMsg, textPosition, Color.DarkGreen);
            }

            if (KeysAndTextInput.IsKeyPressOccuring == false)
            {
                // Clear out the visual keys
                k0_Rect = UsKeyStruct.GetRectangle(Keys.None, visualGraphicPosition);
                k1_Rect = UsKeyStruct.GetRectangle(Keys.None, visualGraphicPosition);
                k2_Rect = UsKeyStruct.GetRectangle(Keys.None, visualGraphicPosition);
            }
        }