JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
ProceduralFont.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <cstddef>
7#include <cstdint>
8#include <filesystem>
9#include <optional>
10#include <string>
11#include <string_view>
12#include <unordered_map>
13#include <vector>
14
15#include "HMI/Graphics/AssetContract.h" // hmi::AssetValidation
16
22
23namespace hmi {
24
27 int x = 0;
28 int y = 0;
29 int width = 0;
30 int height = 0;
32 int advance = 0;
33};
34
45 int lineHeight = 0;
47 char32_t replacementCodePoint = U'?';
49 std::unordered_map<char32_t, GlyphMetrics> glyphs;
50
57 [[nodiscard]] const GlyphMetrics* glyph(char32_t codePoint) const;
58};
59
61struct TextExtent {
62 float width = 0.0f;
63 float height = 0.0f;
64};
65
77[[nodiscard]] char32_t nextUtf8CodePoint(std::string_view text, std::size_t& index) noexcept;
78
90[[nodiscard]] TextExtent measureText(const FontMetrics& metrics, std::string_view text,
91 float scale = 1.0f) noexcept;
92
96 int width = 0;
97 int height = 0;
98 std::vector<std::uint32_t> pixels;
99};
100
106
118[[nodiscard]] ProceduralFont buildProceduralFont();
119
122inline constexpr int FONT_METRICS_FORMAT_VERSION = 1;
123
135
141 std::optional<FontMetrics> metrics;
142 std::string error;
144
146 [[nodiscard]] bool ok() const noexcept {
147 return metrics.has_value();
148 }
149};
150
159[[nodiscard]] FontMetricsResult loadFontMetricsFromString(std::string_view json);
160
167[[nodiscard]] FontMetricsResult loadFontMetricsFromFile(const std::filesystem::path& path);
168
181[[nodiscard]] AssetValidation validateFontMetricsAgainstTexture(const FontMetrics& metrics,
182 const std::string& fileName,
183 int textureWidth,
184 int textureHeight);
185
186} // namespace hmi
Contrat de dimensions par famille d'assets graphiques et validation pure (EX-REN-007).
Definition AudioEngine.cpp:15
TextExtent measureText(const FontMetrics &metrics, std::string_view text, float scale) noexcept
Largeur et hauteur qu'occuperait text avec metrics, à l'échelle scale.
Definition ProceduralFont.cpp:262
@ UnsupportedVersion
Numéro de version supérieur à SoundCatalog::FORMAT_VERSION.
Definition SoundCatalog.h:30
@ FileNotFound
Fichier absent. Cas légitime (catalogue vide), pas une anomalie.
Definition SoundCatalog.h:28
@ None
Pas d'erreur.
Definition SoundCatalog.h:27
@ MalformedStructure
Structure inattendue (« sons » absent, entrée invalide…).
Definition SoundCatalog.h:31
@ ParseError
JSON malformé, ou racine qui n'est pas un objet.
Definition SoundCatalog.h:29
FontMetricsError
Catégorie d'échec de lecture d'un fichier de métriques (même esprit que hmi::AnimationCatalogError).
Definition ProceduralFont.h:128
@ None
Pas d'erreur.
Definition ProceduralFont.h:129
constexpr int FONT_METRICS_FORMAT_VERSION
Version du format de métriques écrite dans le fichier, et plus élevée qui soit lue (hmi::loadFontMetr...
Definition ProceduralFont.h:122
FontMetricsResult loadFontMetricsFromFile(const std::filesystem::path &path)
Lit des métriques de police depuis un fichier.
Definition ProceduralFont.cpp:540
char32_t nextUtf8CodePoint(std::string_view text, std::size_t &index) noexcept
Décode le point de code UTF-8 suivant d'une chaîne.
Definition ProceduralFont.cpp:221
ProceduralFont buildProceduralFont()
Génère, en mémoire, une police bitmap minimale et déterministe (repli sans asset).
Definition ProceduralFont.cpp:293
AssetValidation validateFontMetricsAgainstTexture(const FontMetrics &metrics, const std::string &fileName, int textureWidth, int textureHeight)
Valide la cohérence entre des métriques et les dimensions décodées du PNG associé.
Definition ProceduralFont.cpp:552
FontMetricsResult loadFontMetricsFromString(std::string_view json)
Lit des métriques de police depuis une chaîne JSON.
Definition ProceduralFont.cpp:436
Résultat d'une lecture de métriques : soit des FontMetrics, soit une erreur décrite.
Definition ProceduralFont.h:140
std::string error
Definition ProceduralFont.h:142
bool ok() const noexcept
Definition ProceduralFont.h:146
std::optional< FontMetrics > metrics
Definition ProceduralFont.h:141
FontMetricsError errorCode
Definition ProceduralFont.h:143
Métriques d'une police bitmap : région et avance de chaque point de code couvert.
Definition ProceduralFont.h:43
int lineHeight
Hauteur d'une ligne, en pixels (avance verticale d'un retour à la ligne \n).
Definition ProceduralFont.h:45
char32_t replacementCodePoint
Point de code substitué à un caractère non couvert par glyphs (typiquement ?).
Definition ProceduralFont.h:47
const GlyphMetrics * glyph(char32_t codePoint) const
Métriques effectives d'un point de code, avec substitution.
Definition ProceduralFont.cpp:208
std::unordered_map< char32_t, GlyphMetrics > glyphs
Point de code → métriques de son glyphe dans l'atlas.
Definition ProceduralFont.h:49
Position, taille et avance horizontale d'un glyphe dans l'atlas de police, en pixels.
Definition ProceduralFont.h:26
int advance
Distance horizontale jusqu'au glyphe suivant (peut différer de width).
Definition ProceduralFont.h:32
int height
Definition ProceduralFont.h:30
int y
Definition ProceduralFont.h:28
int width
Definition ProceduralFont.h:29
int x
Definition ProceduralFont.h:27
Pixels d'un atlas de police généré en mémoire, au format R8G8B8A8_UNORM (ordre mémoire R,...
Definition ProceduralFont.h:95
int height
Definition ProceduralFont.h:97
std::vector< std::uint32_t > pixels
Definition ProceduralFont.h:98
int width
Definition ProceduralFont.h:96
Atlas de police procédural complet : ses pixels et les métriques qui les décrivent.
Definition ProceduralFont.h:102
ProceduralFontImage image
Definition ProceduralFont.h:103
FontMetrics metrics
Definition ProceduralFont.h:104
Dimensions mesurées d'un texte, en pixels (à l'échelle demandée).
Definition ProceduralFont.h:61
float height
Definition ProceduralFont.h:63
float width
Definition ProceduralFont.h:62