From c2aeb6714d350df22712b9dc0b32abf7296cb68e Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Fri, 7 Sep 2012 01:24:49 +0200 Subject: menu/static: add infrastructure for simple geometric types --- src/menu/static.cpp | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 src/menu/static.cpp (limited to 'src/menu/static.cpp') diff --git a/src/menu/static.cpp b/src/menu/static.cpp new file mode 100644 index 00000000..8bd61ff1 --- /dev/null +++ b/src/menu/static.cpp @@ -0,0 +1,185 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#include +#include "static.hpp" + +namespace usdx +{ + Static::Static(const RgbColor& stroke) + : stroke(stroke), fill(0,0,0,0), filled(false), stroked(true), + stroke_width(1.0f), vertices(NULL), vertices_count(0) + { + } + + Static::Static(const Static& copy) + : stroke(copy.stroke), fill(copy.fill), filled(copy.filled), + stroked(copy.stroked), stroke_width(1.0f), vertices(NULL), + vertices_count(0) + { + if (copy.vertices != NULL) { + vertices_count = copy.vertices_count; + vertices = new float[copy.vertices_count * 2]; + for (size_t i = 0; i < (copy.vertices_count * 2); i++) { + vertices[i] = copy.vertices[i]; + } + } + } + + Static::~Static() + { + if (vertices != NULL) { + delete[] vertices; + vertices = NULL; + } + } + + Static& Static::operator=(const Static& copy) + { + if (this != ©) { + stroke = copy.stroke; + fill = copy.fill; + filled = copy.filled; + stroked = copy.stroked; + stroke_width = copy.stroke_width; + vertices_count = 0; + + if (vertices != NULL) { + delete[] vertices; + vertices = NULL; + } + + if (copy.vertices != NULL) { + vertices_count = copy.vertices_count; + vertices = new float[copy.vertices_count * 2]; + for (size_t i = 0; i < (copy.vertices_count * 2); i++) { + vertices[i] = copy.vertices[i]; + } + } + } + + return *this; + } + + void Static::draw(void) + { + // shortcut if not initilized or nothing to draw + if ((this->vertices == NULL) + || (!this->get_filled() && !this->get_stroked())) + return; + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer(2, GL_FLOAT, 0, vertices); + + if (this->get_filled()) { + // draw filling + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glColorPointer(fill.get_array_comonent_count(), GL_UNSIGNED_BYTE, + 0, fill.get_array(vertices_count)); + this->draw_fill(); + + glDisable(GL_BLEND); + } + + if (this->get_stroked()) { + // draw border + glColorPointer(stroke.get_array_comonent_count(), GL_UNSIGNED_BYTE, + 0, stroke.get_array(vertices_count)); + glLineWidth(stroke_width); + this->draw_stroke(); + } + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + } + + void Static::register_vertices(const float *vertices, const size_t count) + { + if (this->vertices != NULL) { + delete[] this->vertices; + this->vertices = NULL; + } + + this->vertices_count = count; + this->vertices = new float[this->vertices_count * 2]; + for (size_t i = 0; i < (this->vertices_count * 2); i++) { + this->vertices[i] = vertices[i]; + } + } + + void Static::set_stroke(const RgbColor& stroke) + { + this->stroke = stroke; + } + + RgbColor Static::get_stroke(void) const + { + return stroke; + } + + void Static::set_fill(const RgbaColor& fill) + { + this->fill = fill; + } + + RgbaColor Static::get_fill(void) const + { + return fill; + } + + void Static::set_filled(const bool filled) + { + this->filled = filled; + } + + bool Static::get_filled(void) const + { + return filled; + } + + void Static::set_stroked(const bool stroked) + { + this->stroked = stroked; + } + + bool Static::get_stroked(void) const + { + return stroked; + } + + void Static::set_stroke_width(const float stroke_width) + { + this->stroke_width = stroke_width; + } + + float Static::get_stroke_width(void) const + { + return stroke_width; + } +}; + -- cgit v1.2.3