SDL_FreeSurface(conv);
}
+Text::~Text()
+{
+ delete chars;
+ delete shadow_chars;
+}
+
void
Text::draw(const char* text, int x, int y, int shadowsize, int update)
{
{
for( i = 0, j = 0; i < len; ++i,++j)
{
- if( text[i] >= 'A' && text[i] <= 'Z')
- pchars->draw_part((int)(text[i] - 'A')*w, 0, x+(j*w), y, w, h, 255, update);
- else if( text[i] >= 'a' && text[i] <= 'z')
- pchars->draw_part((int)(text[i] - 'a')*w, h, x+(j*w), y, w, h, 255, update);
- else if ( text[i] >= '!' && text[i] <= '9')
- pchars->draw_part((int)(text[i] - '!')*w, h*2, x+(j*w), y, w, h, 255, update);
- else if ( text[i] == '?')
- pchars->draw_part(25*w, h*2, x+(j*w), y, w, h, 255, update);
+ if( text[i] >= ' ' && text[i] <= '/')
+ pchars->draw_part((int)(text[i] - ' ')*w, 0 , x+(j*w), y, w, h, 255, update);
+ else if( text[i] >= '0' && text[i] <= '?')
+ pchars->draw_part((int)(text[i] - '0')*w, h*1, x+(j*w), y, w, h, 255, update);
+ else if ( text[i] >= '@' && text[i] <= 'O')
+ pchars->draw_part((int)(text[i] - '@')*w, h*2, x+(j*w), y, w, h, 255, update);
+ else if ( text[i] >= 'P' && text[i] <= '_')
+ pchars->draw_part((int)(text[i] - 'P')*w, h*3, x+(j*w), y, w, h, 255, update);
+ else if ( text[i] >= '`' && text[i] <= 'o')
+ pchars->draw_part((int)(text[i] - '`')*w, h*4, x+(j*w), y, w, h, 255, update);
+ else if ( text[i] >= 'p' && text[i] <= '~')
+ pchars->draw_part((int)(text[i] - 'p')*w, h*5, x+(j*w), y, w, h, 255, update);
else if ( text[i] == '\n')
{
y += h + 2;
}
}
-Text::~Text()
-{
- if(kind == TEXT_TEXT)
- delete chars;
- else if(kind == TEXT_NUM)
- delete chars;
-}
-
/* --- ERASE TEXT: --- */
void
/* --- SCROLL TEXT FUNCTION --- */
-#define MAX_VEL 10
-#define SPEED 1
-#define SCROLL 60
+#define MAX_VEL 10
+#define SPEED_INC 0.01
+#define SCROLL 60
#define ITEMS_SPACE 4
-void display_text_file(const std::string& file, const std::string& surface)
+void display_text_file(const std::string& file, const std::string& surface, float scroll_speed)
{
Surface* sur = new Surface(datadir + surface, IGNORE_ALPHA);
- display_text_file(file, sur);
+ display_text_file(file, sur, scroll_speed);
delete sur;
}
-void display_text_file(const std::string& file, Surface* surface)
+void display_text_file(const std::string& file, Surface* surface, float scroll_speed)
{
int done;
- int scroll, speed;
+ float scroll;
+ float speed;
int y;
int length;
FILE* fi;
scroll = 0;
- speed = 2;
+ speed = scroll_speed / 50;
done = 0;
length = names.num_items;
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
+ Uint32 lastticks = SDL_GetTicks();
while(done == 0)
{
/* in case of input, exit */
switch(event.key.keysym.sym)
{
case SDLK_UP:
- speed -= SPEED;
+ speed -= SPEED_INC;
break;
case SDLK_DOWN:
- speed += SPEED;
+ speed += SPEED_INC;
break;
case SDLK_SPACE:
case SDLK_RETURN:
switch(names.item[i][0])
{
case ' ':
- white_small_text->drawf(names.item[i]+1, 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 1);
+ white_small_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 1);
y += white_small_text->h+ITEMS_SPACE;
break;
case ' ':
- white_text->drawf(names.item[i]+1, 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 1);
+ white_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 1);
y += white_text->h+ITEMS_SPACE;
break;
case '-':
- white_big_text->drawf(names.item[i]+1, 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 3);
+ white_big_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 3);
y += white_big_text->h+ITEMS_SPACE;
break;
default:
- blue_text->drawf(names.item[i], 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 1);
+ blue_text->drawf(names.item[i], 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 1);
y += blue_text->h+ITEMS_SPACE;
break;
}
flipscreen();
- if(60+screen->h+y-scroll < 0 && 20+60+screen->h+y-scroll < 0)
+ if(screen->h+y-scroll < 0 && 20+screen->h+y-scroll < 0)
done = 1;
- scroll += speed;
+ Uint32 ticks = SDL_GetTicks();
+ scroll += speed * (ticks - lastticks);
+ lastticks = ticks;
if(scroll < 0)
scroll = 0;
- SDL_Delay(35);
+ SDL_Delay(10);
}
string_list_free(&names);