improve font drawing api

This commit is contained in:
2020-01-11 22:37:32 +01:00
parent 2e28f71d48
commit 17a228faa7
8 changed files with 120 additions and 97 deletions
+4 -4
View File
@@ -70,16 +70,16 @@ static void paint(struct DemoScene *self)
break;
}
LCD_setStrEx(header, 0, 3, 1, 3);
LCD_setStrEx(header, 3, 1, BLACK, (struct TextStyle) {.size = FONT_BOLD});
LCD_setRect(0, 12, 83, 31, 1, 1);
LCD_setRect(0, 12, 83, 31, true, BLACK);
char buf[10];
// sprintf(buf, "%3d", priv->pos);
// LCD_setStr(buf, 2, 15, 0);
sprintf(buf, "🌡%.0f°C", analog_read());
LCD_setStrEx(buf, 2, 14, 0, 2);
LCD_setStrEx(buf, 2, 14, WHITE, (struct TextStyle) {.size = FONT_DOUBLE});
LCD_setStr("×↑↓←→⏰⌛☸⏎🌡°🔙▶◀", 2, 33, 1);
LCD_setStr("×↑↓←→⏰⌛☸⏎🌡°🔙▶◀", 2, 33, BLACK);
}
struct Scene *NewScene_Demo(void) {
+22 -3
View File
@@ -6,17 +6,35 @@
#include "liquid.h"
#include "graphics/drawing.h"
#include "graphics/display_spec.h"
#include "scene_menu.h"
#if 0
static void paint(struct MenuScene *self)
{
LCD_clearDisplay(0);
int row = 0;
for (int i = self->scroll_up; i < MIN(self->items_len, self->scroll_up + self->visible_lines); i++, row++) {
bool selected = self->selected==i;
LCD_setStrEx(self->items[i].label, 0, row * 8, selected?WHITE:BLACK,FONT_NORMAL|(selected?FONT_BG:0));
}
}
#endif
static void paint(struct MenuScene *self)
{
LCD_clearDisplay(0);
int row = 0;
for (int i = self->scroll_up; i < MIN(self->items_len, self->scroll_up + 6); i++, row++) {
for (int i = self->scroll_up; i < MIN(self->items_len, self->scroll_up + self->visible_lines); i++, row++) {
bool selected = self->selected==i;
LCD_setStrEx(self->items[i].label, 0, row * 8, selected?WHITE:BLACK,FONT_NORMAL|(selected?FONT_BG:0));
if (selected) LCD_setRect(0, row*9, LCD_WIDTH-1, row*9 + 8, 1, 1);
LCD_setStrEx(self->items[i].label, 1, row * 9 + 1, !selected, (struct TextStyle) {
.bg = selected,
.max_chars = 13,
});
}
}
@@ -36,7 +54,7 @@ static struct SceneEvent onInput(struct MenuScene *self, struct InputEvent event
self->scroll_up--;
}
while (self->selected - self->scroll_up >= 5 && self->scroll_up < self->items_len - 6) {
while (self->selected - self->scroll_up >= (self->visible_lines - 1) && self->scroll_up < self->items_len - self->visible_lines) {
self->scroll_up++;
}
@@ -77,6 +95,7 @@ struct MenuScene *NewScene_Menu(struct MenuItem *items, size_t items_len) {
// TODO long selected label scrolling on tick
scene->visible_lines = 5;
scene->items = items;
scene->items_len = items_len;
+2
View File
@@ -44,6 +44,8 @@ struct MenuScene {
int32_t scroll_up;
// Selected item number
int32_t selected;
// Number of lines visible at a time
uint8_t visible_lines;
// selection handler
MenuScene_onSelect_t onSelect;
// Extra field for the subclass's private use.
+2 -2
View File
@@ -40,11 +40,11 @@ static void paint(struct NumberScene *self)
struct NumberSceneOpts *opts = self->opts;
LCD_clearDisplay(0);
LCD_setStrEx(opts->label, 1, 1, BLACK, FONT_BOLD);
LCD_setStrEx(opts->label, 1, 1, BLACK, (struct TextStyle) {.size = FONT_BOLD});
char buf[10];
snprintf(buf, 10, "%d%s", opts->value, opts->unit);
LCD_setStrEx(buf, 1, 9, BLACK, FONT_DOUBLE);
LCD_setStrEx(buf, 1, 9, BLACK, (struct TextStyle) {.size = FONT_DOUBLE});
}
static void deinit(struct NumberScene *self)
+1 -1
View File
@@ -35,7 +35,7 @@ static void paint(struct Scene *self)
{
LCD_clearDisplay(0);
LCD_setStrEx("Press DEL to enter setup", 0, 0, 1, 0x3);
LCD_setStrEx("Press DEL to enter setup", 0, 0, BLACK, (struct TextStyle) {.size = FONT_BOLD});
}
struct Scene *NewScene_Root(void) {