Add theme options for menu line separators.

Added:
 menu.separator.color
 menu.separator.width
 menu.separator.padding.width
 menu.separator.padding.height
This commit is contained in:
Dana Jansens 2008-02-22 12:12:20 -05:00
parent fadc52e186
commit d9e6aa5643
3 changed files with 66 additions and 24 deletions

View file

@ -30,7 +30,6 @@
#include "render/theme.h" #include "render/theme.h"
#define PADDING 2 #define PADDING 2
#define SEPARATOR_HEIGHT 3
#define MAX_MENU_WIDTH 400 #define MAX_MENU_WIDTH 400
#define ITEM_HEIGHT (ob_rr_theme->menu_font_height + 2*PADDING) #define ITEM_HEIGHT (ob_rr_theme->menu_font_height + 2*PADDING)
@ -41,6 +40,9 @@
ButtonPressMask | ButtonReleaseMask) ButtonPressMask | ButtonReleaseMask)
GList *menu_frame_visible; GList *menu_frame_visible;
GHashTable *menu_frame_map;
static RrAppearance *a_sep;
static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
ObMenuFrame *frame); ObMenuFrame *frame);
@ -57,10 +59,18 @@ static Window createWindow(Window parent, gulong mask,
RrVisual(ob_rr_inst), mask, attrib); RrVisual(ob_rr_inst), mask, attrib);
} }
GHashTable *menu_frame_map;
void menu_frame_startup(gboolean reconfig) void menu_frame_startup(gboolean reconfig)
{ {
gint i;
a_sep = RrAppearanceCopy(ob_rr_theme->a_clear);
RrAppearanceAddTextures(a_sep, ob_rr_theme->menu_sep_width);
for (i = 0; i < ob_rr_theme->menu_sep_width; ++i) {
a_sep->texture[i].type = RR_TEXTURE_LINE_ART;
a_sep->texture[i].data.lineart.color =
ob_rr_theme->menu_sep_color;
}
if (reconfig) return; if (reconfig) return;
menu_frame_map = g_hash_table_new(g_int_hash, g_int_equal); menu_frame_map = g_hash_table_new(g_int_hash, g_int_equal);
@ -68,6 +78,8 @@ void menu_frame_startup(gboolean reconfig)
void menu_frame_shutdown(gboolean reconfig) void menu_frame_shutdown(gboolean reconfig)
{ {
RrAppearanceFree(a_sep);
if (reconfig) return; if (reconfig) return;
g_hash_table_destroy(menu_frame_map); g_hash_table_destroy(menu_frame_map);
@ -333,7 +345,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
th = ob_rr_theme->menu_title_height; th = ob_rr_theme->menu_title_height;
} else { } else {
item_a = ob_rr_theme->a_menu_normal; item_a = ob_rr_theme->a_menu_normal;
th = SEPARATOR_HEIGHT + 2*PADDING; th = ob_rr_theme->menu_sep_width +
2*ob_rr_theme->menu_sep_paddingy;
} }
break; break;
default: default:
@ -437,26 +450,31 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
ob_rr_theme->menu_title_height - ob_rr_theme->menu_title_height -
2*ob_rr_theme->paddingy); 2*ob_rr_theme->paddingy);
} else { } else {
RrAppearance *clear; gint i;
/* unlabeled separaator */ /* unlabeled separator */
XMoveResizeWindow(ob_display, self->text, PADDING, PADDING, XMoveResizeWindow(ob_display, self->text, 0, 0,
self->area.width - 2*PADDING, SEPARATOR_HEIGHT); self->area.width,
ob_rr_theme->menu_sep_width +
2*ob_rr_theme->menu_sep_paddingy);
clear = ob_rr_theme->a_clear_tex; a_sep->surface.parent = item_a;
RrAppearanceClearTextures(clear); a_sep->surface.parentx = 0;
clear->texture[0].type = RR_TEXTURE_LINE_ART; a_sep->surface.parenty = 0;
clear->surface.parent = item_a; for (i = 0; i < ob_rr_theme->menu_sep_width; ++i) {
clear->surface.parentx = PADDING; a_sep->texture[i].data.lineart.x1 =
clear->surface.parenty = PADDING; ob_rr_theme->menu_sep_paddingx;
clear->texture[0].data.lineart.color = a_sep->texture[i].data.lineart.y1 =
text_a->texture[0].data.text.color; ob_rr_theme->menu_sep_paddingy + i;
clear->texture[0].data.lineart.x1 = 2*PADDING; a_sep->texture[i].data.lineart.x2 =
clear->texture[0].data.lineart.y1 = SEPARATOR_HEIGHT/2; self->area.width - ob_rr_theme->menu_sep_paddingx - 1;
clear->texture[0].data.lineart.x2 = self->area.width - 4*PADDING; a_sep->texture[i].data.lineart.y2 =
clear->texture[0].data.lineart.y2 = SEPARATOR_HEIGHT/2; ob_rr_theme->menu_sep_paddingy + i;
RrPaint(clear, self->text, }
self->area.width - 2*PADDING, SEPARATOR_HEIGHT);
RrPaint(a_sep, self->text, self->area.width,
ob_rr_theme->menu_sep_width +
2*ob_rr_theme->menu_sep_paddingy);
} }
break; break;
} }
@ -592,7 +610,8 @@ static gint menu_entry_frame_get_height(ObMenuEntryFrame *self,
if (last_entry) if (last_entry)
h -= ob_rr_theme->mbwidth; h -= ob_rr_theme->mbwidth;
} else { } else {
h += SEPARATOR_HEIGHT; h += ob_rr_theme->menu_sep_width +
2*ob_rr_theme->menu_sep_paddingy - PADDING * 2;
} }
break; break;
} }
@ -723,7 +742,8 @@ void menu_frame_render(ObMenuFrame *self)
(ob_rr_theme->mbwidth - PADDING) *2; (ob_rr_theme->mbwidth - PADDING) *2;
} else { } else {
tw = 0; tw = 0;
th = SEPARATOR_HEIGHT; th = ob_rr_theme->menu_sep_width +
2*ob_rr_theme->menu_sep_paddingy - 2*PADDING;
} }
break; break;
} }

