static void drawtexth(int x, int y, char_t *str, uint16_t length, int d, int h, int hlen, uint16_t lineheight) { // Draw cursor h -= d; if(h + hlen < 0 || h > length) { drawtext(x, y, str, length); return; } else if(hlen == 0) { drawtext(x, y, str, length); int w = textwidth(str, h + hlen); drawvline(x + w, y, y + lineheight, COLOR_MAIN_TEXT); return; } if(h < 0) { hlen += h; h = 0; if(hlen < 0) { hlen = 0; } } if(h + hlen > length) { hlen = length - h; } int width; width = drawtext_getwidth(x, y, str, h); uint32_t color = setcolor(COLOR_SELECTION_TEXT); int w = textwidth(str + h, hlen); draw_rect_fill(x + width, y, w, lineheight, COLOR_SELECTION_BACKGROUND); drawtext(x + width, y, str + h, hlen); width += w; setcolor(color); drawtext(x + width, y, str + h + hlen, length - (h + hlen)); }
static void drawtexth(int x, int y, char_t *str, uint16_t length, int d, int h, int hlen, uint16_t lineheight) { h -= d; if(h + hlen < 0 || h > length) { drawtext(x, y, str, length); return; } else if(hlen == 0) { drawtext(x, y, str, length); int w = textwidth(str, h + hlen); drawvline(x + w, y, y + lineheight, BLACK); return; } if(h < 0) { hlen += h; h = 0; if(hlen < 0) { hlen = 0; } } if(h + hlen > length) { hlen = length - h; } int width; width = drawtext_getwidth(x, y, str, h); uint32_t color = setcolor(TEXT_HIGHLIGHT); int w = textwidth(str + h, hlen); drawrectw(x + width, y, w, lineheight, TEXT_HIGHLIGHT_BG); drawtext(x + width, y, str + h, hlen); width += w; setcolor(color); drawtext(x + width, y, str + h + hlen, length - (h + hlen)); }