/// Various data structures for simplifying font handling.
#ifndef TYPES_HPP
#define TYPES_HPP

/// Represents a point in 2D rectangular-coordinate space.
struct vector2_t
{
    float x, y;

    /// Default constructor that sets components to 0.
    vector2_t() : x(0), y(0) {}

    /// Constructs a 2D vector from components.
    vector2_t(float x, float y) : x(x), y(y) {}

    /// Copy constructor.
    vector2_t(const vector2_t& Copy) : x(Copy.x), y(Copy.y) {}

    /// Assignment operator.
    inline vector2_t& operator=(const vector2_t& Copy)
    { x = Copy.x; y = Copy.y; return (*this); }
};

/// A rectangle at a certain point in space.
struct rect_t
{
    rect_t(float x, float y, int w, int h) : x(x), y(y), w(w), h(h) {}
    rect_t() : x(0.f), y(0.f), w(0), h(0) {}

    float x, y;
    int   w, h;
};

/**
 * Represents a 32-bit floating point color (RGBA).
 *  Limited to the range [0, 1].
 **/
struct color4f_t
{
    color4f_t() : r(1), g(1), b(1), a(1) {}
    color4f_t(float r, float g, float b, float a) : 
        r(r), g(g), b(b), a(a) {}
    float r, g, b, a;
};


struct vertex2_t
{
    vector_t  position;   ///< Vertex position
    vector_t  tc;         ///< Vertex texture coordinates
    color4f_t color;      ///< Vertex color
};

#endif // TYPES_HPP