#pragma region CPL License /* Nuclex Native Framework Copyright (C) 2002-2013 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #pragma endregion // CPL License // If the library is compiled as a DLL, this ensures symbols are exported #define NUCLEX_INPUT_SOURCE 1 #include "BufferedKeyboard.h" namespace Nuclex { namespace Input { namespace Devices { // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::BufferKeyPress(Key::Enum pressedKey) { Event keyPressEvent; keyPressEvent.Type = KeyPressNotification; keyPressEvent.PressedOrReleasedKey = pressedKey; this->bufferedEvents.Add(keyPressEvent); } // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::BufferKeyRelease(Key::Enum releasedKey) { Event keyReleaseEvent; keyReleaseEvent.Type = KeyReleaseNotification; keyReleaseEvent.PressedOrReleasedKey = releasedKey; this->bufferedEvents.Add(keyReleaseEvent); } // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::BufferCharacterEntry(wchar_t enteredCharacter) { Event characterEntryEvent; characterEntryEvent.Type = CharacterEntryNotification; characterEntryEvent.EnteredCharacter = enteredCharacter; this->bufferedEvents.Add(characterEntryEvent); } // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::Update() { Event nextRecordedEvent; while(this->bufferedEvents.TryPop(nextRecordedEvent)) { if(nextRecordedEvent.Type == SnapshotNotification) { break; } playbackEvent(nextRecordedEvent); } } // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::TakeSnapshot() { Event snapshotEvent; snapshotEvent.Type = SnapshotNotification; this->bufferedEvents.Add(snapshotEvent); } // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::ClearSnapshots() { Event nextRecordedEvent; while(this->bufferedEvents.TryPop(nextRecordedEvent)) { playbackEvent(nextRecordedEvent); } } // ------------------------------------------------------------------------------------------- // void BufferedKeyboard::playbackEvent(const BufferedKeyboard::Event &recordedEvent) { switch(recordedEvent.Type) { case KeyPressNotification: { this->currentState.Keys.set(recordedEvent.PressedOrReleasedKey); KeyPressed(recordedEvent.PressedOrReleasedKey); break; } case KeyReleaseNotification: { this->currentState.Keys.reset(recordedEvent.PressedOrReleasedKey); KeyReleased(recordedEvent.PressedOrReleasedKey); break; } case CharacterEntryNotification: { CharacterEntered(recordedEvent.EnteredCharacter); break; } } } // ------------------------------------------------------------------------------------------- // }}} // namespace Nuclex::Input::Devices