1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:17:44 +00:00

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. :^)
This commit is contained in:
Andreas Kling 2019-01-11 03:52:09 +01:00
parent 31667b47a5
commit e5e295052f
10 changed files with 117 additions and 5 deletions

View file

@ -281,6 +281,24 @@ void WindowManager::recompose()
framebuffer.blit(window->position(), *window->backing());
}
framebuffer.flush();
m_last_drawn_cursor_location = { -1, -1 };
redraw_cursor();
}
void WindowManager::redraw_cursor()
{
auto cursor_location = AbstractScreen::the().cursor_location();
Painter painter(*m_rootWidget);
painter.set_draw_op(Painter::DrawOp::Xor);
auto draw_cross = [&painter] (const Point& p) {
painter.drawLine({ p.x() - 10, p.y() }, { p.x() + 10, p.y() }, Color::Red);
painter.drawLine({ p.x(), p.y() - 10 }, { p.x(), p.y() + 10 }, Color::Red);
};
if (cursor_location != m_last_drawn_cursor_location && m_last_drawn_cursor_location.x() != -1)
draw_cross(m_last_drawn_cursor_location);
draw_cross(cursor_location);
m_last_drawn_cursor_location = cursor_location;
FrameBuffer::the().flush();
}
void WindowManager::event(Event& event)
@ -329,4 +347,3 @@ bool WindowManager::isVisible(Window& window) const
{
return m_windows.contains(&window);
}