#include "Panel.h"

void TPanel::Init(int aX, int aY, int aW, int aH, int OwnerX, int OwnerY, u32 aColor, TBvStyle aBevelOuter){
	unsigned short Left,Right,Top,Bottom;
	Bound.SetBySize(aX+OwnerX, aY+OwnerY, aW, aH);
	OwnerLeftTop.x 	= OwnerX;
	OwnerLeftTop.y 	= OwnerY;
	BorderWidth = 2;
	Color = aColor;
	BevelOuter = aBevelOuter;
	if(BevelOuter == bvRaised){	
		Left 		= Bound.Left + 1;
		Right 	= Bound.Right - 2;
		Top 		= Bound.Top + 1;
		Bottom 	= Bound.Bottom - 2;
	}else{
		Left 		= Bound.Left + 2;
		Right 	= Bound.Right - 2;
		Top 		= Bound.Top + 2;
		Bottom 	= Bound.Bottom - 2;
	}

	Content.Set(Left,Top,Right,Bottom);
}

void TPanel::DrawSelf(void)
{
	
	/*unsigned int r,g,b, h,l;
	h = Color & 0x00FFFFFF;
	
	r = h / 0x10000;
	g = (h / 256) % 256;
	b = h % 256;
	
	h = r * 3 / 2;	if(h > 255)h=255;		r = h;
	h = g * 3 / 2;	if(h > 255)h=255;		g = h;
	h = b * 3 / 2;	if(h > 255)h=255;		b = h;
	h = (r<<16) + (g<<8) + b;
	l = r * 2 / 3;	r = l;
	l = g * 2 / 3;	g = l;
	l = b * 2 / 3;	b = l;
	l = (r<<16) + (g<<8) + b;
	
	
	//Draw Border
	g = Bound.Right;
	b = Bound.Bottom;

	//Draw Right & Bottom 
	for(r=0; r<BorderWidth; r++){
		//Draw Horiz
		HorizLineRender(Bound.Left+r, Bound.Bottom-r, Bound.Width-r-r, l);
		//Draw Vert
		VertLineRender(Bound.Right-r, Bound.Top+r, Bound.Height-r-r, l);
	}
	//Draw Left & Top
	for(r=0; r<BorderWidth; r++){
		//Draw Horiz
		HorizLineRender(Bound.Left+r, Bound.Top+r, Bound.Width-r-r, h);
		//Draw Vert
		VertLineRender(Bound.Left+r, Bound.Top+r, Bound.Height-r-r, h);
	}*/
	
	if (BevelOuter == bvLowered){
		VertLineRender(Bound.Left,	Bound.Top, 	Bound.Height-1,	0xFF808080);
		HorizLineRender(Bound.Left,	Bound.Top, 	Bound.Width-1,	0xFF808080);
		
		VertLineRender(Bound.Left+1,	Bound.Top+1, 	Bound.Height-2,	0xFF404040);
		HorizLineRender(Bound.Left+1,	Bound.Top+1, 	Bound.Width-2,	0xFF404040);
	
		VertLineRender(Bound.Right-1,	Bound.Top+1, 	Bound.Height-2,	0xFFD4D0C8);
		HorizLineRender(Bound.Left+1,	Bound.Bottom-1, 	Bound.Width-2,	0xFFD4D0C8);

		VertLineRender(Bound.Right,	Bound.Top, 	  Bound.Height,	0xFFFFFFFF);
		HorizLineRender(Bound.Left,	Bound.Bottom, Bound.Width,	0xFFFFFFFF);	
	}else
	if(BevelOuter == bvRaised){
		VertLineRender(Bound.Left,		Bound.Top, 		Bound.Height -1,	0xFFFFFFFF);
		VertLineRender(Bound.Right -1,	Bound.Top +1,	Bound.Height -2,	0xFF808080);
		VertLineRender(Bound.Right,		Bound.Top,		Bound.Height,	0xFF404040);
	
		HorizLineRender(Bound.Left, 		Bound.Top, 		Bound.Width - 1, 	0xFFFFFFFF);
		HorizLineRender(Bound.Left +1, 	Bound.Bottom -1,  Bound.Width - 2, 	0xFF808080);
		HorizLineRender(Bound.Left,		Bound.Bottom,	Bound.Width,	0xFF404040);
	}
	
	//Fill Rect Box
	RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, Color);
}

void TPanel::Show(void)
{
	DrawSelf();
}


