mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:28:12 +00:00

Instead of cowboy-calling the VESA BIOS in the bootloader, find the emulator VGA adapter by scanning the PCI bus. Then set up the desired video mode by sending device commands.
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <SharedGraphics/Rect.h>
|
|
#include <SharedGraphics/Size.h>
|
|
#include <SharedGraphics/Color.h>
|
|
#include <Kernel/Keyboard.h>
|
|
|
|
class WSScreen {
|
|
public:
|
|
WSScreen(RGBA32*, unsigned width, unsigned height);
|
|
~WSScreen();
|
|
|
|
void set_resolution(int width, int height);
|
|
|
|
int width() const { return m_width; }
|
|
int height() const { return m_height; }
|
|
RGBA32* scanline(int y);
|
|
|
|
static WSScreen& 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);
|
|
void on_receive_keyboard_data(Keyboard::Event);
|
|
|
|
protected:
|
|
WSScreen(unsigned width, unsigned height);
|
|
|
|
private:
|
|
RGBA32* m_framebuffer { nullptr };
|
|
|
|
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 };
|
|
};
|
|
|
|
inline RGBA32* WSScreen::scanline(int y)
|
|
{
|
|
size_t pitch = sizeof(RGBA32) * width();
|
|
return reinterpret_cast<RGBA32*>(((byte*)m_framebuffer) + (y * pitch));
|
|
}
|