ladybird/Widgets/AbstractScreen.h
Andreas Kling fd4e86460b Make PS2MouseDevice behave more like a proper character device.
Get rid of the goofy MouseClient interface and have the GUI event loop just
read mouse data from the character device.

The previous approach was awful as it was sending us into random GUI code
in the mouse interrupt handler.
2019-01-12 05:23:16 +01:00

43 lines
1.1 KiB
C++

#pragma once
#include "Object.h"
#include "Rect.h"
#include "Size.h"
#include "Keyboard.h"
#include "PS2MouseDevice.h"
class AbstractScreen : public Object, public KeyboardClient {
public:
virtual ~AbstractScreen();
int width() const { return m_width; }
int height() const { return m_height; }
static AbstractScreen& the();
Size size() const { return { width(), height() }; }
Rect rect() const { return { 0, 0, width(), height() }; }
static void initialize();
Point cursor_location() const { return m_cursor_location; }
bool left_mouse_button_pressed() const { return m_left_mouse_button_pressed; }
bool right_mouse_button_pressed() const { return m_right_mouse_button_pressed; }
void on_receive_mouse_data(int dx, int dy, bool left_button, bool right_button);
protected:
AbstractScreen(unsigned width, unsigned height);
private:
// ^KeyboardClient
virtual void on_key_pressed(Keyboard::Key) final;
int m_width { 0 };
int m_height { 0 };
Point m_cursor_location;
bool m_left_mouse_button_pressed { false };
bool m_right_mouse_button_pressed { false };
};