#include "BasicRenderer.h"

BasicRenderer::BasicRenderer(Framebuffer* framebuffer, PSF1_FONT* psf1_Font) {
	targetFramebuffer = framebuffer;
	PSF1_Font = psf1_Font;
	cursorPosition = {0,0};
}

void BasicRenderer::PutChar(unsigned int colour, char chr, unsigned int xOff, unsigned int yOff) {
	unsigned int* pixPtr = (unsigned int*)targetFramebuffer->BaseAddress;
	char* fontPtr = (char*)PSF1_Font->glyphBuffer + (chr * PSF1_Font->psf1_Header->charsize);
	for (unsigned long y = yOff; y < yOff + 18; y++) {
		for (unsigned long x = xOff; x < xOff+8; x++) {
			
			if ((*fontPtr & (0b10000000 >> (x - xOff))) > 0) {
				*(unsigned int*)(pixPtr + x + (y * targetFramebuffer->PixelsPerScanline)) = colour;
			}

		}

		fontPtr++;
	}
}

void BasicRenderer::Print(unsigned int colour, const char* str) {
	unsigned int x = 0;
	char* chr = (char*)str;

	while (*chr != 0) {
		PutChar(colour, *chr, cursorPosition.x, cursorPosition.y);
		cursorPosition.x+=8;

		if (cursorPosition.x + 8 > targetFramebuffer->Width) {
			cursorPosition.x = 0;
			cursorPosition.y += 18;
		}

		chr++;
	}
}