summaryrefslogtreecommitdiff
path: root/Kernel/PS2MouseDevice.h
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-01-11 03:52:09 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-01-11 03:52:09 +0100
commite5e295052faf8ea1e622c8d67c766f8213c71b81 (patch)
tree2935e76bd451c0949fd407b4b13f5f6ef7d2b55c /Kernel/PS2MouseDevice.h
parent31667b47a57c74894d66d7243aae6705898b424c (diff)
downloadserenity-e5e295052faf8ea1e622c8d67c766f8213c71b81.zip
Hook up the PS2MouseDevice to the AbstractScreen+WindowManager.
Render the mouse cursor by xor'ing the pixels. I don't know anything about hardware cursors yet and this way we don't need to recompose the window hierarchy every time you move the mouse. :^)
Diffstat (limited to 'Kernel/PS2MouseDevice.h')
-rw-r--r--Kernel/PS2MouseDevice.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/Kernel/PS2MouseDevice.h b/Kernel/PS2MouseDevice.h
index d7587949d4..9ed7770499 100644
--- a/Kernel/PS2MouseDevice.h
+++ b/Kernel/PS2MouseDevice.h
@@ -3,11 +3,17 @@
#include <VirtualFileSystem/CharacterDevice.h>
#include "IRQHandler.h"
+class MouseClient;
+
class PS2MouseDevice final : public IRQHandler, public CharacterDevice {
public:
PS2MouseDevice();
virtual ~PS2MouseDevice() override;
+ static PS2MouseDevice& the();
+
+ void set_client(MouseClient* client) { m_client = client; }
+
private:
virtual bool has_data_available_for_reading() const override;
virtual ssize_t read(byte* buffer, size_t buffer_size) override;
@@ -23,6 +29,13 @@ private:
void wait_then_write(byte port, byte data);
byte wait_then_read(byte port);
+ MouseClient* m_client { nullptr };
byte m_data_state { 0 };
signed_byte m_data[3];
};
+
+class MouseClient {
+public:
+ virtual ~MouseClient();
+ virtual void did_receive_mouse_data(int dx, int dy, bool left_button, bool right_button) = 0;
+};