cursor: move to a hyprland impl
This moves wlr_cursor to a completely new impl mostly under CPointerManager Also adds beginSimple to OpenGL for simple render passes (e.g. cursor)
This commit is contained in:
parent
e4e84064f2
commit
ed411f53bd
51 changed files with 1550 additions and 496 deletions
5
src/devices/IHID.cpp
Normal file
5
src/devices/IHID.cpp
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#include "IHID.hpp"
|
||||
|
||||
eHIDType IHID::getType() {
|
||||
return HID_TYPE_UNKNOWN;
|
||||
}
|
||||
|
|
@ -10,13 +10,24 @@ enum eHIDCapabilityType : uint32_t {
|
|||
HID_INPUT_CAPABILITY_TOUCH = (1 << 2),
|
||||
};
|
||||
|
||||
enum eHIDType {
|
||||
HID_TYPE_UNKNOWN = 0,
|
||||
HID_TYPE_POINTER,
|
||||
HID_TYPE_KEYBOARD,
|
||||
HID_TYPE_TOUCH,
|
||||
HID_TYPE_TABLET,
|
||||
};
|
||||
|
||||
/*
|
||||
Base class for a HID device.
|
||||
This could be a keyboard, a mouse, or a touchscreen.
|
||||
*/
|
||||
class IHID {
|
||||
public:
|
||||
virtual ~IHID() {}
|
||||
|
||||
virtual uint32_t getCapabilities() = 0;
|
||||
virtual eHIDType getType();
|
||||
|
||||
struct {
|
||||
CSignal destroy;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,10 @@ uint32_t IKeyboard::getCapabilities() {
|
|||
return HID_INPUT_CAPABILITY_KEYBOARD;
|
||||
}
|
||||
|
||||
eHIDType IKeyboard::getType() {
|
||||
return HID_TYPE_KEYBOARD;
|
||||
}
|
||||
|
||||
IKeyboard::~IKeyboard() {
|
||||
events.destroy.emit();
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ class IKeyboard : public IHID {
|
|||
public:
|
||||
virtual ~IKeyboard();
|
||||
virtual uint32_t getCapabilities();
|
||||
virtual eHIDType getType();
|
||||
virtual bool isVirtual() = 0;
|
||||
virtual wlr_keyboard* wlr() = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,3 +3,7 @@
|
|||
uint32_t IPointer::getCapabilities() {
|
||||
return HID_INPUT_CAPABILITY_POINTER;
|
||||
}
|
||||
|
||||
eHIDType IPointer::getType() {
|
||||
return HID_TYPE_POINTER;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ struct wlr_pointer;
|
|||
class IPointer : public IHID {
|
||||
public:
|
||||
virtual uint32_t getCapabilities();
|
||||
virtual eHIDType getType();
|
||||
virtual bool isVirtual() = 0;
|
||||
virtual wlr_pointer* wlr() = 0;
|
||||
|
||||
|
|
@ -24,6 +25,7 @@ class IPointer : public IHID {
|
|||
struct SMotionAbsoluteEvent {
|
||||
uint32_t timeMs = 0;
|
||||
Vector2D absolute; // 0.0 - 1.0
|
||||
SP<IHID> device;
|
||||
};
|
||||
|
||||
struct SButtonEvent {
|
||||
|
|
|
|||
|
|
@ -2,4 +2,8 @@
|
|||
|
||||
uint32_t ITouch::getCapabilities() {
|
||||
return HID_INPUT_CAPABILITY_TOUCH;
|
||||
}
|
||||
}
|
||||
|
||||
eHIDType ITouch::getType() {
|
||||
return HID_TYPE_TOUCH;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,13 +10,15 @@ struct wlr_touch;
|
|||
class ITouch : public IHID {
|
||||
public:
|
||||
virtual uint32_t getCapabilities();
|
||||
virtual eHIDType getType();
|
||||
virtual bool isVirtual() = 0;
|
||||
virtual wlr_touch* wlr() = 0;
|
||||
|
||||
struct SDownEvent {
|
||||
uint32_t timeMs = 0;
|
||||
int32_t touchID = 0;
|
||||
Vector2D pos;
|
||||
uint32_t timeMs = 0;
|
||||
int32_t touchID = 0;
|
||||
Vector2D pos;
|
||||
SP<ITouch> device;
|
||||
};
|
||||
|
||||
struct SUpEvent {
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ CMouse::CMouse(wlr_pointer* mouse_) : mouse(mouse_) {
|
|||
pointerEvents.motionAbsolute.emit(SMotionAbsoluteEvent{
|
||||
.timeMs = E->time_msec,
|
||||
.absolute = {E->x, E->y},
|
||||
.device = self.lock(),
|
||||
});
|
||||
}, this, "CMouse");
|
||||
|
||||
|
|
@ -62,6 +63,10 @@ CMouse::CMouse(wlr_pointer* mouse_) : mouse(mouse_) {
|
|||
});
|
||||
}, this, "CMouse");
|
||||
|
||||
hyprListener_frame.initCallback(&mouse->events.frame, [this] (void* owner, void* data) {
|
||||
pointerEvents.frame.emit();
|
||||
}, this, "CMouse");
|
||||
|
||||
hyprListener_swipeBegin.initCallback(&mouse->events.swipe_begin, [this] (void* owner, void* data) {
|
||||
auto E = (wlr_pointer_swipe_begin_event*)data;
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ CTouchDevice::CTouchDevice(wlr_touch* touch_) : touch(touch_) {
|
|||
.timeMs = E->time_msec,
|
||||
.touchID = E->touch_id,
|
||||
.pos = {E->x, E->y},
|
||||
.device = self.lock(),
|
||||
});
|
||||
}, this, "CTouchDevice");
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ CVirtualPointer::CVirtualPointer(SP<CVirtualPointerV1Resource> resource) : point
|
|||
pointerEvents.motionAbsolute.emit(SMotionAbsoluteEvent{
|
||||
.timeMs = E->time_msec,
|
||||
.absolute = {E->x, E->y},
|
||||
.device = self.lock(),
|
||||
});
|
||||
}, this, "CVirtualPointer");
|
||||
|
||||
|
|
@ -63,6 +64,10 @@ CVirtualPointer::CVirtualPointer(SP<CVirtualPointerV1Resource> resource) : point
|
|||
});
|
||||
}, this, "CVirtualPointer");
|
||||
|
||||
hyprListener_frame.initCallback(&mouse->events.frame, [this] (void* owner, void* data) {
|
||||
pointerEvents.frame.emit();
|
||||
}, this, "CVirtualPointer");
|
||||
|
||||
hyprListener_swipeBegin.initCallback(&mouse->events.swipe_begin, [this] (void* owner, void* data) {
|
||||
auto E = (wlr_pointer_swipe_begin_event*)data;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue