//-----------------------------------------------------------------------------
// CommonGraphics.cs
//
// Microsoft XNA Community Game Platform
// Copyright (C) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace UserInterfaceSample
{
public static class CommonGraphics
{
///
/// Draw a string centered in the given rectangle
///
public static void DrawCenteredText(SpriteBatch batch, SpriteFont font, Rectangle rectangle, string text, Color color)
{
if (!string.IsNullOrEmpty(text))
{
Vector2 size = font.MeasureString(text);
Vector2 topLeft = new Vector2(rectangle.Center.X, rectangle.Center.Y) - size * 0.5f;
batch.DrawString(font, text, topLeft, color);
}
}
///
/// Draw the outline of a rectangle using the given SpriteBatch. The supplied texture should be
/// a single-pixel blank white texture such as ScreenManager.BlankTexture. This function
/// does not call Begin/End on the batch; you need to do that outside of this call.
///
public static void DrawRectangle(SpriteBatch batch, Texture2D blankTexture, Rectangle rectangle, Color color)
{
DrawSpriteLine(batch, blankTexture, new Vector2(rectangle.Left, rectangle.Top), new Vector2(rectangle.Right, rectangle.Top));
DrawSpriteLine(batch, blankTexture, new Vector2(rectangle.Left, rectangle.Bottom), new Vector2(rectangle.Right, rectangle.Bottom));
DrawSpriteLine(batch, blankTexture, new Vector2(rectangle.Left, rectangle.Top), new Vector2(rectangle.Left, rectangle.Bottom));
DrawSpriteLine(batch, blankTexture, new Vector2(rectangle.Right, rectangle.Top), new Vector2(rectangle.Right, rectangle.Bottom));
}
private static void DrawSpriteLine(SpriteBatch batch, Texture2D blankTexture, Vector2 vector1, Vector2 vector2)
{
float distance = Vector2.Distance(vector1, vector2);
float angle = (float)Math.Atan2((vector2.Y - vector1.Y), (vector2.X - vector1.X));
// stretch the pixel between the two vectors
batch.Draw(blankTexture,
vector1,
null,
Color.White,
angle,
Vector2.Zero,
new Vector2(distance, 1),
SpriteEffects.None,
0);
}
}
}