Added font caching

This commit is contained in:
Grayson MacKenzie 2014-07-22 17:23:56 -04:00
parent 128e212c14
commit 1c106dbfd0
1 changed files with 17 additions and 1 deletions

18
bar.c
View File

@ -65,6 +65,8 @@ enum {
}; };
#define MAX_FONT_COUNT 5 #define MAX_FONT_COUNT 5
/* 0 <= FONT_CACHE_SIZE <= 65536 */
#define FONT_CACHE_SIZE 256
static xcb_connection_t *c; static xcb_connection_t *c;
static xcb_screen_t *scr; static xcb_screen_t *scr;
@ -74,6 +76,7 @@ static xcb_colormap_t colormap;
static monitor_t *monhead, *montail; static monitor_t *monhead, *montail;
static font_t *font_list[MAX_FONT_COUNT]; static font_t *font_list[MAX_FONT_COUNT];
static char *font_names[MAX_FONT_COUNT]; static char *font_names[MAX_FONT_COUNT];
static font_t *font_cache[FONT_CACHE_SIZE];
static uint32_t attrs = 0; static uint32_t attrs = 0;
static bool dock = false; static bool dock = false;
static bool topbar = true; static bool topbar = true;
@ -306,10 +309,19 @@ select_drawable_font (uint16_t c)
font->width_lut[c - font->char_min].character_width != 0) font->width_lut[c - font->char_min].character_width != 0)
return font; return font;
} }
return NULL; return NULL;
} }
/* returns NULL if character cannot be printed */
font_t *
select_drawable_font_cache (uint16_t c)
{
if (c < FONT_CACHE_SIZE)
return font_cache[c];
else
return select_drawable_font(c);
}
void void
parse (char *text) parse (char *text)
{ {
@ -827,6 +839,10 @@ init (void)
if (!font_list[0]) if (!font_list[0])
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
for (uint16_t i = 0; i < FONT_CACHE_SIZE; i++) {
font_cache[i] = select_drawable_font(i);
}
/* To make the alignment uniform, find maximum height */ /* To make the alignment uniform, find maximum height */
int maxh = font_list[0]->height; int maxh = font_list[0]->height;
for (int i = 1; font_list[i]; i++) for (int i = 1; font_list[i]; i++)