View file

@ -211,6 +211,17 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
if (!read_int(db, "window.client.padding.height", &theme->cbwidthy) || if (!read_int(db, "window.client.padding.height", &theme->cbwidthy) ||
theme->cbwidthy < 0 || theme->cbwidthy > 100) theme->cbwidthy < 0 || theme->cbwidthy > 100)
theme->cbwidthy = theme->cbwidthx; theme->cbwidthy = theme->cbwidthx;
if (!read_int(db, "menu.separator.width", &theme->menu_sep_width) ||
theme->menu_sep_width < 1 || theme->menu_sep_width > 100)
theme->menu_sep_width = 1;
if (!read_int(db, "menu.separator.padding.width",
&theme->menu_sep_paddingx) ||
theme->menu_sep_paddingx < 0 || theme->menu_sep_paddingx > 100)
theme->menu_sep_paddingx = 6;
if (!read_int(db, "menu.separator.padding.height",
&theme->menu_sep_paddingy) ||
theme->menu_sep_paddingy < 0 || theme->menu_sep_paddingy > 100)
theme->menu_sep_paddingy = 3;
/* load colors */ /* load colors */
if (!read_color(db, inst, if (!read_color(db, inst,
@ -408,6 +419,12 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
"menu.items.active.text.color", "menu.items.active.text.color",
&theme->menu_selected_color)) &theme->menu_selected_color))
theme->menu_selected_color = RrColorNew(inst, 0, 0, 0); theme->menu_selected_color = RrColorNew(inst, 0, 0, 0);
if (!read_color(db, inst,
"menu.separator.color", &theme->menu_sep_color))
theme->menu_sep_color = RrColorNew(inst,
theme->menu_color->r,
theme->menu_color->g,
theme->menu_color->b);
/* load the image masks */ /* load the image masks */
@ -1408,6 +1425,7 @@ void RrThemeFree(RrTheme *theme)
RrColorFree(theme->titlebut_focused_unpressed_color); RrColorFree(theme->titlebut_focused_unpressed_color);
RrColorFree(theme->titlebut_unfocused_unpressed_color); RrColorFree(theme->titlebut_unfocused_unpressed_color);
RrColorFree(theme->menu_title_color); RrColorFree(theme->menu_title_color);
RrColorFree(theme->menu_sep_color);
RrColorFree(theme->menu_color); RrColorFree(theme->menu_color);
RrColorFree(theme->menu_selected_color); RrColorFree(theme->menu_selected_color);
RrColorFree(theme->menu_disabled_color); RrColorFree(theme->menu_disabled_color);

View file

@ -47,6 +47,9 @@ struct _RrTheme {
gint cbwidthy; gint cbwidthy;
gint menu_overlap_x; gint menu_overlap_x;
gint menu_overlap_y; gint menu_overlap_y;
gint menu_sep_width;
gint menu_sep_paddingx;
gint menu_sep_paddingy;
/* these ones are calculated, not set directly by the theme file */ /* these ones are calculated, not set directly by the theme file */
gint win_font_height; gint win_font_height;
gint menu_title_font_height; gint menu_title_font_height;
@ -84,6 +87,7 @@ struct _RrTheme {
RrColor *titlebut_focused_unpressed_color; RrColor *titlebut_focused_unpressed_color;
RrColor *titlebut_unfocused_unpressed_color; RrColor *titlebut_unfocused_unpressed_color;
RrColor *menu_title_color; RrColor *menu_title_color;
RrColor *menu_sep_color;
RrColor *menu_color; RrColor *menu_color;
RrColor *menu_selected_color; RrColor *menu_selected_color;
RrColor *menu_disabled_color; RrColor *menu_disabled_color;