summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpixel <pixel>2003-03-14 02:05:15 +0000
committerpixel <pixel>2003-03-14 02:05:15 +0000
commitff05e0d8437c50e86229a79b99c8f1ae0ffe773f (patch)
tree4b53d22ecd227fb8ba9e0c653106774f9a99a27f /lib
parentc9437871835f2472e40a9051704b4e20f48ed067 (diff)
Creating shapes
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.am3
-rw-r--r--lib/engine.cc17
-rw-r--r--lib/glfont.cc4
-rw-r--r--lib/glshape.cc122
-rw-r--r--lib/gltexture.cc10
-rw-r--r--lib/glwidgets.cc10
6 files changed, 159 insertions, 7 deletions
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 <SDL.h>
+#include <Input.h>
#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 <SDL_opengl.h>
+#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 <SDL.h>
+#include <Input.h>
+#include "glfont.h"
+#include "glwidgets.h"
+
+mogltk::widget::widget() {
+}
+
+mogltk::widget::~widget() {
+}