aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/managers/input/InputManager.hpp
blob: 1cd996586529ed015a472df66e6f5f6c15ea68ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#pragma once

#include "../../defines.hpp"
#include <list>
#include "../../helpers/WLClasses.hpp"
#include "../../Window.hpp"

class CInputManager {
public:

    void            onMouseMoved(wlr_pointer_motion_event*);
    void            onMouseWarp(wlr_pointer_motion_absolute_event*);
    void            onMouseButton(wlr_pointer_button_event*);
    void            onKeyboardKey(wlr_keyboard_key_event*, SKeyboard*);
    void            onKeyboardMod(void*, SKeyboard*);

    void            newKeyboard(wlr_input_device*);
    void            newMouse(wlr_input_device*);
    void            destroyKeyboard(SKeyboard*);
    void            destroyMouse(wlr_input_device*);

    void            constrainMouse(SMouse*, wlr_pointer_constraint_v1*);
    void            recheckConstraint(SMouse*);

    Vector2D        getMouseCoordsInternal();
    void            refocus();

    void            setKeyboardLayout();

    void            updateDragIcon();
    void            updateCapabilities(wlr_input_device*);


    // for dragging floating windows
    CWindow*        currentlyDraggedWindow = nullptr;
    int             dragButton = -1;

    SDrag           m_sDrag;

    std::list<SConstraint>  m_lConstraints;
    std::list<SKeyboard>    m_lKeyboards;
    std::list<SMouse>       m_lMice;

    // tablets
    std::list<STablet>      m_lTablets;
    std::list<STabletTool>  m_lTabletTools;
    std::list<STabletPad>   m_lTabletPads;

    void            newTabletTool(wlr_input_device*);
    void            newTabletPad(wlr_input_device*);
    void            focusTablet(STablet*, wlr_tablet_tool*, bool motion = false);

    SKeyboard*      m_pActiveKeyboard = nullptr;

   private:

    uint32_t        m_uiCapabilities = 0;

    void            mouseMoveUnified(uint32_t, bool refocus = false);

    STabletTool*    ensureTabletToolPresent(wlr_tablet_tool*);

    void            unfocusAllTablets();
};

inline std::unique_ptr<CInputManager> g_pInputManager;