lite-xl/src/fontdesc.c

54 lines
1.7 KiB
C

#include "fontdesc.h"
#include "renderer.h"
void font_desc_set_tab_size(FontDesc *font_desc, int tab_size) {
font_desc->tab_size = tab_size;
for (int i = 0; i < font_desc->fonts_scale_length; i++) {
ren_set_font_tab_size(font_desc->fonts_scale[i].font, tab_size);
}
}
int font_desc_get_tab_size(FontDesc *font_desc) {
return font_desc->tab_size;
}
void font_desc_free(FontDesc *font_desc) {
for (int i = 0; i < font_desc->fonts_scale_length; i++) {
ren_free_font(font_desc->fonts_scale[i].font);
}
font_desc->fonts_scale_length = 0;
free(font_desc->filename);
}
static void load_scaled_font(FontDesc *font_desc, int index, int scale) {
RenFont *font = ren_load_font(font_desc->filename, scale * font_desc->size, font_desc->options);
font_desc->fonts_scale[index].font = font;
font_desc->fonts_scale[index].scale = scale;
}
RenFont *font_desc_get_font_at_scale(FontDesc *font_desc, int scale) {
int index = -1;
for (int i = 0; i < font_desc->fonts_scale_length; i++) {
if (font_desc->fonts_scale[i].scale == scale) {
index = i;
break;
}
}
if (index < 0) {
index = font_desc->fonts_scale_length;
if (index < FONT_SCALE_ARRAY_MAX) {
load_scaled_font(font_desc, index, scale);
font_desc->fonts_scale_length = index + 1;
} else {
// FIXME: should not print into the stderr or stdout.
fprintf(stderr, "Warning: max array of font scale reached.\n");
index = (font_desc->recent_font_scale_index == 0 ? 1 : 0);
ren_free_font(font_desc->fonts_scale[index].font);
load_scaled_font(font_desc, index, scale);
}
}
font_desc->recent_font_scale_index = index;
return font_desc->fonts_scale[index].font;
}