From 0d0660ed39eb75aafd2d20bf5027add550376149 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 5 Oct 2012 18:16:47 +0200 Subject: interpret font paths relative to configured system path * on Windows, SYSTEMROOT\fonts\ is assumed (untested) --- src/layer_text.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/layer_text.h | 9 +-------- 2 files changed, 52 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/layer_text.cpp b/src/layer_text.cpp index 38ba0e5..bbfff93 100644 --- a/src/layer_text.cpp +++ b/src/layer_text.cpp @@ -2,8 +2,14 @@ #include "config.h" #endif +#include +#include #include +#ifdef __WIN32__ +#include +#endif + #include #include #include @@ -129,6 +135,51 @@ LayerText::color(SDL_Color color) alpha(alphav); } +#ifdef __WIN32__ + +void +LayerText::font(const char *file) +{ + free(filev); + + if (PathIsRelative(file)) { + /* relative path */ + const char *systemroot = getenv("SYSTEMROOT"); + + filev = (char *)malloc(strlen(systemroot) + 7 + strlen(file) + 1); + strcpy(filev, systemroot); + strcat(filev, "\\fonts\\"); + strcat(filev, file); + } else { + /* absolute path */ + filev = strdup(file); + } + + geo(geov); +} + +#else /* assume POSIX */ + +void +LayerText::font(const char *file) +{ + free(filev); + + if (*file != '/') { + /* relative path */ + filev = (char *)malloc(sizeof(FONT_PATH) + strlen(file)); + strcpy(filev, FONT_PATH); + strcat(filev, file); + } else { + /* absolute path */ + filev = strdup(file); + } + + geo(geov); +} + +#endif + void LayerText::style_osc(LayerText *obj, lo_arg **argv) { diff --git a/src/layer_text.h b/src/layer_text.h index 745f54f..6227ff5 100644 --- a/src/layer_text.h +++ b/src/layer_text.h @@ -72,14 +72,7 @@ private: obj->text(&argv[0]->s); } - inline void - font(const char *file) - { - free(filev); - filev = strdup(file); - - geo(geov); - } + void font(const char *file); OSCServer::MethodHandlerId *font_osc_id; static void font_osc(LayerText *obj, lo_arg **argv) -- cgit v1.2.3