/// <summary> /// Метод для удаления первой буквы в очереди /// (в случае, если нужная клавиша была верно нажата) /// </summary> public void DropFirstLetter() { lock (UpdatingStateLock) { TextToTypeQueue.Dequeue(); } }
/// <summary> /// Добавление букв в очередь /// </summary> /// <param name="characters">Символы добавляемых букв</param> public void AddLettersOnControl(char[] characters) { int curLetterX = Width; foreach (var character in characters) { char letter = char.ToUpper(character); float xPos = curLetterX; float yPos = this.Height / 2 - 30; Color color = KeyboardHelper.GetKeyColorForChar(letter); Letter newLetter = new Letter(letter, new PointF(xPos, yPos), color); TextToTypeQueue.Enqueue(newLetter); curLetterX += 30; } }
/// <summary> /// Обновить состояние элемента управления: добавить очередную букву из очереди ожидающих букв, /// сдвинуть уже отображаемые буквы влево, отрисовать новое состояние. Подцепляется на исполнение /// по таймеру /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UpdateState(object sender, EventArgs e) { if (TextToTypeQueue.Count == 0) { DrawNewState(); QueueIsEmptyEvent(); UpdatingStateTimer.Stop(); UpdatingStateTimer.Dispose(); } else if ((int)(TextToTypeQueue.Peek().position.X + g_fontSize * 4) <= Width / 2) { UpdatingStateTimer.Stop(); } else { PushQueueForward(); DrawNewState(); } }
/// <summary> /// Получить символ, который нужно ввести /// </summary> /// <returns>Первый символ из очереди</returns> public char GetLetterInTheMiddleOfControl() { return(TextToTypeQueue.Peek().letter); }