all repos — openbox @ 17b2d57717504e2018d3ba23e0deffe55fc6d084

openbox fork - make it a bit more like ryudo

Fonts are now going to be configured in the rc.xml file. The format is such as

<theme>
...
  <font place="ActiveWindow">
    <name>arial,sans</name>
    <size>8</size>
    <weight>bold</weight>
    <slant>italic</slant>
    <shadow>yes</shadow>
    <shadowOffset>1</shadowOffset>
    <shadowTint>64</shadowTint>
  </font>
</theme>

Valid place="" are ActiveWindow, InactiveWindow, MenuTitle, and MenuItem.
Only valid weight is "bold"
Valid slants are "italic" and "oblique"
shadowTint is a value between -100 and 100
size is the font size in points. pixelsize could possibly be added in the form of 8px, but it's not right now.
the name can contain multiple families and they will all be used to match characters

You can omit any fields and get the default for it. You can omit naming a font for a place="" and get the default font for it.

This is completely replacing theme-specified fonts, for better or for worse. Font shadowing may go back into the theme at some point, instead of in the rc.xml.
Dana Jansens danakj@orodu.net
commit

17b2d57717504e2018d3ba23e0deffe55fc6d084

parent

d0f9d647aaed5c9f2d3cc3a16cc2d4b717622bc0

3 files changed, 94 insertions(+), 2 deletions(-)

jump to
M openbox/config.copenbox/config.c

@@ -42,9 +42,14 @@

gchar *config_title_layout; gboolean config_title_number; +RrFont *config_font_activewindow; +RrFont *config_font_inactivewindow; +RrFont *config_font_menuitem; +RrFont *config_font_menutitle; + gint config_desktops_num; GSList *config_desktops_names; -guint config_screen_firstdesk; +guint config_screen_firstdesk; gboolean config_resize_redraw; gboolean config_resize_four_corners;

@@ -438,6 +443,68 @@ if ((n = parse_find_node("keepBorder", node)))

config_theme_keepborder = parse_bool(doc, n); if ((n = parse_find_node("hideDisabled", node))) config_theme_hidedisabled = parse_bool(doc, n); + + n = parse_find_node("font", node); + while (n) { + xmlNodePtr fnode; + RrFont **font; + gchar *name = g_strdup(RrDefaultFontFamily); + gint size = RrDefaultFontSize; + RrFontWeight weight = RrDefaultFontWeight; + RrFontSlant slant = RrDefaultFontSlant; + gboolean shadow = RrDefaultFontShadow; + gint offset = RrDefaultFontShadowOffset; + gchar tint = RrDefaultFontShadowTint; + + if (parse_attr_contains("ActiveWindow", n, "place")) + font = &config_font_activewindow; + else if (parse_attr_contains("InactiveWindow", n, "place")) + font = &config_font_inactivewindow; + else if (parse_attr_contains("MenuTitle", n, "place")) + font = &config_font_menutitle; + else if (parse_attr_contains("MenuItem", n, "place")) + font = &config_font_menuitem; + else + goto next_font; + + if ((fnode = parse_find_node("name", n->children))) { + g_free(name); + name = parse_string(doc, fnode); + } + if ((fnode = parse_find_node("size", n->children))) { + int s = parse_int(doc, fnode); + if (s > 0) size = s; + } + if ((fnode = parse_find_node("weight", n->children))) { + gchar *w = parse_string(doc, fnode); + if (!g_ascii_strcasecmp(w, "Bold")) + weight = RR_FONTWEIGHT_BOLD; + g_free(w); + } + if ((fnode = parse_find_node("slant", n->children))) { + gchar *s = parse_string(doc, fnode); + if (!g_ascii_strcasecmp(s, "Italic")) + slant = RR_FONTSLANT_ITALIC; + if (!g_ascii_strcasecmp(s, "Oblique")) + slant = RR_FONTSLANT_OBLIQUE; + g_free(s); + } + if ((fnode = parse_find_node("shadow", n->children))) + shadow = parse_bool(doc, fnode); + if ((fnode = parse_find_node("shadowoffset", n->children))) + offset = parse_int(doc, fnode); + if ((fnode = parse_find_node("shadowtint", n->children))) { + tint = parse_int(doc, fnode); + if (tint > 100) tint = 100; + else if (tint < -100) tint = -100; + } + + *font = RrFontOpen(ob_rr_inst, name, size, weight, slant, + shadow, offset, tint); + g_free(name); + next_font: + n = parse_find_node("font", n->next); + } } static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,

@@ -747,6 +814,11 @@ config_title_number = TRUE;

config_theme_keepborder = TRUE; config_theme_hidedisabled = FALSE; + config_font_activewindow = NULL; + config_font_inactivewindow = NULL; + config_font_menuitem = NULL; + config_font_menutitle = NULL; + parse_register(i, "theme", parse_theme, NULL); config_desktops_num = 4;

@@ -819,6 +891,11 @@

g_free(config_theme); g_free(config_title_layout); + + RrFontClose(config_font_activewindow); + RrFontClose(config_font_inactivewindow); + RrFontClose(config_font_menuitem); + RrFontClose(config_font_menutitle); for (it = config_desktops_names; it; it = g_slist_next(it)) g_free(it->data);
M openbox/config.hopenbox/config.h

@@ -23,6 +23,7 @@

#include "misc.h" #include "stacking.h" #include "place.h" +#include "render/render.h" #include <glib.h>

@@ -92,6 +93,15 @@ /*! Titlebar button layout */

extern gchar *config_title_layout; /*! Append a unique number to windows with same titles */ extern gboolean config_title_number; + +/*! The font for the active window's title */ +extern RrFont *config_font_activewindow; +/*! The font for inactive windows' titles */ +extern RrFont *config_font_inactivewindow; +/*! The font for menu titles */ +extern RrFont *config_font_menutitle; +/*! The font for menu items */ +extern RrFont *config_font_menuitem; /*! The number of desktops */ extern gint config_desktops_num;
M openbox/openbox.copenbox/openbox.c

@@ -244,7 +244,12 @@

/* load the theme specified in the rc file */ { RrTheme *theme; - if ((theme = RrThemeNew(ob_rr_inst, config_theme))) { + if ((theme = RrThemeNew(ob_rr_inst, config_theme, + config_font_activewindow, + config_font_inactivewindow, + config_font_menutitle, + config_font_menuitem))) + { RrThemeFree(ob_rr_theme); ob_rr_theme = theme; }