Ejemplo n.º 1
0
void Font::WalkString(char *buffPtr, int xpos, int ypos, int *vPort, int dir)
{
	int x;
	int y = ypos;
	int tabs = 0;
	int xMax = vPort[0] + vPort[2];
	int ret;

	tabs = GetCharHits(buffPtr, '\t');
	
	if (!tabs) tabs = 1;
	else tabs *= fontTabSpace;

	if (dir > 0) x = xpos;
	else x = xpos - ysize * tabs * GetTrueLen(buffPtr);

	for ( ; *buffPtr; ++buffPtr)
	{
		if (x > xMax) break;
  	
		switch (*buffPtr)
		{
			case '\n':
				y -= ysize;
				x = xpos;
				continue;
				break;
        
			case '\t':
				x += (ysize * fontTabSpace);
				continue;
				break;
     
			case TEXT_STYLE_KEYWORD:
				ret = SlashParser(buffPtr, &x, &y);
				buffPtr += ret;
				if (*buffPtr == '\n' || *buffPtr == '\t')
				{
					--buffPtr;
					continue;
				}
				if (ret) continue;
				break;

			case '^':
				ret = HutParser(buffPtr, &x, &y);
				buffPtr += ret;
				if (ret) continue;
				break;
		
			default:
				RenderChar((unsigned char) *buffPtr, x, y, ysize);
				break;
		}
		x += (int)((float)width[(int)(*buffPtr)]*ratio*scale);
	}
}
Ejemplo n.º 2
0
Archivo: text.cpp Proyecto: madsdyd/thx
void text_t::WalkString(char *buffPtr, GLint xpos, GLint ypos, GLint *vPort)
{
   GLint x = xpos;
   GLint y = ypos;
   GLint carrage = 0;
   GLint tabs = 0;
   GLint len = strlen(buffPtr);
   GLint xMax;

   xMax = vPort[0] + vPort[2];

   carrage = GetCharHits(buffPtr, '\n');
   tabs = GetCharHits(buffPtr, '\t');

   if (!tabs)
      tabs = 1;
   else tabs *= fontTabSpace;

   if (region)
   {
      ScissorTextRegion();
      x = regionX;
      y = (regionY + regionH) - size;
   } else ScissorNormal(xpos, ypos, tabs, carrage, size, len);

   /* lets draw! */
   for ( ; *buffPtr; buffPtr++, x += size)
   {
      if (x > xMax)
         break;
   
      if (region)
      {
         if (x + size > (regionX + regionW))
         {
            y -= size;
            x = regionX;
         }
         if (y < regionY)
            break;
      }

      switch (*buffPtr)
      {
         case '\n':
            y -= size;
            if(region)
               x = regionX - size;
            else
               x = xpos - size;
            continue; 
         break;
         
         case '\t':
            x += (size * fontTabSpace);
            continue; 
         break;
      
         case '\\':
         {
            int ret = SlashParser(buffPtr, &x, &y);
            
            buffPtr += ret;

            if (*buffPtr == '\n' || *buffPtr == '\t')
            {
               buffPtr -= 1;
               continue;
            }
      
            if (!ret)
               RenderChar(*buffPtr, x, y, size);
         }
         break;
         default:
            RenderChar(*buffPtr, x, y, size);
         break;
      }
   }
}