refactor(core/rendering): deduplicar Text::write* i nomenar magic numbers (DUP-03 + HC-01)

Text tenia cinc mètodes (write, writeColored, writeMonoDigits, length,
lengthMonoDigits) i dos getters (glyphWidth, getGlyphClip) que repetien
el mateix patró de resolució de codepoint: find(cp), fallback a '?' si
no hi és. Extret a un helper privat resolveGlyph(cp) que centralitza
aquesta lògica; totes les funcions passen a usar-lo.

write() ara delega directament a writeColored(...) passant el color per
defecte, eliminant ~19 línies del bucle UTF-8 duplicades.

Els literals 1 (índex de "tinta" al PNG) i 15 (color per defecte a la
paleta) passen a ser Text::INK_COLOR_INDEX i Text::DEFAULT_TEXT_COLOR
(HC-01).

Build + smoke 5s xvfb OK (exit 124).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
JailDesignerandClaude Opus 4.7 committed 2026-04-20 09:32:37 +02:00
1 parent 5f46fb22a4
commit a63deac6a3
3 files changed
+47 -53

No files matched your search

+11
View File
@@ -36,6 +36,13 @@ class Text {
static constexpr Uint8 CENTER_FLAG = 4;
static constexpr Uint8 STROKE_FLAG = 8;
// Índex del píxel "tinta" al PNG de la font. Els glifs són monocroms
// sobre transparent i tots els píxels opacs usen aquest índex; la Surface
// el recolora al vol per a emetre el color destí.
static constexpr Uint8 INK_COLOR_INDEX = 1;
// Color per defecte a la paleta quan s'usa write() sense especificar-lo.
static constexpr Uint8 DEFAULT_TEXT_COLOR = 15;
Text(const std::shared_ptr<Surface>& surface, const std::string& text_file);
Text(const std::shared_ptr<Surface>& surface, const std::shared_ptr<File>& text_file);
~Text() = default;
@@ -68,6 +75,10 @@ class Text {
static auto nextCodepoint(const std::string& s, std::size_t& pos) -> std::uint32_t;
private:
// Busca l'Offset del codepoint; si no hi és, cau al glif '?' com a
// substitut. Retorna nullptr si tampoc hi ha '?'.
[[nodiscard]] auto resolveGlyph(std::uint32_t cp) const -> const Offset*;
std::unique_ptr<Sprite> sprite_;
int box_width_{0};
int box_height_{0};