Phase 11b: подложка для text overlay + сразу-видимый placeholder
User: "у него есть полупрозрачная подложка? у него правильный z-order?"
Z-order был ок (overlays draw'аются после layout.render). Но без bg
текст плохо читался на пёстром кадре — и до прихода MQTT overlay был
visible=0 (не виден вообще).
Изменения:
- overlay.h: cfc_overlay_text_config_t расширена bg_alpha / bg_y/u/v / bg_pad.
bg_alpha=0 — фон отключён (default).
- overlay.c draw_text: если bg_alpha>0, перед blit'ом текста рисуем fill
rect (atlas_w+2*pad) × (atlas_h+2*pad) с заданным цветом и alpha.
- overlay.c update_text: пробрасывает bg-поля при апдейте.
- mqtt_overlay: MqttOverlayCfg + JSON loader научились читать bg_alpha,
bg_y/u/v, bg_pad, placeholder. Default bg = чёрный 160 alpha, pad 10.
- MqttOverlayItem::start: overlay сразу visible=1 с placeholder (default "—"),
reposition_overlay вызывается до получения MQTT — placeholder
позиционируется в anchor сразу.
User'у теперь видна тёмная подложка с текстом в правом-нижнем углу даже
если sensor молчит.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -50,6 +50,16 @@ struct MqttOverlayCfg {
|
||||
int r = 255, g = 255, b = 255;
|
||||
int alpha = 230;
|
||||
std::string font_path = "/fonts/DejaVuSans-Bold.ttf";
|
||||
|
||||
/* Полупрозрачная подложка. bg_alpha=0 → отключено. */
|
||||
int bg_alpha = 160;
|
||||
int bg_y = 16, bg_u = 128, bg_v = 128; /* по умолчанию чёрный */
|
||||
int bg_pad = 10;
|
||||
|
||||
/* Что показывать пока нет MQTT-данных. Пусто → overlay невидим до
|
||||
* первого сообщения. По умолчанию "—" чтобы было видно что overlay
|
||||
* жив, но данные ещё не пришли. */
|
||||
std::string placeholder = "—";
|
||||
};
|
||||
|
||||
struct MqttBrokerCfg {
|
||||
|
||||
@@ -105,6 +105,14 @@ typedef struct cfc_overlay_text_config {
|
||||
int r, g, b; /* sRGB цвет 0..255 */
|
||||
int extra_alpha; /* 0..255 общий множитель прозрачности */
|
||||
int visible; /* 0/1 — выводить ли */
|
||||
/* Опциональный полупрозрачный фон (подложка) под текстом.
|
||||
* bg_alpha = 0 → без фона (default)
|
||||
* bg_alpha > 0 → fill rect (atlas_w + 2*bg_pad) × (atlas_h + 2*bg_pad)
|
||||
* с цветом bg_y/u/v перед blit'ом текста.
|
||||
* bg_pad чётный, default 8 если bg_alpha>0 и bg_pad==0. */
|
||||
int bg_alpha; /* 0..255 (0 = отключено) */
|
||||
int bg_y, bg_u, bg_v; /* BT.709 limited (Y=16..235, UV=16..240) */
|
||||
int bg_pad; /* px padding вокруг текста */
|
||||
} cfc_overlay_text_config_t;
|
||||
|
||||
/* Создать TEXT overlay. Открывает font через FreeType, рендерит строку
|
||||
|
||||
Reference in New Issue
Block a user