internal void Draw(Camera camera, double startY, double startX, double maxWidth,
int numDeep, ref int itemNum, ref int numDrawn, int startAt, int numToDraw, float distanceBetweenLines)
{
if (itemNum > startAt - 1)
{
float yForThisRender = (float)(startY - distanceBetweenLines * numDrawn);
float xPos = (float)(startX + numDeep * .7);
if (icons.Count != 0 && icons[0].ScaleX > .7f)
{
xPos += icons[0].ScaleX - .7f;
}
float yPos = yForThisRender;
#region draw the icons
foreach (ListBoxIcon icon in icons)
{
if (icon.Texture != null)
{
GuiManager.AddTextureSwitch(icon.Texture);
}
v[0].Position.X = xPos - icon.ScaleX;
v[0].Position.Y = yPos - icon.ScaleY;
v[0].TextureCoordinate.X = icon.Left;
v[0].TextureCoordinate.Y = icon.Bottom;
v[1].Position.X = xPos - icon.ScaleX;
v[1].Position.Y = yPos + icon.ScaleY;
v[1].TextureCoordinate.X = icon.Left;
v[1].TextureCoordinate.Y = icon.Top;
v[2].Position.X = xPos + icon.ScaleX;
v[2].Position.Y = yPos + icon.ScaleY;
v[2].TextureCoordinate.X = icon.Right;
v[2].TextureCoordinate.Y = icon.Top;
v[3] = v[0];
v[4] = v[2];
v[5].Position.X = xPos + icon.ScaleX;
v[5].Position.Y = yPos - icon.ScaleY;
v[5].TextureCoordinate.X = icon.Right;
v[5].TextureCoordinate.Y = icon.Bottom;
GuiManager.WriteVerts(v);
xPos += .1f + 2 * icon.ScaleX;
}
#endregion
if (this.Text != null)
{
string textToUse = this.Text.Replace('\n', ' ');
int numOfChars = TextManager.GetNumberOfCharsIn((float)(maxWidth - numDeep * .7f), textToUse, GuiManager.TextSpacing);
// TODO: need to modify this to handle varying text sizes
TextManager.mScaleForVertexBuffer = GuiManager.TextHeight / 2.0f;
TextManager.mSpacingForVertexBuffer = GuiManager.TextSpacing;
TextManager.mYForVertexBuffer = yForThisRender;
#if FRB_MDX
TextManager.mZForVertexBuffer = (float)camera.Z + 100;
#else
TextManager.mZForVertexBuffer = (float)camera.Z - 100;
#endif
if (Enabled)
{
TextManager.mAlphaForVertexBuffer = 1 * FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue;
}
else
{
TextManager.mAlphaForVertexBuffer = .5f * FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue;
}
TextManager.mAlignmentForVertexBuffer = HorizontalAlignment.Left;
if (mDrawHighlighted)
{
TextManager.mRedForVertexBuffer = TextManager.mGreenForVertexBuffer = TextManager.mBlueForVertexBuffer =
FlatRedBall.Graphics.GraphicalEnumerations.MaxColorComponentValue;
}
else
{
TextManager.mRedForVertexBuffer = TextManager.mGreenForVertexBuffer = TextManager.mBlueForVertexBuffer = 20;
}
#if FRB_MDX
v[0].Position.Z = v[1].Position.Z = v[2].Position.Z = v[3].Position.Z =
v[4].Position.Z = v[5].Position.Z = camera.Z + 100;
#else
v[0].Position.Z = v[1].Position.Z = v[2].Position.Z = v[3].Position.Z =
v[4].Position.Z = v[5].Position.Z = camera.Z - 100;
#endif
TextManager.mXForVertexBuffer = xPos;
if (numOfChars != 0)
{
if (numOfChars == textToUse.Length)
{
TextManager.Draw(ref textToUse);
}
else
{
string asString = textToUse.Substring(0, numOfChars);
TextManager.Draw(ref asString);
}
}
}
numDrawn++;
}
itemNum++;
if (numDrawn > numToDraw - 1)
return;
if (mExpanded)
{
for (int i = 0; i < mItems.Count; i++)
{
mItems[i].Draw(camera, startY, startX, maxWidth, numDeep + 1, ref itemNum, ref numDrawn, startAt, numToDraw, distanceBetweenLines);
if (numDrawn > numToDraw - 1)
return;
}
}
}
#endif