// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. #include "precomp.h" #include "inc/IInputEvent.hpp" #include std::unique_ptr IInputEvent::Create(const INPUT_RECORD& record) { switch (record.EventType) { case KEY_EVENT: return std::make_unique(record.Event.KeyEvent); case MOUSE_EVENT: return std::make_unique(record.Event.MouseEvent); case WINDOW_BUFFER_SIZE_EVENT: return std::make_unique(record.Event.WindowBufferSizeEvent); case MENU_EVENT: return std::make_unique(record.Event.MenuEvent); case FOCUS_EVENT: return std::make_unique(record.Event.FocusEvent); default: THROW_HR(E_INVALIDARG); } } std::deque> IInputEvent::Create(gsl::span records) { std::deque> outEvents; for (const auto& record : records) { outEvents.push_back(Create(record)); } return outEvents; } // Routine Description: // - Converts std::deque to std::deque> // Arguments: // - inRecords - records to convert // Return Value: // - std::deque of IInputEvents on success. Will throw exception on failure. std::deque> IInputEvent::Create(const std::deque& records) { std::deque> outEvents; for (const auto& record : records) { std::unique_ptr event = Create(record); outEvents.push_back(std::move(event)); } return outEvents; } std::vector IInputEvent::ToInputRecords(const std::deque>& events) { std::vector records; records.reserve(events.size()); for (auto& evt : events) { records.push_back(evt->ToInputRecord()); } return records; }