mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 12:28:09 +00:00
modtrezorui: draw bars under letters
This commit is contained in:
parent
11a3ff055c
commit
6aae87437f
@ -423,33 +423,43 @@ void display_text(int x, int y, const char *text, int textlen, uint8_t font, uin
|
|||||||
if (textlen < 0) {
|
if (textlen < 0) {
|
||||||
textlen = strlen(text);
|
textlen = strlen(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
int px = x + DISPLAY_OFFSET[0];
|
|
||||||
y += DISPLAY_OFFSET[1];
|
y += DISPLAY_OFFSET[1];
|
||||||
// render glyphs
|
|
||||||
|
// render background bars
|
||||||
|
int px = x + DISPLAY_OFFSET[0];
|
||||||
for (int i = 0; i < textlen; i++) {
|
for (int i = 0; i < textlen; i++) {
|
||||||
const uint8_t *g = get_glyph(font, (uint8_t)text[i]);
|
const uint8_t *g = get_glyph(font, (uint8_t)text[i]);
|
||||||
if (!g) continue;
|
if (!g) continue;
|
||||||
// g[0], g[1] = width, height
|
const int8_t adv = g[2]; // advance
|
||||||
// g[2] = advance
|
display_bar(px - 2, y - 18, adv + 3, 23, bgcolor);
|
||||||
// g[3], g[4] = bearingX, bearingY
|
px += adv;
|
||||||
if (g[0] && g[1]) {
|
}
|
||||||
int sx = px + (int8_t)(g[3]);
|
|
||||||
int sy = y - (int8_t)(g[4]);
|
// render glyphs
|
||||||
int w = g[0];
|
px = x + DISPLAY_OFFSET[0];
|
||||||
int h = g[1];
|
for (int i = 0; i < textlen; i++) {
|
||||||
|
const uint8_t *g = get_glyph(font, (uint8_t)text[i]);
|
||||||
|
if (!g) continue;
|
||||||
|
const int8_t w = g[0]; // width
|
||||||
|
const int8_t h = g[1]; // height
|
||||||
|
const int8_t adv = g[2]; // advance
|
||||||
|
const int8_t bearX = g[3]; // bearingX
|
||||||
|
const int8_t bearY = g[4]; // bearingY
|
||||||
|
if (w && h) {
|
||||||
|
const int sx = px + bearX;
|
||||||
|
const int sy = y - bearY;
|
||||||
int x0, y0, x1, y1;
|
int x0, y0, x1, y1;
|
||||||
clamp_coords(sx, sy, w, h, &x0, &y0, &x1, &y1);
|
clamp_coords(sx, sy, w, h, &x0, &y0, &x1, &y1);
|
||||||
display_set_window(x0, y0, x1, y1);
|
display_set_window(x0, y0, x1, y1);
|
||||||
for (int j = y0; j <= y1; j++) {
|
for (int j = y0; j <= y1; j++) {
|
||||||
for (int i = x0; i <= x1; i++) {
|
for (int i = x0; i <= x1; i++) {
|
||||||
int rx = i - sx;
|
const int rx = i - sx;
|
||||||
int ry = j - sy;
|
const int ry = j - sy;
|
||||||
int a = rx + ry * w;
|
const int a = rx + ry * w;
|
||||||
#if FONT_BPP == 2
|
#if FONT_BPP == 2
|
||||||
uint8_t c = ((g[5 + a / 4] >> (6 - (a % 4) * 2)) & 0x03) * 5;
|
const uint8_t c = ((g[5 + a / 4] >> (6 - (a % 4) * 2)) & 0x03) * 5;
|
||||||
#elif FONT_BPP == 4
|
#elif FONT_BPP == 4
|
||||||
uint8_t c = (g[5 + a / 2] >> (4 - (a % 2) * 4)) & 0x0F;
|
const uint8_t c = (g[5 + a / 2] >> (4 - (a % 2) * 4)) & 0x0F;
|
||||||
#else
|
#else
|
||||||
#error Unsupported FONT_BPP value
|
#error Unsupported FONT_BPP value
|
||||||
#endif
|
#endif
|
||||||
@ -458,7 +468,7 @@ void display_text(int x, int y, const char *text, int textlen, uint8_t font, uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
px += g[2];
|
px += adv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user