added some font stuff

This commit is contained in:
Derek Foreman 2003-03-16 22:34:05 +00:00
parent f8a47de5ec
commit aa68e45b19
2 changed files with 66 additions and 49 deletions

View file

@ -1,75 +1,77 @@
#include <stdlib.h>
#include <X11/Xft/Xft.h>
#include "../kernel/openbox.h"
#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)
void font_startup(void)
{
assert(screen_num >= 0);
assert(tint <= CHAR_MAX);
if (!_xft_init) {
#ifdef DEBUG
int version;
#endif /* DEBUG */
if (!XftInit(0)) {
printf(_("Couldn't initialize Xft.\n\n"));
::exit(3);
g_warning(_("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 = XftGetVersion();
g_message("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;
}
ObFont *font_open(char *fontstring)
{
ObFont *out;
XftFont *xf;
if ((xf = XftFontOpenName(ob_display, ob_screen, fontstring))) {
out = malloc(sizeof(ObFont));
out->xftfont = xf;
return out;
}
g_warning(_("Unable to load font: %s\n"), fontstring);
g_warning(_("Trying fallback font: %s\n"), "fixed");
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"));
if ((xf = XftFontOpenName(ob_display, ob_screen, "fixed"))) {
out = malloc(sizeof(ObFont));
out->xftfont = xf;
return out;
}
g_warning(_("Unable to load font: %s\n"), "fixed");
g_warning(_("Aborting!.\n"));
exit(3); // can't continue without a font
}
destroy_fonts(void)
void font_close(ObFont *f)
{
if (_xftfont)
XftFontClose(ob_display, _xftfont);
XftFontClose(ob_display, f->xftfont);
}
int font_measure_string(const char *)
int font_measure_string(ObFont *f, const char *str, int shadow, int offset)
{
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);
XftTextExtentsUtf8(ob_display, f->xftfont,
(FcChar8*)str, strlen(str), &info);
return (signed) info.xOff + (_shadow ? _offset : 0);
return (signed) info.xOff + (shadow ? offset : 0);
}
int font_height(void)
int font_height(ObFont *f, int shadow, int offset)
{
return (signed) _xftfont->height + (_shadow ? _offset : 0);
return (signed) f->xftfont->height + (shadow ? offset : 0);
}
int font_max_char_width(void)
int font_max_char_width(ObFont *f)
{
return (signed) _xftfont->max_advance_width;
return (signed) f->xftfont->max_advance_width;
}

15
render/font.h Normal file
View file

@ -0,0 +1,15 @@
#ifndef __font_h
#define __font_h
#include <X11/Xft/Xft.h>
typedef struct {
XftFont *xftfont;
} ObFont;
void font_startup(void);
ObFont *font_open(char *fontstring);
void font_close(ObFont *f);
int font_measure_string(ObFont *f, const char *str, int shadow, int offset);
int font_height(ObFont *f, int shadow, int offset);
int font_max_char_width(ObFont *f);
#endif /* __font_h */