mouse cleans up after itself now

This commit is contained in:
2026-01-29 14:34:19 +11:00
parent df3f9478e8
commit 46e806795c
10 changed files with 33 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -57,6 +57,31 @@ void BasicRenderer::PutPixel(uint32_t x, uint32_t y, uint32_t colour) {
}
uint32_t BasicRenderer::GetPixel(uint32_t x, uint32_t y){
return *(uint32_t*)((uint64_t)targetFramebuffer->BaseAddress + (x*4) + (y * targetFramebuffer->PixelsPerScanline * 4));
}
void BasicRenderer::ClearMouseCursor(uint8_t* mouseCursor, Point position) {
int xMax = 16;
int yMax = 19;
int diffX = targetFramebuffer->Width - position.x;
int diffY = targetFramebuffer->Height - position.y;
if (diffX < 16) xMax = diffX;
if (diffY < 19) yMax = diffY;
for (int y = 0; y < yMax; y++) {
for (int x = 0; x < xMax; x++) {
int bit = y * 16 + x;
int byte = bit / 8;
if (mouseCursor[byte] & (0b10000000 >> (x % 8))) {
PutPixel(position.x + x, position.y + y, mouseCursorBuffer[x + y*16]);
}
}
}
}
void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, uint32_t colour) {
int xMax = 16;
int yMax = 19;
@@ -72,6 +97,7 @@ void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position,
int byte = bit / 8;
if (mouseCursor[byte] & (0b10000000 >> (x % 8))) {
mouseCursorBuffer[x + y*16] = GetPixel(position.x + x, position.y + y);
PutPixel(position.x + x, position.y + y, colour);
}
}

View File

@@ -10,12 +10,15 @@ class BasicRenderer {
Point cursorPosition;
Framebuffer* targetFramebuffer;
PSF1_FONT* PSF1_Font;
uint32_t mouseCursorBuffer[16*19];
unsigned int Colour;
unsigned int ClearColour;
void Print(const char* str);
void PutChar(char chr, unsigned int xOff, unsigned int yOff);
void PutChar(char chr);
void PutPixel(uint32_t x, uint32_t y, uint32_t colour);
uint32_t GetPixel(uint32_t x, uint32_t y);
void ClearMouseCursor(uint8_t* mouseCursor, Point position);
void ClearChar();
void Clear();
void Next();

View File

@@ -59,6 +59,7 @@ uint8_t mousePacket[4];
bool mousePacketReady = false;
Point mousePosition;
Point mousePositionOld;
void HandlePS2Mouse(uint8_t data) {
switch (mouseCycle) {
@@ -137,7 +138,10 @@ void ProcessMousePacket() {
if (mousePosition.y < 0) mousePosition.y = 0;
if (mousePosition.y > GlobalRenderer->targetFramebuffer->Height-1) mousePosition.y = GlobalRenderer->targetFramebuffer->Height;
GlobalRenderer->ClearMouseCursor(MousePointer, mousePositionOld);
GlobalRenderer->DrawOverlayMouseCursor(MousePointer, mousePosition, 0xFFFFFFFF);
mousePositionOld = mousePosition;
}
void InitPS2Mouse() {