void IN_DrawTime(int x, int y, int h, int m, int s, float r, float g, float b, float a) { char buf[20]; dd_snprintf(buf, 20, "%02d", s); M_DrawTextFragmentShadowed(buf, x, y, ALIGN_TOPRIGHT, 0, r, g, b, a); x -= FR_TextWidth(buf) + FR_Tracking() * 3; M_DrawTextFragmentShadowed(":", x, y, ALIGN_TOPRIGHT, 0, r, g, b, a); x -= FR_CharWidth(':') + 3; if(m || h) { dd_snprintf(buf, 20, "%02d", m); M_DrawTextFragmentShadowed(buf, x, y, ALIGN_TOPRIGHT, 0, r, g, b, a); x -= FR_TextWidth(buf) + FR_Tracking() * 3; } if(h) { dd_snprintf(buf, 20, "%02d", h); M_DrawTextFragmentShadowed(":", x, y, ALIGN_TOPRIGHT, 0, r, g, b, a); x -= FR_CharWidth(':') + FR_Tracking() * 3; M_DrawTextFragmentShadowed(buf, x, y, ALIGN_TOPRIGHT, 0, r, g, b, a); } }
static void drawTime(Vector2i origin, int hours, int minutes, int seconds, Vector4f rgba) { char buf[20]; dd_snprintf(buf, 20, "%02d", seconds); M_DrawTextFragmentShadowed(buf, origin.x, origin.y, ALIGN_TOPRIGHT, 0, rgba.x, rgba.y, rgba.z, rgba.w); origin.x -= FR_TextWidth(buf) + FR_Tracking() * 3; M_DrawTextFragmentShadowed(":", origin.x, origin.y, ALIGN_TOPRIGHT, 0, rgba.x, rgba.y, rgba.z, rgba.w); origin.x -= FR_CharWidth(':') + 3; if(minutes || hours) { dd_snprintf(buf, 20, "%02d", minutes); M_DrawTextFragmentShadowed(buf, origin.x, origin.y, ALIGN_TOPRIGHT, 0, rgba.x, rgba.y, rgba.z, rgba.w); origin.x -= FR_TextWidth(buf) + FR_Tracking() * 3; } if(hours) { dd_snprintf(buf, 20, "%02d", hours); M_DrawTextFragmentShadowed(":", origin.x, origin.y, ALIGN_TOPRIGHT, 0, rgba.x, rgba.y, rgba.z, rgba.w); origin.x -= FR_CharWidth(':') + FR_Tracking() * 3; M_DrawTextFragmentShadowed(buf, origin.x, origin.y, ALIGN_TOPRIGHT, 0, rgba.x, rgba.y, rgba.z, rgba.w); } }
int FR_TextWidth(const char* string) { int w, maxWidth = -1; boolean skipping = false, escaped = false; const char* ch; size_t i, len; errorIfNotInited("FR_TextWidth"); if(!string || !string[0]) return 0; /// @todo All visual format parsing should be done in one place. w = 0; len = strlen(string); ch = string; for(i = 0; i < len; ++i, ch++) { unsigned char c = *ch; if(c == FR_FORMAT_ESCAPE_CHAR) { escaped = true; continue; } if(!escaped && c == '{') { skipping = true; } else if(skipping && c == '}') { skipping = false; continue; } if(skipping) continue; escaped = false; if(c == '\n') { if(w > maxWidth) maxWidth = w; w = 0; continue; } w += FR_CharWidth(c); if(i != len - 1) { w += FR_Tracking(); } else if(maxWidth == -1) { maxWidth = w; } } return maxWidth; }