Build font parameters for asset packs fonts

This commit is contained in:
Willy-JL
2024-01-24 05:12:30 +00:00
parent 8e7ae15fbd
commit 0f67cbe760
3 changed files with 21 additions and 3 deletions

View File

@@ -112,6 +112,9 @@ uint8_t canvas_current_font_width(const Canvas* canvas) {
const CanvasFontParameters* canvas_get_font_params(const Canvas* canvas, Font font) {
furi_assert(canvas);
furi_assert(font < FontTotalNumber);
if((FontSwap)font < FontSwapCount && xtreme_assets.font_params[font]) {
return xtreme_assets.font_params[font];
}
return &canvas_font_params[font];
}

View File

@@ -13,6 +13,7 @@
XtremeAssets xtreme_assets = {
.is_nsfw = false,
.fonts = {NULL},
.font_params = {NULL},
};
void load_icon_animated(const Icon* replace, const char* name, FuriString* path, File* file) {
@@ -113,8 +114,14 @@ void load_font(FontSwap font, const char* name, FuriString* path, File* file) {
uint64_t size = storage_file_size(file);
uint8_t* swap = malloc(size);
if(storage_file_read(file, swap, size) == size) {
if(size > 20 && storage_file_read(file, swap, size) == size) {
xtreme_assets.fonts[font] = swap;
CanvasFontParameters* params = malloc(sizeof(CanvasFontParameters));
params->leading_default = swap[10]; // max_char_height
params->leading_min = params->leading_default - 2; // good enough
params->height = swap[13]; // ascent_A
params->descender = swap[19]; // start_pos_lower_a
xtreme_assets.font_params[font] = params;
} else {
free(swap);
}
@@ -122,6 +129,13 @@ void load_font(FontSwap font, const char* name, FuriString* path, File* file) {
storage_file_close(file);
}
void free_font(FontSwap font) {
free(xtreme_assets.fonts[font]);
xtreme_assets.fonts[font] = NULL;
free(xtreme_assets.font_params[font]);
xtreme_assets.font_params[font] = NULL;
}
static const char* font_names[] = {
[FontSwapPrimary] = "Primary",
[FontSwapSecondary] = "Secondary",
@@ -172,8 +186,7 @@ void XTREME_ASSETS_FREE() {
for(FontSwap font = 0; font < FontSwapCount; font++) {
if(xtreme_assets.fonts[font] != NULL) {
free(xtreme_assets.fonts[font]);
xtreme_assets.fonts[font] = NULL;
free_font(font);
}
}
}

View File

@@ -3,6 +3,7 @@
#include <stdint.h>
#include <stdbool.h>
#include <furi_hal_serial_types.h>
#include <gui/canvas.h>
#ifdef __cplusplus
extern "C" {
@@ -97,6 +98,7 @@ typedef enum {
typedef struct {
bool is_nsfw; // TODO: replace with packs text support
uint8_t* fonts[FontSwapCount];
CanvasFontParameters* font_params[FontSwapCount];
} XtremeAssets;
void XTREME_SETTINGS_LOAD();