#include "XcbEventInterface.h" #include "KeyboardEvent.h" #include "DiscretePoint.h" #include "MouseEvent.h" #include "PaintEvent.h" #include "Keyboard.h" #include std::unique_ptr XcbEventInterface::Create() { return std::make_unique(); } std::unique_ptr XcbEventInterface::convertKeyPress(xcb_key_press_event_t* event, Keyboard* keyboard) const { auto ui_event = KeyboardEvent::Create(); ui_event->setAction(KeyboardEvent::Action::Pressed); if (auto function = keyboard->getFunction(event->detail); function != Keyboard::Function::UNSET) { ui_event->setFunction(function); } else { ui_event->setKeyString(keyboard->getKeyString(event->detail)); } return ui_event; } std::unique_ptr XcbEventInterface::convertKeyRelease(xcb_key_press_event_t* event, Keyboard* keyboard) const { auto ui_event = KeyboardEvent::Create(); ui_event->setAction(KeyboardEvent::Action::Released); if (auto function = keyboard->getFunction(event->detail); function != Keyboard::Function::UNSET) { ui_event->setFunction(function); } else { ui_event->setKeyString(keyboard->getKeyString(event->detail)); } return ui_event; } std::unique_ptr XcbEventInterface::convertButtonPress(xcb_button_press_event_t* event) const { auto ui_event = MouseEvent::Create(); auto x = static_cast(event->event_x); auto y = static_cast(event->event_y); ui_event->setClientLocation(DiscretePoint(x, y)); auto screen_x = static_cast(event->root_x); auto screen_y = static_cast(event->root_y); ui_event->setScreenLocation(DiscretePoint(screen_x, screen_y)); ui_event->setAction(MouseEvent::Action::Pressed); return ui_event; } std::unique_ptr XcbEventInterface::convertButtonRelease(xcb_button_press_event_t* event) const { auto ui_event = MouseEvent::Create(); auto x = static_cast(event->event_x); auto y = static_cast(event->event_y); ui_event->setClientLocation(DiscretePoint(x, y)); auto screen_x = static_cast(event->root_x); auto screen_y = static_cast(event->root_y); ui_event->setScreenLocation(DiscretePoint(screen_x, screen_y)); ui_event->setAction(MouseEvent::Action::Released); return ui_event; }