summaryrefslogtreecommitdiff
path: root/render/theme.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-03-04 18:47:21 +0000
committerDana Jansens <danakj@orodu.net>2007-03-04 18:47:21 +0000
commit7744067b6b50124c31f647e2943ef1fce9fdec96 (patch)
treea5fb1ba7a7102618e62eaf4650e4c325f71b7c29 /render/theme.c
parent5109b5ae200133a0d2e86479218ad9debd9e8c11 (diff)
moving shadow information out of the themes, and into the Text textures.
cleaning up some old Xft cruft in font.c also, that is no longer needed.
Diffstat (limited to 'render/theme.c')
-rw-r--r--render/theme.c114
1 files changed, 109 insertions, 5 deletions
diff --git a/render/theme.c b/render/theme.c
index b26af615..c8762181 100644
--- a/render/theme.c
+++ b/render/theme.c
@@ -32,6 +32,7 @@
#include <string.h>
static XrmDatabase loaddb(RrTheme *theme, gchar *name);
+static gboolean read_bool(XrmDatabase db, gchar *rname, gboolean *value);
static gboolean read_int(XrmDatabase db, gchar *rname, gint *value);
static gboolean read_string(XrmDatabase db, gchar *rname, gchar **value);
static gboolean read_color(XrmDatabase db, const RrInstance *inst,
@@ -51,8 +52,11 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
{
XrmDatabase db = NULL;
RrJustify winjust, mtitlejust;
+ gboolean b;
gchar *str;
RrTheme *theme;
+ gint offset;
+ gint tint;
theme = g_new0(RrTheme, 1);
@@ -116,15 +120,12 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
RrFontRef(active_window_font);
} else
theme->win_font_focused = RrFontOpenDefault(inst);
- theme->win_font_height = RrFontHeight(theme->win_font_focused);
if (inactive_window_font) {
theme->win_font_unfocused = inactive_window_font;
RrFontRef(inactive_window_font);
} else
theme->win_font_unfocused = RrFontOpenDefault(inst);
- theme->win_font_height = MAX(theme->win_font_height,
- RrFontHeight(theme->win_font_unfocused));
winjust = RR_JUSTIFY_LEFT;
if (read_string(db, "window.label.text.justify", &str)) {
@@ -139,7 +140,6 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
RrFontRef(menu_title_font);
} else
theme->menu_title_font = RrFontOpenDefault(inst);
- theme->menu_title_font_height = RrFontHeight(theme->menu_title_font);
mtitlejust = RR_JUSTIFY_LEFT;
if (read_string(db, "menu.title.text.justify", &str)) {
@@ -154,7 +154,6 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
RrFontRef(menu_item_font);
} else
theme->menu_font = RrFontOpenDefault(inst);
- theme->menu_font_height = RrFontHeight(theme->menu_font);
/* load direct dimensions */
if (!read_int(db, "menu.overlap", &theme->menu_overlap) ||
@@ -655,6 +654,22 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
theme->app_hilite_label->texture[0].data.text.color =
theme->title_focused_color;
+ if (read_bool(db, "window.active.label.text.shadow", &b) && b) {
+ if (!read_int(db, "window.active.label.text.shadow.offset", &offset))
+ offset = 1;
+
+ if (!read_int(db, "window.active.label.text.shadow.tint", &tint))
+ tint = 50;
+ tint = (tint > 100 ? 100 : (tint < -100 ? -100 : tint));
+ } else {
+ offset = 0;
+ tint = 50;
+ }
+ theme->a_focused_label->texture[0].data.text.shadow_offset =
+ theme->app_hilite_label->texture[0].data.text.shadow_offset = offset;
+ theme->a_focused_label->texture[0].data.text.shadow_tint =
+ theme->app_hilite_label->texture[0].data.text.shadow_tint = tint;
+
theme->a_unfocused_label->texture[0].type =
theme->app_unhilite_label->texture[0].type = RR_TEXTURE_TEXT;
theme->a_unfocused_label->texture[0].data.text.justify = winjust;
@@ -667,11 +682,42 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
theme->app_unhilite_label->texture[0].data.text.color =
theme->title_unfocused_color;
+ if (read_bool(db, "window.inactive.label.text.shadow", &b) && b) {
+ if (!read_int(db, "window.inactive.label.text.shadow.offset", &offset))
+ offset = 1;
+
+ if (!read_int(db, "window.inactive.label.text.shadow.tint", &tint))
+ tint = 50;
+ tint = (tint > 100 ? 100 : (tint < -100 ? -100 : tint));
+ } else {
+ offset = 0;
+ tint = 50;
+ }
+ theme->a_unfocused_label->texture[0].data.text.shadow_offset =
+ theme->app_unhilite_label->texture[0].data.text.shadow_offset =
+ offset;
+ theme->a_unfocused_label->texture[0].data.text.shadow_tint =
+ theme->app_unhilite_label->texture[0].data.text.shadow_tint = tint;
+
theme->a_menu_title->texture[0].type = RR_TEXTURE_TEXT;
theme->a_menu_title->texture[0].data.text.justify = mtitlejust;
theme->a_menu_title->texture[0].data.text.font = theme->menu_title_font;
theme->a_menu_title->texture[0].data.text.color = theme->menu_title_color;
+ if (read_bool(db, "menu.title.text.shadow", &b) && b) {
+ if (!read_int(db, "menu.title.text.shadow.offset", &offset))
+ offset = 1;
+
+ if (!read_int(db, "menu.title.text.shadow.tint", &tint))
+ tint = 50;
+ tint = (tint > 100 ? 100 : (tint < -100 ? -100 : tint));
+ } else {
+ offset = 0;
+ tint = 50;
+ }
+ theme->a_menu_title->texture[0].data.text.shadow_offset = offset;
+ theme->a_menu_title->texture[0].data.text.shadow_tint = tint;
+
theme->a_menu_text_normal->texture[0].type =
theme->a_menu_text_disabled->texture[0].type =
theme->a_menu_text_selected->texture[0].type = RR_TEXTURE_TEXT;
@@ -689,6 +735,25 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
theme->a_menu_text_selected->texture[0].data.text.color =
theme->menu_selected_color;
+ if (read_bool(db, "menu.items.text.shadow", &b) && b) {
+ if (!read_int(db, "menu.items.text.shadow.offset", &offset))
+ offset = 1;
+
+ if (!read_int(db, "menu.items.text.shadow.tint", &tint))
+ tint = 50;
+ tint = (tint > 100 ? 100 : (tint < -100 ? -100 : tint));
+ } else {
+ offset = 0;
+ tint = 50;
+ }
+ theme->a_menu_text_normal->texture[0].data.text.shadow_offset =
+ theme->a_menu_text_disabled->texture[0].data.text.shadow_offset =
+ theme->a_menu_text_selected->texture[0].data.text.shadow_offset =
+ offset;
+ theme->a_menu_text_normal->texture[0].data.text.shadow_tint =
+ theme->a_menu_text_disabled->texture[0].data.text.shadow_tint =
+ theme->a_menu_text_selected->texture[0].data.text.shadow_tint = tint;
+
theme->a_disabled_focused_max->texture[0].type =
theme->a_disabled_unfocused_max->texture[0].type =
theme->a_hover_focused_max->texture[0].type =
@@ -873,6 +938,23 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
XrmDestroyDatabase(db);
+ /* set the font heights */
+ theme->win_font_height = RrFontHeight
+ (theme->win_font_focused,
+ theme->a_focused_label->texture[0].data.text.shadow_offset);
+ theme->win_font_height =
+ MAX(theme->win_font_height,
+ RrFontHeight
+ (theme->win_font_focused,
+ theme->a_unfocused_label->texture[0].data.text.shadow_offset));
+ theme->menu_title_font_height = RrFontHeight
+ (theme->menu_title_font,
+ theme->a_menu_title->texture[0].data.text.shadow_offset);
+ theme->menu_font_height = RrFontHeight
+ (theme->menu_font,
+ theme->a_menu_text_normal->texture[0].data.text.shadow_offset);
+
+ /* calculate some last extents */
{
gint ft, fb, fl, fr, ut, ub, ul, ur;
@@ -1094,6 +1176,28 @@ static gchar *create_class_name(gchar *rname)
return rclass;
}
+static gboolean read_bool(XrmDatabase db, gchar *rname, gint *value)
+{
+ gboolean ret = FALSE;
+ gchar *rclass = create_class_name(rname);
+ gchar *rettype;
+ XrmValue retvalue;
+
+ if (XrmGetResource(db, rname, rclass, &rettype, &retvalue) &&
+ retvalue.addr != NULL) {
+ if (!g_ascii_strcasecmp(retvalue.addr, "true")) {
+ *value = TRUE;
+ ret = TRUE;
+ } else if (!g_ascii_strcasecmp(retvalue.addr, "false")) {
+ *value = FALSE;
+ ret = TRUE;
+ }
+ }
+
+ g_free(rclass);
+ return ret;
+}
+
static gboolean read_int(XrmDatabase db, gchar *rname, gint *value)
{
gboolean ret = FALSE;