void TextFade::draw_text(clan::Canvas &canvas, clan::Font &font, int ypos, const char *text) { // For this example, to keep things simple, we only handle ASCII characters int gc_width = canvas.get_width(); clan::Size text_size = clan::Size(font.measure_text(canvas, text).bbox_size); int xpos = (gc_width - text_size.width) / 2; while(*text) { char let = *(text++); char buffer[2]; buffer[0] = let; buffer[1] = 0; int position_off_centre = (gc_width/2) - xpos; if (position_off_centre < 0) position_off_centre = -position_off_centre; float alpha = 1.0f - ( (float) position_off_centre * 2.0f / gc_width ); if (alpha > 0.0f) font.draw_text(canvas, xpos, ypos, buffer, clan::Colorf(0.4f, 0.4f, 1.0f, alpha)); xpos += font.get_metrics(canvas, let).bbox_size.width; } }