diff --git a/README b/README index b506b78..c2cfa6c 100644 --- a/README +++ b/README @@ -3,4 +3,6 @@ A game of Pong. Requirements =========== * sdl2 -* sdl2-ttf \ No newline at end of file +* sdl2-ttf +* fontconfig +* Liberation Mono fonts \ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am index c6c59b0..cda7906 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,5 +10,5 @@ pong_SOURCES = \ racket.h \ score.c \ score.h -pong_CFLAGS = $(SDL_CFLAGS) `pkg-config --cflags SDL2_ttf` -pong_LDFLAGS = $(SDL_LIBS) `pkg-config --libs SDL2_ttf` -lm +pong_CFLAGS = $(SDL_CFLAGS) `pkg-config --cflags SDL2_ttf fontconfig` +pong_LDFLAGS = $(SDL_LIBS) `pkg-config --libs SDL2_ttf fontconfig` -lm diff --git a/src/assets/LiberationMono-Bold.ttf b/src/assets/LiberationMono-Bold.ttf deleted file mode 100644 index 9997cda..0000000 Binary files a/src/assets/LiberationMono-Bold.ttf and /dev/null differ diff --git a/src/score.c b/src/score.c index 4f9caf4..5284ed1 100644 --- a/src/score.c +++ b/src/score.c @@ -1,19 +1,47 @@ +#include + #include "score.h" -static const char font_path[] = "src/assets/LiberationMono-Bold.ttf"; +static const FcChar8 *SCORE_FONT_FAMILY = "Liberation Mono"; +static const FcChar8 *SCORE_FONT_STYLE = "Bold"; +static const int SCORE_FONT_PTSIZE = 16; Score* Score_init(int posX, int posY) { + FcConfig *config = FcInitLoadConfigAndFonts(); + FcPattern *pat = FcPatternCreate(); + + FcObjectSet* os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_LANG, FC_FILE, (char *) 0); + FcFontSet* fs = FcFontList(config, pat, os); + + FcChar8 *file, *style, *family; + for (int i=0; fs && i < fs->nfont; ++i) { + FcPattern* font = fs->fonts[i]; + if (FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch + && FcPatternGetString(font, FC_FAMILY, 0, &family) == FcResultMatch + && FcPatternGetString(font, FC_STYLE, 0, &style) == FcResultMatch + && strcmp(SCORE_FONT_FAMILY, family) == 0 + && strcmp(SCORE_FONT_STYLE, style) == 0) { + break; + } + } + Score *s = malloc(sizeof(Score)); *(int *)&s->POSX = posX; *(int *)&s->POSY = posY; s->score = 0; - s->font = TTF_OpenFont(font_path, 16); + s->font = TTF_OpenFont(file, SCORE_FONT_PTSIZE); if (s->font == NULL) { - printf("TTF_OpenFont fail with path '%s'. TTF_Error: %s\n", font_path, TTF_GetError()); + printf("TTF_OpenFont fail with path '%s'. TTF_Error: %s\n", file, TTF_GetError()); free(s); return NULL; } + + FcFontSetDestroy(fs); + FcObjectSetDestroy(os); + FcPatternDestroy(pat); + FcConfigDestroy(config); + s->textColor = (SDL_Color) { 255, 255, 255 }; return s; }