void dropdown_drawactive(void) { DROPDOWN *b = active; if(!b) { return; } int x = active_x, y = active_y, w = active_width, h = active_height; setfont(FONT_TEXT); setcolor(COLOR_TEXT); int i, sign = 1; // Increase width if needed, so that all menu items fit. for(i = 0; i != b->dropcount; i++) { STRING* e = b->ondisplay(i, b); int needed_w = textwidth(e->str, e->length) + 4 * SCALE; if(w < needed_w) { w = needed_w; } } if(y + h * b->dropcount > height) { y -= h * (b->dropcount - 1); sign = -1; } drawrect(x, y, x + w, y + h * b->dropcount, WHITE); framerect(x, y, x + w, y + h * b->dropcount, BLUE); if(sign == -1) { y += h * (b->dropcount - 1); } for(i = 0; i != b->dropcount; i++) { int j = index(b, i); STRING* e = b->ondisplay(j, b); if(j == b->over) { drawrectw(x + 1, y + 1, w - 2, h - 2, C_GRAY); } drawtext(x + 2 * SCALE, y + 2 * SCALE, e->str, e->length); y += sign * h; } }
// Draw background rectangles for a dropdown void dropdown_drawactive(void) { DROPDOWN *b = active; if(!b) { return; } // load colors for this style uint32_t color_bg, color_border, color_aoptbg, color_aopttext, color_text; switch(b->style) { case AUXILIARY_STYLE: color_bg = COLOR_BACKGROUND_AUX; color_border = COLOR_AUX_EDGE_ACTIVE; color_aoptbg = COLOR_AUX_ACTIVEOPTION_BACKGROUND; color_aopttext = COLOR_AUX_ACTIVEOPTION_TEXT; color_text = COLOR_AUX_TEXT; break; default: color_bg = COLOR_BACKGROUND_MAIN; color_border = COLOR_EDGE_ACTIVE; color_aoptbg = COLOR_ACTIVEOPTION_BACKGROUND; color_aopttext = COLOR_ACTIVEOPTION_TEXT; color_text = COLOR_MAIN_TEXT; break; } int x = active_x, y = active_y, w = active_width, h = active_height; int i, sign = 1; // Increase width if needed, so that all menu items fit. for(i = 0; i != b->dropcount; i++) { STRING* e = b->ondisplay(i, b); int needed_w = textwidth(e->str, e->length) + 4 * SCALE; if(w < needed_w) { w = needed_w; } } if(y + h * b->dropcount > utox_window_height) { y -= h * (b->dropcount - 1); sign = -1; } draw_rect_fill (x, y, w, h * b->dropcount, color_bg); draw_rect_frame(x, y, w, h * b->dropcount, color_border); if(sign == -1) { y += h * (b->dropcount - 1); } for(i = 0; i != b->dropcount; i++) { int j = index(b, i); STRING* e = b->ondisplay(j, b); if(j == b->over) { draw_rect_fill(x + 1, y + 1, w - 2, h - 2, color_aoptbg); setcolor(color_aopttext); } else { setcolor(color_text); } setfont(FONT_TEXT); drawtext(x + 2 * SCALE, y + 2 * SCALE, e->str, e->length); y += sign * h; } }