Add a PC renderer for the themed pages; fix overlapping layouts

tools/render_pages.py compiles the page code natively with g++ against
ESPHome's own display and font code and the font bitmaps of the last
`esphome compile`, and draws pages to PNG at chosen moments with sample
data (normal, empty, alert, busy), as a contact sheet, or as one example
per page in docs/images/pages (now shown in the README).

Fixes found with it: Cyber HUD zone names ran into the temperatures,
the breach header label hit the tag and the column marker the matrix
label; KonoSuba subtitle, guild weather icon, cabbage text and all-day
deadline, and hills through the party; Steins;Gate D-mail recipient, the
microwave display, the gadget card value and world line labels; LCARS
room rows, readout bars and data cascade, warp core readouts, and the
captain's log weather wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-10-19 16:46:31 +02:00
1 parent 13a499fd97
commit d2e81a5a36
27 files changed
+627 -38

No files matched your search

+29
View File
@@ -0,0 +1,29 @@
// The parts of ESPHome's core that the display code links against but the
// renderer never uses: there is no component lifecycle, polling, MAC or RNG on
// the PC side.
#include <cstring>
#include "esphome/core/component.h"
#include "esphome/core/helpers.h"
namespace esphome {
void Component::setup() {}
void Component::loop() {}
void Component::dump_config() {}
float Component::get_setup_priority() const { return 0.0f; }
bool Component::can_proceed() { return true; }
void Component::call_setup() {}
PollingComponent::PollingComponent(uint32_t update_interval) : update_interval_(update_interval) {}
void PollingComponent::call_setup() {}
uint32_t PollingComponent::get_update_interval() const { return this->update_interval_; }
void PollingComponent::stop_poller() {}
bool random_bytes(uint8_t *data, size_t len) {
memset(data, 0x5A, len);
return true;
}
void get_mac_address_raw(uint8_t *mac) { memset(mac, 0, 6); }
} // namespace esphome