␉␉␉List<Keys> keys = new List<Keys>();␊ |
␊ |
␉␉␉/* Setup Text Input Control Character Arrays␊ |
␉␉␉ * (Only 4 control keys supported at this time)␊ |
␉␉␉ * (Only 7 control keys supported at this time)␊ |
␉␉␉ */␊ |
␉␉␉bool[] INTERNAL_TextInputControlDown = new bool[4];␊ |
␉␉␉int[] INTERNAL_TextInputControlRepeat = new int[4];␊ |
␉␉␉bool INTERNAL_TextInputSuppress = false;␊ |
␉␉␉char[] textInputCharacters = new char[]␊ |
␉␉␉{␊ |
␉␉␉␉(char) 2,␉// Home␊ |
␉␉␉␉(char) 3,␉// End␊ |
␉␉␉␉(char) 8,␉// Backspace␊ |
␉␉␉␉(char) 9,␉// Tab␊ |
␉␉␉␉(char) 13,␉// Enter␊ |
␉␉␉␉(char) 127,␉// Delete␊ |
␉␉␉␉(char) 22␉// Ctrl+V (Paste)␊ |
␉␉␉};␊ |
␉␉␉Dictionary<Keys, int> textInputBindings = new Dictionary<Keys, int>()␊ |
␉␉␉{␊ |
␉␉␉␉{ Keys.Home,␉0 },␊ |
␉␉␉␉{ Keys.End,␉1 },␊ |
␉␉␉␉{ Keys.Back,␉2 },␊ |
␉␉␉␉{ Keys.Tab,␉3 },␊ |
␉␉␉␉{ Keys.Enter,␉4 },␊ |
␉␉␉␉{ Keys.Delete,␉5 }␊ |
␉␉␉␉// Ctrl+V is special!␊ |
␉␉␉};␊ |
␉␉␉bool[] textInputControlDown = new bool[textInputCharacters.Length];␊ |
␉␉␉int[] textInputControlRepeat = new int[textInputCharacters.Length];␊ |
␉␉␉bool textInputSuppress = false;␊ |
␊ |
␉␉␉SDL.SDL_Event evt;␊ |
␊ |
|
␉␉␉␉␉␉if (!keys.Contains(key))␊ |
␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉keys.Add(key);␊ |
␉␉␉␉␉␉␉if (key == Keys.Back)␊ |
␉␉␉␉␉␉␉if (textInputBindings.ContainsKey(key))␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[0] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[0] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 8); // Backspace␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Tab)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[1] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[1] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 9); // Tab␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Enter)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[2] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[2] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 13); // Enter␊ |
␉␉␉␉␉␉␉␉int textIndex = textInputBindings[key];␊ |
␉␉␉␉␉␉␉␉textInputControlDown[textIndex] = true;␊ |
␉␉␉␉␉␉␉␉textInputControlRepeat[textIndex] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput(textInputCharacters[textIndex]);␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (keys.Contains(Keys.LeftControl) && key == Keys.V)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[3] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[3] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 22); // Control-V (Paste)␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputSuppress = true;␊ |
␉␉␉␉␉␉␉␉textInputControlDown[6] = true;␊ |
␉␉␉␉␉␉␉␉textInputControlRepeat[6] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput(textInputCharacters[6]);␊ |
␉␉␉␉␉␉␉␉textInputSuppress = true;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉}␊ |
␉␉␉␉␉}␊ |
|
␉␉␉␉␉␉Keys key = SDL2_KeyboardUtil.ToXNA(ref evt.key.keysym);␊ |
␉␉␉␉␉␉if (keys.Remove(key))␊ |
␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉if (key == Keys.Back)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[0] = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Tab)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[1] = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Enter)␊ |
␉␉␉␉␉␉␉if (textInputBindings.ContainsKey(key))␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[2] = false;␊ |
␉␉␉␉␉␉␉␉textInputControlDown[textInputBindings[key]] = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if ((!keys.Contains(Keys.LeftControl) && INTERNAL_TextInputControlDown[3]) || key == Keys.V)␊ |
␉␉␉␉␉␉␉else if ((!keys.Contains(Keys.LeftControl) && textInputControlDown[3]) || key == Keys.V)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[3] = false;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputSuppress = false;␊ |
␉␉␉␉␉␉␉␉textInputControlDown[6] = false;␊ |
␉␉␉␉␉␉␉␉textInputSuppress = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉}␊ |
␉␉␉␉␉}␊ |
|
␉␉␉␉␉}␊ |
␊ |
␉␉␉␉␉// Text Input␊ |
␉␉␉␉␉else if (evt.type == SDL.SDL_EventType.SDL_TEXTINPUT && !INTERNAL_TextInputSuppress)␊ |
␉␉␉␉␉else if (evt.type == SDL.SDL_EventType.SDL_TEXTINPUT && !textInputSuppress)␊ |
␉␉␉␉␉{␊ |
␉␉␉␉␉␉string text;␊ |
␊ |
|
␉␉␉␉␉}␊ |
␉␉␉␉}␊ |
␉␉␉␉// Text Input Controls Key Handling␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[0] && INTERNAL_TextInputControlRepeat[0] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 8);␊ |
␉␉␉␉}␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[1] && INTERNAL_TextInputControlRepeat[1] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 9);␊ |
␉␉␉␉}␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[2] && INTERNAL_TextInputControlRepeat[2] <= Environment.TickCount)␊ |
␉␉␉␉for (int i = 0; i < textInputCharacters.Length; i += 1)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 13);␊ |
␉␉␉␉}␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[3] && INTERNAL_TextInputControlRepeat[3] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 22);␊ |
␉␉␉␉␉if (textInputControlDown[i] && textInputControlRepeat[i] <= Environment.TickCount)␊ |
␉␉␉␉␉{␊ |
␉␉␉␉␉␉TextInputEXT.OnTextInput(textInputCharacters[i]);␊ |
␉␉␉␉␉}␊ |
␉␉␉␉}␊ |
␊ |
␉␉␉␉Keyboard.SetKeys(keys);␊ |