SHARE
TWEET

Skitchin

a guest Dec 23rd, 2009 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // FontPrint.h
  2. #pragma once
  3. #include "SDL.h"
  4. #include "gfx_skitchin.h"
  5. #include "gfx_sdl.h"
  6.  
  7. void create_asciitable( ); // font init function called before using drawmessage
  8. int drawmessage( CAbstractDrawingInterface* dDevice, CAbstractDrawable* fontBuffer, SRect rectDest, char *l_cMessage );
  9.  
  10. extern SDL_Surface* g_surfFont;
  11. extern char fonttable[];
  12. extern char g_asciitable[];
  13.  
  14.  
  15. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  16.  
  17. // FontPrint.cpp
  18. #include "stdafx.h"
  19. #include "FontPrint.h"
  20.  
  21. char fonttable[] = " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
  22. char g_asciitable[256];
  23.  
  24. void create_asciitable() //Drakonite 4-18-08
  25. {
  26.         memset(&g_asciitable,0,256*sizeof(char));
  27.         for(int i=0;i<256;++i)
  28.         {
  29.                 if(fonttable[i]=='\0')
  30.                         break;
  31.                        
  32.                 g_asciitable[int(fonttable[i])]=i;
  33.         }
  34. }
  35.  
  36. int drawmessage( CAbstractDrawingInterface* dDevice, CAbstractDrawable* fontBuffer, SRect rectDest, char *l_cMessage )
  37. {  
  38.      int glyphWidth = 8;
  39.      int glyphHeight = 8;
  40.      int spaceWidth = 8;
  41.      int tabSize = glyphWidth * 5;
  42.      SRect fontBufferDest = { 0, 0, glyphWidth, glyphHeight };
  43.          fontBuffer->SetW( glyphWidth );
  44.          fontBuffer->SetH( glyphHeight );
  45.          fontBuffer->SetX( rectDest.x );
  46.          fontBuffer->SetY( rectDest.y );
  47.      
  48.      int lookup;
  49.      int position;
  50.      int failed = (int)strlen(l_cMessage);
  51.      
  52.      for( position = 0; position <= (int)strlen(l_cMessage); position++ )
  53.      {
  54.           if ( l_cMessage[position] == '\n' ) { fontBuffer->SetY( fontBuffer->GetY( ) + glyphHeight ); fontBuffer->SetX( rectDest.x ); }
  55.           else
  56.               if ( l_cMessage[position] == '\t' ) { fontBuffer->SetX( fontBuffer->GetX( ) + tabSize ); }
  57.           else
  58.           {
  59.               lookup = g_asciitable[int(l_cMessage[position])];
  60.              
  61.               switch( lookup )
  62.               {                    
  63.                       case 0x00:
  64.                            if( fontBuffer->GetX() != rectDest.x ) fontBuffer->SetX( fontBuffer->GetX( ) + spaceWidth );
  65.                       break;
  66.                      
  67.                       default:
  68.                            fontBuffer->SetU( ( lookup ) * glyphWidth );
  69.                                                    dDevice->blit( fontBuffer );
  70.                            fontBuffer->SetX( fontBuffer->GetX( ) + glyphWidth );
  71.               }
  72.              
  73.               if( ( (int)rectDest.w - fontBuffer->GetX( ) ) <= glyphWidth )
  74.               {
  75.                   fontBuffer->SetY( fontBuffer->GetY( ) + glyphHeight );
  76.                   fontBuffer->SetX( rectDest.x );
  77.                
  78.                   if( ( fontBuffer->GetY( ) + glyphHeight ) >= (int)rectDest.w + 1 )
  79.                                   {
  80.                       return failed;
  81.                                   }
  82.               }
  83.           }
  84.      }
  85.      
  86.      return failed; //0> = Failure, 0< = Undrawable characters, 0 = All complete
  87. }
RAW Paste Data
Top