summaryrefslogtreecommitdiff
path: root/render/font.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-16 21:11:39 +0000
committerDana Jansens <danakj@orodu.net>2003-03-16 21:11:39 +0000
commitf8a47de5ec444c452093371e3db16857eb39a490 (patch)
tree31db2567842d98232775f9980f7a8d2586c0ac71 /render/font.c
parent8ba0586bcbdc7fe9648f1063812126d71a041670 (diff)
merge the C branch into HEAD
Diffstat (limited to 'render/font.c')
-rw-r--r--render/font.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/render/font.c b/render/font.c
new file mode 100644
index 00000000..eb72feb1
--- /dev/null
+++ b/render/font.c
@@ -0,0 +1,75 @@
+#include "font.h"
+
+#include "../src/gettext.h"
+#define _(str) gettext(str)
+
+font_open(const std::string &fontstring,
+ bool shadow, unsigned char offset, unsigned char tint)
+{
+ assert(screen_num >= 0);
+ assert(tint <= CHAR_MAX);
+
+ if (!_xft_init) {
+ if (!XftInit(0)) {
+ printf(_("Couldn't initialize Xft.\n\n"));
+ ::exit(3);
+ }
+#ifdef DEBUG
+ int version = XftGetVersion();
+ printf("Using Xft %d.%d.%d (Built against %d.%d.%d).\n",
+ version / 10000 % 100, version / 100 % 100, version % 100,
+ XFT_MAJOR, XFT_MINOR, XFT_REVISION);
+#endif
+ _xft_init = true;
+ }
+
+ if ((_xftfont = XftFontOpenName(ob_display, _screen_num,
+ fontstring)))
+ return;
+
+ printf(_("Unable to load font: %s\n"), _fontstring.c_str());
+ printf(_("Trying fallback font: %s\n"), "fixed");
+
+ if ((_xftfont = XftFontOpenName(ob_display, _screen_num,
+ "fixed")))
+ return;
+
+ printf(_("Unable to load font: %s\n"), "fixed");
+ printf(_("Aborting!.\n"));
+
+ exit(3); // can't continue without a font
+}
+
+
+destroy_fonts(void)
+{
+ if (_xftfont)
+ XftFontClose(ob_display, _xftfont);
+}
+
+
+int font_measure_string(const char *)
+{
+ XGlyphInfo info;
+
+ if (string.utf8())
+ XftTextExtentsUtf8(**display, _xftfont,
+ (FcChar8*)string.c_str(), string.bytes(), &info);
+ else
+ XftTextExtents8(ob_display, _xftfont,
+ (FcChar8*)string.c_str(), string.bytes(), &info);
+
+ return (signed) info.xOff + (_shadow ? _offset : 0);
+}
+
+
+int font_height(void)
+{
+ return (signed) _xftfont->height + (_shadow ? _offset : 0);
+}
+
+
+int font_max_char_width(void)
+{
+ return (signed) _xftfont->max_advance_width;
+}