void TXT_DrawString(const char *s) { int x, y; int x1; const char *p; TXT_GetXY(&x, &y); if (VALID_Y(y)) { x1 = x; for (p = s; *p != '\0'; ++p) { if (VALID_X(x1)) { TXT_GotoXY(x1, y); TXT_PutChar(*p); } x1 += 1; } } TXT_GotoXY(x + strlen(s), y); }
static void TXT_SeparatorDrawer(TXT_UNCAST_ARG(separator)) { TXT_CAST_ARG(txt_separator_t, separator); int x, y; int w; w = separator->widget.w; TXT_GetXY(&x, &y); // Draw separator. Go back one character and draw two extra // to overlap the window borders. TXT_DrawSeparator(x-2, y, w + 4); if (separator->label != NULL) { TXT_GotoXY(x, y); TXT_FGColor(TXT_COLOR_BRIGHT_GREEN); TXT_DrawString(" "); TXT_DrawString(separator->label); TXT_DrawString(" "); } }
static void TXT_LabelDrawer(TXT_UNCAST_ARG(label), int selected) { TXT_CAST_ARG(txt_label_t, label); unsigned int x, y; int origin_x, origin_y; unsigned int align_indent = 0; unsigned int w; w = label->widget.w; TXT_BGColor(label->bgcolor, 0); TXT_FGColor(label->fgcolor); TXT_GetXY(&origin_x, &origin_y); for (y=0; y<label->h; ++y) { // Calculate the amount to indent this line due to the align // setting switch (label->widget.align) { case TXT_HORIZ_LEFT: align_indent = 0; break; case TXT_HORIZ_CENTER: align_indent = (label->w - strlen(label->lines[y])) / 2; break; case TXT_HORIZ_RIGHT: align_indent = label->w - strlen(label->lines[y]); break; } // Draw this line TXT_GotoXY(origin_x, origin_y + y); // Gap at the start for (x=0; x<align_indent; ++x) { TXT_DrawString(" "); } // The string itself TXT_DrawString(label->lines[y]); x += strlen(label->lines[y]); // Gap at the end for (; x<w; ++x) { TXT_DrawString(" "); } } }