void CText::Layout(SInt2 sPosition, SInt2 sAreaSize)
{
	CRectangle	cRect;
	BOOL		bValid;

	mcTextData.Layout();
	CDrawable::Layout(sPosition, sAreaSize);

	bValid = mcTextData.GetBounds(msCaretPos.x, msCaretPos.y, &cRect);

	if (bValid)
	{
		mpcCaret->SetPosition(cRect.miLeft + sPosition.x, cRect.miTop + sPosition.y);
		mpcCaret->SetActualSize(1, cRect.GetHeight());
	}
	else
	{
		mbCaretVisible = FALSE;
	}
}
void CBorder::CalculateUVCoords(SUVCornersFull* apsUVs)
{
	SFloat2		sTopLeft;
	SFloat2		sBottomRight;
	CRectangle	sSubImage;
	int			iTextureWidth;
	int			iTextureHeight;

	if (mpcBorderParameters->GetGraphicsMaterial()->GetNumTextures() > 0)
	{
		//You're not actually done yet, until you handle the tiled version.

		iTextureWidth = GetTexture(0)->GetWidth();
		iTextureHeight = GetTexture(0)->GetHeight();

		//Top
		sSubImage.miTop = 0;
		sSubImage.miLeft = 0;
		sSubImage.SetWidth(iTextureWidth);
		sSubImage.SetHeight(mpcBorderParameters->maiEdgeWidths[0]);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[1].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);

		//Right
		sSubImage.miTop += sSubImage.GetHeight() - 1;  //Don't even ask...
		sSubImage.SetHeight(mpcBorderParameters->maiEdgeWidths[1]);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[3].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);
		apsUVs[3].Rotate(1);

		//Bottom
		sSubImage.miTop += sSubImage.GetHeight();
		sSubImage.SetHeight(mpcBorderParameters->maiEdgeWidths[2]);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[5].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);
		apsUVs[5].Rotate(2);

		//Left
		sSubImage.miTop += sSubImage.GetHeight() + 1;
		sSubImage.SetHeight(mpcBorderParameters->maiEdgeWidths[3]);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[7].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);
		apsUVs[7].Rotate(3);

		//Top Left
		sSubImage.miTop += sSubImage.GetHeight();
		sSubImage.SetHeight(mpcBorderParameters->masCornerSizes[0].y);
		sSubImage.SetWidth(mpcBorderParameters->masCornerSizes[0].x);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[0].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);

		//Top Right
		sSubImage.miTop += sSubImage.GetHeight();
		sSubImage.SetHeight(mpcBorderParameters->masCornerSizes[1].y);
		sSubImage.SetWidth(mpcBorderParameters->masCornerSizes[1].x);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[2].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);

		//Bottom Right
		sSubImage.miTop += sSubImage.GetHeight();
		sSubImage.SetHeight(mpcBorderParameters->masCornerSizes[2].y);
		sSubImage.SetWidth(mpcBorderParameters->masCornerSizes[2].x);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[4].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);

		//Bottom Left
		sSubImage.miTop += sSubImage.GetHeight();
		sSubImage.SetHeight(mpcBorderParameters->masCornerSizes[3].y);
		sSubImage.SetWidth(mpcBorderParameters->masCornerSizes[3].x);
		sTopLeft	 = sSubImage.GetUVCoordinatesTopLeft(iTextureWidth, iTextureHeight);
		sBottomRight = sSubImage.GetUVCoordinatesBottomRight(iTextureWidth, iTextureHeight);
		apsUVs[6].Set(sTopLeft.x, sTopLeft.y, sBottomRight.x, sBottomRight.y);
	}
}