]> git.jsancho.org Git - lugaru.git/commitdiff
Get rid of dupicated code in the text routines.
authorChristian Ohm <chr.ohm@gmx.net>
Thu, 13 May 2010 18:01:23 +0000 (20:01 +0200)
committerChristian Ohm <chr.ohm@gmx.net>
Thu, 13 May 2010 18:01:23 +0000 (20:01 +0200)
Source/Text.cpp
Source/Text.h

index 1298b38fc8ddaf19792ce227fe3451aacfb168a1..e1c2878b4fc4686c665e9421a4f89422872e6a96 100644 (file)
@@ -85,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
+       for (loop=0; loop<512; 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
-       {
-               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)
@@ -120,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
 {
-       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, char *string, int set, float size, float width, float height,int start,int end, int offset)      // Where The Printing Happens
 {
        if (set>1)
        {
@@ -177,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
@@ -187,75 +152,23 @@ 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::glPrint(float x, float y, char *string, int set, float size, float width, float height,int start,int end)   // Where The Printing Happens
+{
+       _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)      // 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 );
+       glPrintOutline(x, y, string, set, size, width, height, 0, strlen(string));
 }
 
 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
 {
-       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 );
+       _glPrint(x, y, string, set, size, width, height, start, end, 256);
 }
-
 void Text::glPrintOutlined(float x, float y, 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);
-       glColor4f(1,1,1,1);
-       glPrint( x,  y, string,  set,  size,  width,  height);
+       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
index 8627479092ceaf9ad285a3bc6d216bbc3974fb7f..d2502abed9d3e5cc4f8ffd7bc5185af6fa1974fc 100644 (file)
@@ -46,6 +46,9 @@ public:
 
        Text();
        ~Text();
+
+private:
+       void _glPrint(float x, float y, char *string, int set, float size, float width, float height, int start, int end, int offset);
 };
 
 #endif