mouse cleans up after itself now
This commit is contained in:
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.
@@ -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) {
|
void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position, uint32_t colour) {
|
||||||
int xMax = 16;
|
int xMax = 16;
|
||||||
int yMax = 19;
|
int yMax = 19;
|
||||||
@@ -72,6 +97,7 @@ void BasicRenderer::DrawOverlayMouseCursor(uint8_t* mouseCursor, Point position,
|
|||||||
int byte = bit / 8;
|
int byte = bit / 8;
|
||||||
|
|
||||||
if (mouseCursor[byte] & (0b10000000 >> (x % 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);
|
PutPixel(position.x + x, position.y + y, colour);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,15 @@ class BasicRenderer {
|
|||||||
Point cursorPosition;
|
Point cursorPosition;
|
||||||
Framebuffer* targetFramebuffer;
|
Framebuffer* targetFramebuffer;
|
||||||
PSF1_FONT* PSF1_Font;
|
PSF1_FONT* PSF1_Font;
|
||||||
|
uint32_t mouseCursorBuffer[16*19];
|
||||||
unsigned int Colour;
|
unsigned int Colour;
|
||||||
unsigned int ClearColour;
|
unsigned int ClearColour;
|
||||||
void Print(const char* str);
|
void Print(const char* str);
|
||||||
void PutChar(char chr, unsigned int xOff, unsigned int yOff);
|
void PutChar(char chr, unsigned int xOff, unsigned int yOff);
|
||||||
void PutChar(char chr);
|
void PutChar(char chr);
|
||||||
void PutPixel(uint32_t x, uint32_t y, uint32_t colour);
|
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 ClearChar();
|
||||||
void Clear();
|
void Clear();
|
||||||
void Next();
|
void Next();
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ uint8_t mousePacket[4];
|
|||||||
bool mousePacketReady = false;
|
bool mousePacketReady = false;
|
||||||
|
|
||||||
Point mousePosition;
|
Point mousePosition;
|
||||||
|
Point mousePositionOld;
|
||||||
|
|
||||||
void HandlePS2Mouse(uint8_t data) {
|
void HandlePS2Mouse(uint8_t data) {
|
||||||
switch (mouseCycle) {
|
switch (mouseCycle) {
|
||||||
@@ -137,7 +138,10 @@ void ProcessMousePacket() {
|
|||||||
if (mousePosition.y < 0) mousePosition.y = 0;
|
if (mousePosition.y < 0) mousePosition.y = 0;
|
||||||
if (mousePosition.y > GlobalRenderer->targetFramebuffer->Height-1) mousePosition.y = GlobalRenderer->targetFramebuffer->Height;
|
if (mousePosition.y > GlobalRenderer->targetFramebuffer->Height-1) mousePosition.y = GlobalRenderer->targetFramebuffer->Height;
|
||||||
|
|
||||||
|
GlobalRenderer->ClearMouseCursor(MousePointer, mousePositionOld);
|
||||||
GlobalRenderer->DrawOverlayMouseCursor(MousePointer, mousePosition, 0xFFFFFFFF);
|
GlobalRenderer->DrawOverlayMouseCursor(MousePointer, mousePosition, 0xFFFFFFFF);
|
||||||
|
|
||||||
|
mousePositionOld = mousePosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitPS2Mouse() {
|
void InitPS2Mouse() {
|
||||||
|
|||||||
Reference in New Issue
Block a user