2024-05-03 22:34:10 +01:00
|
|
|
#include "VirtualPointer.hpp"
|
|
|
|
|
#include "../protocols/VirtualPointer.hpp"
|
2024-07-21 13:09:54 +02:00
|
|
|
#include <aquamarine/input/Input.hpp>
|
2024-05-03 22:34:10 +01:00
|
|
|
|
|
|
|
|
SP<CVirtualPointer> CVirtualPointer::create(SP<CVirtualPointerV1Resource> resource) {
|
|
|
|
|
SP<CVirtualPointer> pPointer = SP<CVirtualPointer>(new CVirtualPointer(resource));
|
|
|
|
|
|
2025-04-29 19:51:07 +02:00
|
|
|
pPointer->m_self = pPointer;
|
2024-05-03 22:34:10 +01:00
|
|
|
|
|
|
|
|
return pPointer;
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-29 19:51:07 +02:00
|
|
|
CVirtualPointer::CVirtualPointer(SP<CVirtualPointerV1Resource> resource) : m_pointer(resource) {
|
2025-01-17 18:21:34 +01:00
|
|
|
if UNLIKELY (!resource->good())
|
2024-05-03 22:34:10 +01:00
|
|
|
return;
|
|
|
|
|
|
2025-07-08 09:56:40 -07:00
|
|
|
m_listeners.destroy = m_pointer->m_events.destroy.listen([this] {
|
2025-04-29 19:51:07 +02:00
|
|
|
m_pointer.reset();
|
|
|
|
|
m_events.destroy.emit();
|
2024-07-21 13:09:54 +02:00
|
|
|
});
|
|
|
|
|
|
2025-07-08 09:56:40 -07:00
|
|
|
m_listeners.motion = m_pointer->m_events.move.listen([this](SMotionEvent event) {
|
|
|
|
|
event.device = m_self.lock();
|
|
|
|
|
m_pointerEvents.motion.emit(event);
|
2025-03-03 15:56:01 -05:00
|
|
|
});
|
2025-07-08 09:56:40 -07:00
|
|
|
m_listeners.motionAbsolute = m_pointer->m_events.warp.listen([this](SMotionAbsoluteEvent event) {
|
2024-07-22 17:24:24 +02:00
|
|
|
// we need to unpack the event and add our device here because it's required to calculate the position correctly
|
2025-07-08 09:56:40 -07:00
|
|
|
event.device = m_self.lock();
|
|
|
|
|
m_pointerEvents.motionAbsolute.emit(event);
|
2024-07-22 17:24:24 +02:00
|
|
|
});
|
2025-07-08 09:56:40 -07:00
|
|
|
m_listeners.button = m_pointer->m_events.button.forward(m_pointerEvents.button);
|
|
|
|
|
m_listeners.axis = m_pointer->m_events.axis.forward(m_pointerEvents.axis);
|
|
|
|
|
m_listeners.frame = m_pointer->m_events.frame.forward(m_pointerEvents.frame);
|
|
|
|
|
m_listeners.swipeBegin = m_pointer->m_events.swipeBegin.forward(m_pointerEvents.swipeBegin);
|
|
|
|
|
m_listeners.swipeEnd = m_pointer->m_events.swipeEnd.forward(m_pointerEvents.swipeEnd);
|
|
|
|
|
m_listeners.swipeUpdate = m_pointer->m_events.swipeUpdate.forward(m_pointerEvents.swipeUpdate);
|
|
|
|
|
m_listeners.pinchBegin = m_pointer->m_events.pinchBegin.forward(m_pointerEvents.pinchBegin);
|
|
|
|
|
m_listeners.pinchEnd = m_pointer->m_events.pinchEnd.forward(m_pointerEvents.pinchEnd);
|
|
|
|
|
m_listeners.pinchUpdate = m_pointer->m_events.pinchUpdate.forward(m_pointerEvents.pinchUpdate);
|
|
|
|
|
m_listeners.holdBegin = m_pointer->m_events.holdBegin.forward(m_pointerEvents.holdBegin);
|
|
|
|
|
m_listeners.holdEnd = m_pointer->m_events.holdEnd.forward(m_pointerEvents.holdEnd);
|
2025-05-04 23:39:00 +02:00
|
|
|
|
|
|
|
|
m_boundOutput = resource->m_boundOutput ? resource->m_boundOutput->m_name : "";
|
|
|
|
|
|
|
|
|
|
m_deviceName = m_pointer->m_name;
|
2024-05-03 22:34:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CVirtualPointer::isVirtual() {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-21 13:09:54 +02:00
|
|
|
SP<Aquamarine::IPointer> CVirtualPointer::aq() {
|
|
|
|
|
return nullptr;
|
2024-05-03 22:34:10 +01:00
|
|
|
}
|