/***********************************************
 **  Copyright (C) Manas Kamal Choudhury      **
 **                                           **
 ** Frame - A gui windowing frame for xeneva  **
 **                                           **
 **@PROJECT - Xeneva                          **
 **@AUTHOR  - Manas Kamal Choudhury           **
 **@DATE    - 27-08-2019                      **
 ***********************************************
 **/

#include "Frame.h"
#include "virt_mmngr.h"
#include "gui_font.h"
#include "k_heap.h"
#include "video.h"
#include "phys_mmngr.h"

uint32_t *back;

void rect_filled1(int x, int y, int w, int h, uint32_t col, uint32_t *data){
	VideoTerminal terminal = GetTerminal();
	uint32_t* lfb = (uint32_t*)data;
	for(uint32_t k = 0; k < h; k++)
		for(uint32_t j = 0; j < w; j++)
			lfb[(w+x) + (h+y) *terminal.height] = col;
}

void Update(uint32_t *data){
	uint32_t *lfb = (uint32_t*)0x1000000;
	for(int i = 0; i < 1024*720; i++){
        lfb[i] = data[i];
	}
}

void InitializeBackBuffer(){
	VideoTerminal vt = GetTerminal();
		 uintptr_t *e = (uintptr_t*)PmmngrAllocBlock();
	 size_t BytesToMap = vt.BytesPerScanLine * vt.height/4096;
	 for(int i = 0; i <= BytesToMap; i++){
		
	  VmmngrMap((void*)(e + (i*4096)),(void*)(0xF00000000 + (i*4096)));
	 }

	 back = (uint32_t*)0xF00000000;
}

void CreateFrame(int x, int y, int width, int height){
	uint32_t buf = (uint32_t)0xF00000000;
	rect_filled1(x,y,width,height,rgb(223,228,230), (uint32_t*)buf);
	Update((uint32_t*)buf);
	//VideoDrawLine(x,y,x-width,y,rgb(12,22,32));

}