aboutsummaryrefslogtreecommitdiffstats
path: root/src/menu/static.cpp
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2012-09-07 01:24:49 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-01-13 22:40:53 +0100
commitc2aeb6714d350df22712b9dc0b32abf7296cb68e (patch)
tree42869aab6f595ea51ee4904694e0784cf9f2067f /src/menu/static.cpp
parentcfec82d8a0ac4624440ddaf8590756f4d639d7d7 (diff)
downloadusdx-c2aeb6714d350df22712b9dc0b32abf7296cb68e.tar.gz
usdx-c2aeb6714d350df22712b9dc0b32abf7296cb68e.tar.xz
usdx-c2aeb6714d350df22712b9dc0b32abf7296cb68e.zip
menu/static: add infrastructure for simple geometric types
Diffstat (limited to 'src/menu/static.cpp')
-rw-r--r--src/menu/static.cpp185
1 files changed, 185 insertions, 0 deletions
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 <GL/gl.h>
+#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 != &copy) {
+ 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;
+ }
+};
+