X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FText.cpp;h=0652c87b2d4085820d13aeef395a496f15dfe9a1;hb=1aef858f5ecb3dc8fd816e0155635371ed3632f2;hp=f41fb6b8e369aec0432dabc5417957685e041dbb;hpb=0cca0c495c7dc29d134a10d7eed5de1f377c99bf;p=lugaru.git diff --git a/Source/Text.cpp b/Source/Text.cpp index f41fb6b..0652c87 100644 --- a/Source/Text.cpp +++ b/Source/Text.cpp @@ -1,9 +1,30 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games + +This file is part of Lugaru. + +Lugaru 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; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + /**> HEADER FILES <**/ #include "Text.h" #include "Game.h" extern TGAImageRec texture; -void Text::LoadFontTexture(char *fileName) +void Text::LoadFontTexture(const char *fileName) { GLuint type; @@ -64,30 +85,18 @@ void Text::BuildFont() // Build Our Font Display List // base=glGenLists(256); // Creating 256 Display Lists base=glGenLists(512); // Creating 256 Display Lists glBindTexture(GL_TEXTURE_2D, FontTexture); // Select Our Font Texture - for (loop=0; loop<256; loop++) // Loop Through All 256 Lists - { - cx=float(loop%16)/16.0f; // X Position Of Current Character - cy=float(loop/16)/16.0f; // Y Position Of Current Character - - glNewList(base+loop,GL_COMPILE); // Start Building A List - glBegin(GL_QUADS); // Use A Quad For Each Character - glTexCoord2f(cx,1-cy-0.0625f+.001); // Texture Coord (Bottom Left) - glVertex2i(0,0); // Vertex Coord (Bottom Left) - glTexCoord2f(cx+0.0625f,1-cy-0.0625f+.001); // Texture Coord (Bottom Right) - glVertex2i(16,0); // Vertex Coord (Bottom Right) - glTexCoord2f(cx+0.0625f,1-cy-.001); // Texture Coord (Top Right) - glVertex2i(16,16); // Vertex Coord (Top Right) - glTexCoord2f(cx,1-cy-+.001); // Texture Coord (Top Left) - glVertex2i(0,16); // Vertex Coord (Top Left) - glEnd(); // Done Building Our Quad (Character) - glTranslated(10,0,0); // Move To The Right Of The Character - glEndList(); // Done Building The Display List - } // Loop Until All 256 Are Built - for (loop=256; loop<512; loop++) // Loop Through All 256 Lists + for (loop=0; loop<512; loop++) // Loop Through All 256 Lists { - cx=float((loop-256)%16)/16.0f; // X Position Of Current Character - cy=float((loop-256)/16)/16.0f; // Y Position Of Current Character - + if (loop < 256) + { + cx=float(loop%16)/16.0f; // X Position Of Current Character + cy=float(loop/16)/16.0f; // Y Position Of Current Character + } + else + { + cx=float((loop-256)%16)/16.0f; // X Position Of Current Character + cy=float((loop-256)/16)/16.0f; // Y Position Of Current Character + } glNewList(base+loop,GL_COMPILE); // Start Building A List glBegin(GL_QUADS); // Use A Quad For Each Character glTexCoord2f(cx,1-cy-0.0625f+.001); // Texture Coord (Bottom Left) @@ -99,43 +108,20 @@ void Text::BuildFont() // Build Our Font Display List glTexCoord2f(cx,1-cy-+.001); // Texture Coord (Top Left) glVertex2i(0,16); // Vertex Coord (Top Left) glEnd(); // Done Building Our Quad (Character) - glTranslated(8,0,0); // Move To The Right Of The Character + if (loop < 256) + glTranslated(10,0,0); // Move To The Right Of The Character + else + glTranslated(8,0,0); // Move To The Right Of The Character glEndList(); // Done Building The Display List } // Loop Until All 256 Are Built } -void Text::glPrint(float x, float y, char *string, int set, float size, float width, float height) // Where The Printing Happens +void Text::glPrint(float x, float y, const char *string, int set, float size, float width, float height) // Where The Printing Happens { - if (set>1) - { - set=1; - } - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - glBindTexture(GL_TEXTURE_2D, FontTexture); // Select Our Font Texture - glDisable(GL_DEPTH_TEST); // Disables Depth Testing - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glMatrixMode(GL_PROJECTION); // Select The Projection Matrix - glPushMatrix(); // Store The Projection Matrix - glLoadIdentity(); // Reset The Projection Matrix - glOrtho(0,width,0,height,-100,100); // Set Up An Ortho Screen - glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - glPushMatrix(); // Store The Modelview Matrix - glLoadIdentity(); - glTranslated(x,y,0); // Position The Text (0,0 - Bottom Left) - glScalef(size,size,1); // Reset The Modelview Matrix - glListBase(base-32+(128*set)); // Choose The Font Set (0 or 1) - glCallLists(strlen(string),GL_BYTE,string); // Write The Text To The Screen - glMatrixMode(GL_PROJECTION); // Select The Projection Matrix - glPopMatrix(); // Restore The Old Projection Matrix - glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - glPopMatrix(); // Restore The Old Projection Matrix - glEnable(GL_DEPTH_TEST); // Enables Depth Testing - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + glPrint(x, y, string, set, size, width, height, 0, strlen(string)); } -void Text::glPrint(float x, float y, char *string, int set, float size, float width, float height,int start,int end) // Where The Printing Happens +void Text::_glPrint(float x, float y, const char *string, int set, float size, float width, float height,int start,int end, int offset) // Where The Printing Happens { if (set>1) { @@ -156,7 +142,7 @@ void Text::glPrint(float x, float y, char *string, int set, float size, float wi glLoadIdentity(); glTranslated(x,y,0); // Position The Text (0,0 - Bottom Left) glScalef(size,size,1); // Reset The Modelview Matrix - glListBase(base-32+(128*set)); // Choose The Font Set (0 or 1) + glListBase(base-32+(128*set) + offset); // Choose The Font Set (0 or 1) glCallLists(end-start,GL_BYTE,&string[start]); // Write The Text To The Screen glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPopMatrix(); // Restore The Old Projection Matrix @@ -166,78 +152,26 @@ void Text::glPrint(float x, float y, char *string, int set, float size, float wi glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); } - -void Text::glPrintOutline(float x, float y, char *string, int set, float size, float width, float height) // Where The Printing Happens +void Text::glPrint(float x, float y, const char *string, int set, float size, float width, float height,int start,int end) // Where The Printing Happens { - if (set>1) - { - set=1; - } - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - glBindTexture(GL_TEXTURE_2D, FontTexture); // Select Our Font Texture - glDisable(GL_DEPTH_TEST); // Disables Depth Testing - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glMatrixMode(GL_PROJECTION); // Select The Projection Matrix - glPushMatrix(); // Store The Projection Matrix - glLoadIdentity(); // Reset The Projection Matrix - glOrtho(0,width,0,height,-100,100); // Set Up An Ortho Screen - glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - glPushMatrix(); // Store The Modelview Matrix - glLoadIdentity(); - glTranslated(x,y,0); // Position The Text (0,0 - Bottom Left) - glScalef(size,size,1); // Reset The Modelview Matrix - glListBase(base-32+(128*set)+256); // Choose The Font Set (0 or 1) - glCallLists(strlen(string),GL_BYTE,string); // Write The Text To The Screen - glMatrixMode(GL_PROJECTION); // Select The Projection Matrix - glPopMatrix(); // Restore The Old Projection Matrix - glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - glPopMatrix(); // Restore The Old Projection Matrix - glEnable(GL_DEPTH_TEST); // Enables Depth Testing - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + _glPrint(x, y, string, set, size, width, height, start, end, 0); } -void Text::glPrintOutline(float x, float y, char *string, int set, float size, float width, float height,int start,int end) // Where The Printing Happens +void Text::glPrintOutline(float x, float y, const char *string, int set, float size, float width, float height) // Where The Printing Happens { - if (set>1) - { - set=1; - } - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - glBindTexture(GL_TEXTURE_2D, FontTexture); // Select Our Font Texture - glDisable(GL_DEPTH_TEST); // Disables Depth Testing - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glMatrixMode(GL_PROJECTION); // Select The Projection Matrix - glPushMatrix(); // Store The Projection Matrix - glLoadIdentity(); // Reset The Projection Matrix - glOrtho(0,width,0,height,-100,100); // Set Up An Ortho Screen - glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - glPushMatrix(); // Store The Modelview Matrix - glLoadIdentity(); - glTranslated(x,y,0); // Position The Text (0,0 - Bottom Left) - glScalef(size,size,1); // Reset The Modelview Matrix - glListBase(base-32+(128*set)+256); // Choose The Font Set (0 or 1) - glCallLists(end-start,GL_BYTE,&string[start]); // Write The Text To The Screen - glMatrixMode(GL_PROJECTION); // Select The Projection Matrix - glPopMatrix(); // Restore The Old Projection Matrix - glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - glPopMatrix(); // Restore The Old Projection Matrix - glEnable(GL_DEPTH_TEST); // Enables Depth Testing - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + glPrintOutline(x, y, string, set, size, width, height, 0, strlen(string)); } -void Text::glPrintOutlined(float x, float y, char *string, int set, float size, float width, float height) // Where The Printing Happens +void Text::glPrintOutline(float x, float y, const char *string, int set, float size, float width, float height,int start,int end) // Where The Printing Happens { - glColor4f(0,0,0,1); - glPrintOutline( x-2*size, y-2*size, string, set, size*2.5/2, width, height); - glColor4f(1,1,1,1); - glPrint( x, y, string, set, size, width, height); + _glPrint(x, y, string, set, size, width, height, start, end, 256); +} +void Text::glPrintOutlined(float x, float y, const char *string, int set, float size, float width, float height) // Where The Printing Happens +{ + glPrintOutlined(1, 1, 1, x, y, string, set, size, width, height); } -void Text::glPrintOutlined(float r, float g, float b, float x, float y, char *string, int set, float size, float width, float height) // Where The Printing Happens +void Text::glPrintOutlined(float r, float g, float b, float x, float y, const char *string, int set, float size, float width, float height) // Where The Printing Happens { glColor4f(0,0,0,1); glPrintOutline( x-2*size, y-2*size, string, set, size*2.5/2, width, height); @@ -257,5 +191,6 @@ Text::~Text() glDeleteLists(base, 512); base = 0; } - if (FontTexture) glDeleteTextures( 1, (const unsigned long *)&FontTexture ); + if (FontTexture) glDeleteTextures( 1, &FontTexture ); } +