From ff05e0d8437c50e86229a79b99c8f1ae0ffe773f Mon Sep 17 00:00:00 2001 From: pixel Date: Fri, 14 Mar 2003 02:05:15 +0000 Subject: Creating shapes --- lib/Makefile.am | 3 +- lib/engine.cc | 17 +++++++- lib/glfont.cc | 4 ++ lib/glshape.cc | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/gltexture.cc | 10 +++-- lib/glwidgets.cc | 10 +++++ 6 files changed, 159 insertions(+), 7 deletions(-) create mode 100644 lib/glshape.cc create mode 100644 lib/glwidgets.cc (limited to 'lib') diff --git a/lib/Makefile.am b/lib/Makefile.am index 54077cc..269a346 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -5,5 +5,6 @@ LIBS = @SDL_LIBS@ @BALTISOT_LIBS@ INCLUDES = -I.. -I../include -I$(includedir) lib_LTLIBRARIES = libmogltk.la -libmogltk_la_SOURCES = engine.cc glbase.cc glfont.cc gltexture.cc sprite.cc +libmogltk_la_SOURCES = engine.cc glbase.cc glfont.cc gltexture.cc glshape.cc \ +glwidgets.cc sprite.cc diff --git a/lib/engine.cc b/lib/engine.cc index ac813f9..c30b1d9 100644 --- a/lib/engine.cc +++ b/lib/engine.cc @@ -1,6 +1,15 @@ +#include +#include #include "engine.h" +#include "glfont.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef _ #define _(x) x +#endif bool mogltk::engine::inited = false, mogltk::engine::postsetuped = false; bool mogltk::engine::appactive = false, mogltk::engine::cursorvisible = false, mogltk::engine::quitrequest = false; @@ -13,7 +22,7 @@ Uint32 mogltk::engine::curticks; int mogltk::engine::setup() throw(GeneralException) { if (inited) { - printm(M_WARNING, "mogltk::engine::setup() called twice, ignoring second call.\n"); + printm(M_WARNING, _("mogltk::engine::setup() called twice, ignoring second call.\n")); return -1; } if (SDL_Init(0) < 0) { @@ -22,13 +31,15 @@ int mogltk::engine::setup() throw(GeneralException) { atexit(SDL_Quit); inited = true; + + mogltk::SystemFont = new mogltk::font(&Input("font.bin")); return 0; } int mogltk::engine::postsetup() throw(GeneralException) { if (postsetuped) { - printm(M_WARNING, "mogltk::engine::postsetup() called twice, ignoring second call.\n"); + printm(M_WARNING, _("mogltk::engine::postsetup() called twice, ignoring second call.\n")); return -1; } @@ -124,6 +135,8 @@ void mogltk::engine::pollevents() { frames = 0; curticks = ticks; } + } else { + curfps = -1; } while(true) { diff --git a/lib/glfont.cc b/lib/glfont.cc index 383601c..5cb1646 100644 --- a/lib/glfont.cc +++ b/lib/glfont.cc @@ -308,3 +308,7 @@ int mogltk::font::singletextsize(const String & s) const { return r; } + +mogltk::font * mogltk::SystemFont; + + diff --git a/lib/glshape.cc b/lib/glshape.cc new file mode 100644 index 0000000..cad1e36 --- /dev/null +++ b/lib/glshape.cc @@ -0,0 +1,122 @@ +#include +#include "glbase.h" +#include "glshape.h" +#include "gltexture.h" + +#define ENTER bool was2d = in2D(true) +#define ENTERT bool was2d = in2D(false) +#define LEAVE out2D(was2d) + +void mogltk::shape::box(int x1, int y1, int x2, int y2, Color c) { + ENTER; + + c.Bind(); + glBegin(GL_TRIANGLE_STRIP); + glVertex2i(x1, y1); + glVertex2i(x2 + 1, y1); + glVertex2i(x1, y2 + 1); + glVertex2i(x2 + 1, y2 + 1); + glEnd(); + + LEAVE; +} + +void mogltk::shape::box(int x1, int y1, int x2, int y2, Color c1, Color c2, Color c3, Color c4) { + ENTER; + + glBegin(GL_TRIANGLE_STRIP); + c1.Bind(); glVertex2i(x1, y1); + c2.Bind(); glVertex2i(x2 + 1, y1); + c3.Bind(); glVertex2i(x1, y2 + 1); + c4.Bind(); glVertex2i(x2 + 1, y2 + 1); + glEnd(); + + LEAVE; +} + +void mogltk::shape::hline(int x1, int x2, int y, Color c) { + box(x1, y, x2, y, c); +} + +void mogltk::shape::vline(int x, int y1, int y2, Color c) { + box(x, y1, x, y2, c); +} + +void mogltk::shape::hline(int x1, int x2, int y, Color c1, Color c2) { + box(x1, y, x2, y, c1, c2, c1, c2); +} + +void mogltk::shape::vline(int x, int y1, int y2, Color c1, Color c2) { + box(x, y1, x, y2, c1, c1, c2, c2); +} + +void mogltk::shape::obox(int x1, int y1, int x2, int y2, Color c) { + ENTER; + hline(x1, x2, y1, c); + hline(x1, x2, y2, c); + vline(x1, y1, y2, c); + vline(x2, y1, y2, c); + LEAVE; +} + +void mogltk::shape::obox(int x1, int y1, int x2, int y2, Color c1, Color c2, Color c3, Color c4) { + ENTER; + hline(x1, x2, y1, c1, c2); + hline(x1, x2, y2, c3, c4); + vline(x1, y1, y2, c1, c3); + vline(x2, y1, y2, c2, c4); + LEAVE; +} + +void mogltk::shape::tbox(mogltk::texture * t, int x1, int y1, int x2, int y2, int tx, int ty, double f, Color c) { + tbox(t, x1, y1, x2, y2, tx, ty, tx + (x2 - x1) * f, ty + (y2 - y1) * f, c); +} + +void mogltk::shape::tbox(mogltk::texture * t, int x1, int y1, int x2, int y2, Color c1, Color c2, Color c3, Color c4, int tx, int ty, double f) { + tbox(t, x1, y1, x2, y2, c1, c2, c3, c4, tx, ty, tx + (x2 - x1) * f, ty + (y2 - y1) * f); +} + +void mogltk::shape::tbox(mogltk::texture * t, int x1, int y1, int x2, int y2, int tx1, int ty1, int tx2, int ty2, Color c) { + ENTERT; + + c.Bind(); + t->Bind(); + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2i(tx1, ty1); glVertex2i(x1, y1); + glTexCoord2i(tx2 + 1, ty1); glVertex2i(x2 + 1, y1); + glTexCoord2i(tx1, ty2 + 1); glVertex2i(x1, y2 + 1); + glTexCoord2i(tx2 + 1, ty2 + 1); glVertex2i(x2 + 1, y2 + 1); + glEnd(); + + LEAVE; +} + +void mogltk::shape::tbox(mogltk::texture * t, int x1, int y1, int x2, int y2, Color c1, Color c2, Color c3, Color c4, int tx1, int ty1, int tx2, int ty2) { + ENTERT; + + t->Bind(); + glBegin(GL_TRIANGLE_STRIP); + c1.Bind(); glTexCoord2i(tx1, ty1); glVertex2i(x1, y1); + c2.Bind(); glTexCoord2i(tx2 + 1, ty1); glVertex2i(x2 + 1, y1); + c3.Bind(); glTexCoord2i(tx1, ty2 + 1); glVertex2i(x1, y2 + 1); + c4.Bind(); glTexCoord2i(tx2 + 1, ty2 + 1); glVertex2i(x2 + 1, y2 + 1); + glEnd(); + + LEAVE; +} + +bool mogltk::shape::in2D(bool unbind) { + bool was2D = mogltk::glbase::is2D(); + + if (!was2D) + mogltk::glbase::Enter2DMode(); + + if (unbind) mogltk::texture::Unbind(); + + return was2D; +} + +void mogltk::shape::out2D(bool was2D) { + if (!was2D) + mogltk::glbase::Leave2DMode(); +} diff --git a/lib/gltexture.cc b/lib/gltexture.cc index 19fc9bf..9b8f7e3 100644 --- a/lib/gltexture.cc +++ b/lib/gltexture.cc @@ -241,12 +241,14 @@ GLuint mogltk::texture::GetHeight() { } void mogltk::texture::Unbind(void) { - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_TEXTURE_2D); - active = 0; + if (active) { + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); + active = 0; #ifdef DEBUG - printm(M_INFO, _("Unbinding texture.\n")); + printm(M_INFO, _("Unbinding texture.\n")); #endif + } } void mogltk::texture::Taint(void) { diff --git a/lib/glwidgets.cc b/lib/glwidgets.cc new file mode 100644 index 0000000..b381092 --- /dev/null +++ b/lib/glwidgets.cc @@ -0,0 +1,10 @@ +#include +#include +#include "glfont.h" +#include "glwidgets.h" + +mogltk::widget::widget() { +} + +mogltk::widget::~widget() { +} -- cgit v1.2.3