#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace OpenTK.Graphics
{
using Graphics = System.Drawing.Graphics;
///
/// Represents a single character of a specific Font.
///
struct Glyph : IPackable
{
char character;
Font font;
SizeF size;
#region --- Constructors ---
///
/// Constructs a new Glyph that represents the given character and Font.
///
/// The character to represent.
/// The Font of the character.
public Glyph(char c, Font f, SizeF s)
{
if (f == null)
throw new ArgumentNullException("f", "You must specify a valid font");
character = c;
font = f;
size = s;
}
#endregion
#region --- Public Methods ---
#region public char Character
///
/// Gets the character represented by this Glyph.
///
public char Character
{
get { return character; }
private set { character = value; }
}
#endregion
#region public Font Font
///
/// Gets the Font of this Glyph.
///
public Font Font
{
get { return font; }
private set
{
if (value == null)
throw new ArgumentNullException("Font", "Glyph font cannot be null");
font = value;
}
}
#endregion
#region public override bool Equals(object obj)
///
/// Checks whether the given object is equal (memberwise) to the current Glyph.
///
/// The obj to check.
/// True, if the object is identical to the current Glyph.
public override bool Equals(object obj)
{
if (obj is Glyph)
return this.Equals((Glyph)obj);
return base.Equals(obj);
}
#endregion
#region public override string ToString()
///
/// Describes this Glyph object.
///
/// Returns a System.String describing this Glyph.
public override string ToString()
{
return String.Format("'{0}', {1} {2}, {3} {4}, ({5}, {6})", Character, Font.Name, font.Style, font.Size, font.Unit, Width, Height);
}
#endregion
#region public override int GetHashCode()
///
/// Calculates the hashcode for this Glyph.
///
/// A System.Int32 containing a hashcode that uniquely identifies this Glyph.
public override int GetHashCode()
{
return character.GetHashCode() ^ font.GetHashCode() ^ size.GetHashCode();
}
#endregion
#region public SizeF Size
///
/// Gets the size of this Glyph.
///
public SizeF Size { get { return size; } }
#endregion
#region public RectangleF Rectangle
///
/// Gets the bounding box of this Glyph.
///
public RectangleF Rectangle { get { return new RectangleF(PointF.Empty, Size); } }
#endregion
#endregion
#region --- IPackable Members ---
///
/// Gets an integer representing the width of the Glyph in pixels.
///
public int Width
{
get
{
return (int)System.Math.Ceiling(size.Width);
}
}
///
/// Gets an integer representing the height of the Glyph in pixels.
///
public int Height
{
get
{
return (int)System.Math.Ceiling(size.Height);
}
}
#endregion
#region --- IEquatable Members ---
///
/// Compares the current Glyph with the given Glyph.
///
/// The Glyph to compare to.
/// True if both Glyphs represent the same character of the same Font, false otherwise.
public bool Equals(Glyph other)
{
return Character == other.Character && Font == other.Font && Size == other.Size;
}
#endregion
}
}