/* render/primitives.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_PRIMITIVES_H__ #define __INCLUDED_RENDER_PRIMITIVES_H__ #include "auxiliary/functions.h" #include "math/vector2f.h" #include "render/gl.h" #include "render/text.h" #include "render/textures.h" namespace render { /// drawing primitives for the user interface namespace primitives { /// draw a border inline void border(math::Vector2f const &location, math::Vector2f const &size) { using namespace render::gl; begin(LineLoop); vertex(location.x +1 , location.y); vertex(location.x + size.x, location.y); vertex(location.x + size.x, location.y + size.y -1); vertex(location.x +1, location.y + size.y - 1); end(); } /// draw a rectangle inline void rectangle(math::Vector2f const &location, math::Vector2f const &size) { using namespace render::gl; begin(Quads); vertex(location.x +1 , location.y); vertex(location.x + size.x, location.y); vertex(location.x + size.x, location.y + size.y -1); vertex(location.x +1, location.y + size.y - 1); end(); } /// draw a rectangular bitmap inline void bitmap(math::Vector2f const &location, math::Vector2f const &size, std::string const &texture) { using namespace render::gl; render::Textures::bind("bitmaps/" + texture); gl::enable(GL_TEXTURE_2D); begin(Quads); glTexCoord2f(0.0f, 0.0f); vertex(location.x +1 , location.y); glTexCoord2f(1.0f, 0.0f); vertex(location.x + size.x, location.y); glTexCoord2f(1.0f, 1.0f); vertex(location.x + size.x, location.y + size.y -1); glTexCoord2f(0.0f, 1.0f); vertex(location.x +1, location.y + size.y - 1); end(); gl::disable(GL_TEXTURE_2D); } /// draw one line of centered text inline void text_centered(math::Vector2f const &location, math::Vector2f const &size, std::string const &text) { Text::setfont("gui", 14, 24); gl::enable(GL_TEXTURE_2D); math::Vector2f v(location); v.x += (size.x - aux::text_strip(text).size() * Text::fontwidth()) /2.0f; v.y += (size.y - Text::fontheight()) / 2.0f; Text::draw(v.x, v.y, text); gl::disable(GL_TEXTURE_2D); } } } #endif // __INCLUDED_RENDER_PRIMITIVES_H__