AppSrc/glfont2.cpp
author jkauppin
Fri, 15 Oct 2010 10:18:29 +0900
changeset 3 93fff7023be8
permissions -rw-r--r--
Initial version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     1
//*******************************************************************
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     2
// glfont2.cpp -- glFont Version 2.0 implementation
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     3
// Copyright (c) 1998-2002 Brad Fish
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     4
// See glfont.html for terms of use
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     5
// May 14, 2002
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     6
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     7
// Symbian OS port - June 2007
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     8
// Luis Valente - lpvalente@gmail.com
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     9
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    10
//*******************************************************************
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    11
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    12
/*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    13
This font class is intended to render 2D text. So, it is important to set up the 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    14
required orthographic projection before rendering. The following code is an 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    15
example of how to do this: 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    16
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    17
// Rect() is a method that returns the current drawing rectangle.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    18
// The (0,0) point will be the on bottom-left corner.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
glViewport (0, 0, Rect().Width(), Rect().Height());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
glMatrixMode (GL_PROJECTION);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
  glLoadIdentity ();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
  glOrthox (0, IntToFixed (Rect().Width()), 0, IntToFixed (Rect().Height()), -1, 1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
 glMatrixMode (GL_MODELVIEW);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
   glLoadIdentity ();Also, the BeginDraw() and EndDraw() methods (or equivalent code) should be called 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
   to set up required states for rendering. For example, if alpha blending is not enabled, the quad 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
   corresponding to the character becomes noticeable. 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
Currently, this class supports 8 bit descriptors only. The class should be extended to support 16 bits 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
descriptors and resource strings. 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
// Symbian OS headers
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
#include <s32file.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
#include <eikenv.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
#include <eikappui.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
#include <eikapp.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
#include "glfont2.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
#include "FixedMath.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
// GLFontChar structure as stored in file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
struct GLFontCharFile
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
   TReal32 dx, dy;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
   TReal32 tx1, ty1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
   TReal32 tx2, ty2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
};
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
// GLFontHeaderFile structure as stored in file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
struct GLFontHeaderFile
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
   TInt32  tex;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
   TInt32  texWidth, texHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
   TInt32  startChar, endChar;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
   TUint32 chars;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
};
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
// Default constructor.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
GLFont::GLFont ()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
   // Initialize iHeader to safe state
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
   iHeader.tex = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
   iHeader.texWidth = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
   iHeader.texHeight = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
   iHeader.startChar = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
   iHeader.endChar = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
   iHeader.chars = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
   // OpenGL texture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
   glGenTextures (1, &iHeader.tex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
// Destructor.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
GLFont::~GLFont ()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
   // Destroy the font
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
   Destroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
   // delete texture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
   glDeleteTextures (1, &iHeader.tex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
// Factory-method.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
GLFont * GLFont::NewL (const TDesC & aFilename)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
   GLFont* f = new (ELeave) GLFont();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   105
   CleanupStack::PushL (f);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   106
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   107
   f->ConstructL (aFilename);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
   CleanupStack::Pop ();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
   return f;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
// Second part of the two-phase construction.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
void GLFont::ConstructL (const TDesC & aFilename)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
   // Destroy the old font if there was one, just to be safe
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
   Destroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
   // Open file session with server	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
   RFs session;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
   User::LeaveIfError (session.Connect());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
   CleanupClosePushL (session);	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
   // retrieve private application folder
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
   TFileName path;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
   session.PrivatePath (path);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
   // retrieve full application path on device
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
   #ifndef __WINS__
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
      TFileName appFullName =          
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
      CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
      TParse parse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
      parse.Set (appFullName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
      path.Insert (0, parse.Drive());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
   #endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
   // update filename with full path
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
   TFileName fullFilename (path);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
   fullFilename.Append (aFilename);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
   // load file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
   LoadFileL (session, fullFilename);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
   // close server session
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
   CleanupStack::PopAndDestroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
// Loads the font file.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
void GLFont::LoadFileL (RFs & aFs, const TDesC & aFilename)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
   // Open input file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
   RFileReadStream readStream;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
   User::LeaveIfError (readStream.Open (aFs, aFilename, EFileRead));	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
   readStream.PushL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
   // Read the iHeader from file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
   GLFontHeaderFile headerFile;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
   headerFile.tex       = readStream.ReadInt32L ();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
   headerFile.texWidth  = readStream.ReadInt32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
   headerFile.texHeight = readStream.ReadInt32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
   headerFile.startChar = readStream.ReadInt32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
   headerFile.endChar   = readStream.ReadInt32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
   headerFile.chars     = readStream.ReadUint32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
   // copy iHeader file to actual iHeader		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
   iHeader.texWidth  = headerFile.texWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
   iHeader.texHeight = headerFile.texHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
   iHeader.startChar = headerFile.startChar;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
   iHeader.endChar   = headerFile.endChar;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
   // Allocate space for character array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
   TInt numChars = iHeader.endChar - iHeader.startChar + 1;	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
   iHeader.chars = new (ELeave) GLFontChar [numChars];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
   // Read character array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
   for (TInt i = 0; i < numChars; ++i)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
      iHeader.chars [i].dx  =  FloatToFixed (readStream.ReadReal32L () );		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
      iHeader.chars [i].dy  =  FloatToFixed (readStream.ReadReal32L () );		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
      iHeader.chars [i].tx1 =  FloatToFixed (readStream.ReadReal32L () );		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
      iHeader.chars [i].ty1 =  FloatToFixed (readStream.ReadReal32L () );		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
      iHeader.chars [i].tx2 =  FloatToFixed (readStream.ReadReal32L () );		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
      iHeader.chars [i].ty2 =  FloatToFixed (readStream.ReadReal32L () );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
   }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
   // Read texture pixel data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
   TInt numTexBytes = iHeader.texWidth * iHeader.texHeight * 2;	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
   TUint8 * texBytes = new (ELeave) TUint8 [numTexBytes]; CleanupStack::PushL (texBytes);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
   readStream.ReadL (texBytes, numTexBytes);	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
   // Create OpenGL texture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   206
   glBindTexture   (GL_TEXTURE_2D, iHeader.tex);  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   207
   glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   208
   glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   209
   glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   210
   glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   211
   glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   212
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   213
   glTexImage2D (GL_TEXTURE_2D,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   214
                 0,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   215
                 GL_LUMINANCE_ALPHA,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   216
                 iHeader.texWidth,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   217
                 iHeader.texHeight,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   218
                 0,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   219
                 GL_LUMINANCE_ALPHA,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   220
                 GL_UNSIGNED_BYTE,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   221
                 (GLvoid *)texBytes);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   222
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   223
   // Free texture pixels memory
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   224
   CleanupStack::Pop ();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   225
   delete [] texBytes;	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   226
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   227
   // Close input file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   228
   readStream.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   229
   readStream.Pop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   230
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   231
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   232
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   233
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   234
// Font destruction.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   235
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   236
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   237
void GLFont::Destroy ()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   238
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   239
   //Delete the character array if necessary
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   240
   if (iHeader.chars)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   241
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   242
      delete [] iHeader.chars;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   243
      iHeader.chars = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   244
   }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   245
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   246
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   247
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   248
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   249
// Retrieves the texture dimensions.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   250
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   251
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   252
void GLFont::GetTexSize (TInt & aWidth, TInt & aHeight)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   253
{	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   254
   aWidth  = iHeader.texWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   255
   aHeight = iHeader.texHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   256
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   257
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   258
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   259
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   260
// Retrieves the character interval.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   261
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   262
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   263
void GLFont::GetCharInterval (TInt & aStart, TInt & aEnd)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   264
{	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   265
   aStart = iHeader.startChar;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   266
   aEnd   = iHeader.endChar;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   267
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   268
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   269
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   270
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   271
// Retrieves the dimensions of a character.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   272
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   273
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   274
void GLFont::GetCharSize (TText8 aChar, TInt & aWidth, TInt aHeight)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   275
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   276
   // Make sure character is in range
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   277
   if (aChar < iHeader.startChar || aChar > iHeader.endChar)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   278
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   279
      // Not a valid character, so it obviously has no size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   280
      aWidth  = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   281
      aHeight = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   282
   }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   283
   else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   284
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   285
      GLFontChar* fontChar;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   286
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   287
      // Retrieve character size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   288
      fontChar = & iHeader.chars [aChar - iHeader.startChar];		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   289
      aWidth  = FixedToInt (MultiplyFixed (fontChar->dx, IntToFixed (iHeader.texWidth) ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   290
      aHeight = FixedToInt (MultiplyFixed (fontChar->dy, IntToFixed (iHeader.texHeight) ) );		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   291
   }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   292
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   293
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   294
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   295
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   296
// Retrieves the dimensions of a string.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   297
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   298
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   299
void GLFont::GetStringSize (const TDesC8 & aText, TInt & aWidth, TInt & aHeight)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   300
{	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   301
   // Height is the same for now...might change in future
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   302
   aHeight = FixedToInt (MultiplyFixed (iHeader.chars [iHeader.startChar].dy, IntToFixed (iHeader.texHeight) ) ); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   303
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   304
   // texWidth as fixed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   305
   const GLfixed texWidthx = IntToFixed (iHeader.texWidth);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   306
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   307
   // Calculate width of string	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   308
   GLfixed widthx = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   309
   for (TInt i = 0; i < aText.Length(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   310
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   311
      // Make sure character is in range
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   312
      const TText8 c = aText [i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   313
      if (c < iHeader.startChar || c > iHeader.endChar)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   314
         continue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   315
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   316
      // Get pointer to glFont character
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   317
      const GLFontChar* fontChar = & iHeader.chars [c - iHeader.startChar];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   318
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   319
      // Get width and height
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   320
      widthx += MultiplyFixed (fontChar->dx, texWidthx);		
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   321
   }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   322
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   323
   // Save width
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   324
   aWidth = FixedToInt (widthx);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   325
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   326
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   327
//_____________________________________________________________________________
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   328
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   329
// Renders a string. Reference point is top-left.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   330
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   331
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   332
void GLFont::DrawString (const TDesC8 & aText, GLfixed aX, GLfixed aY)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   333
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   334
   // vertex arrays to render the string
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   335
   GLfixed  vertices [4*2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   336
   GLfixed texCoords [4*2];	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   337
   const GLubyte indices [] = {1, 2, 0, 3};
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   338
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   339
   glVertexPointer  (2, GL_FIXED, 0, vertices);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   340
   glTexCoordPointer (2, GL_FIXED, 0, texCoords); 	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   341
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   342
   // Bind texture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   343
   glBindTexture (GL_TEXTURE_2D, iHeader.tex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   344
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   345
   // Loop through characters
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   346
   for (TInt i = 0; i < aText.Length(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   347
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   348
      // Make sure character is in range
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   349
      TText8 c = aText [i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   350
      if (c < iHeader.startChar || c > iHeader.endChar)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   351
         continue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   352
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   353
      // Get pointer to glFont character
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   354
      GLFontChar* fontChar = &iHeader.chars [c - iHeader.startChar];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   355
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   356
      // Get width and height
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   357
      GLfixed width =  MultiplyFixed (fontChar->dx, IntToFixed (iHeader.texWidth) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   358
      GLfixed height = MultiplyFixed (fontChar->dy, IntToFixed (iHeader.texHeight) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   359
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   360
      // Specify texture coordinates
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   361
      texCoords [0] = fontChar->tx1; texCoords [1] = fontChar->ty1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   362
      texCoords [2] = fontChar->tx1; texCoords [3] = fontChar->ty2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   363
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   364
      texCoords [4] = fontChar->tx2; texCoords [5] = fontChar->ty2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   365
      texCoords [6] = fontChar->tx2; texCoords [7] = fontChar->ty1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   366
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   367
      // and vertices
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   368
      vertices [0] = aX;         vertices [1] = aY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   369
      vertices [2] = aX;         vertices [3] = aY - height;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   370
   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   371
      vertices [4] = aX + width; vertices [5] = aY - height;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   372
      vertices [6] = aX + width; vertices [7] = aY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   373
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   374
      // draw
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   375
      glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indices);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   376
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   377
      // Move to next character
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   378
      aX += width;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   379
   }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   380
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   381
}