all repos — openbox @ d9e6aa5643e74ab84fde0ddb1fcb8418ff212281

openbox fork - make it a bit more like ryudo

Add theme options for menu line separators.

Added:
 menu.separator.color
 menu.separator.width
 menu.separator.padding.width
 menu.separator.padding.height
Dana Jansens danakj@orodu.net
commit

d9e6aa5643e74ab84fde0ddb1fcb8418ff212281

parent

fadc52e1869fbdda3d30a8131ca5c5c1da7c6e98

3 files changed, 66 insertions(+), 24 deletions(-)

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

@@ -30,7 +30,6 @@ #include "config.h"

#include "render/theme.h" #define PADDING 2 -#define SEPARATOR_HEIGHT 3 #define MAX_MENU_WIDTH 400 #define ITEM_HEIGHT (ob_rr_theme->menu_font_height + 2*PADDING)

@@ -41,6 +40,9 @@ #define ENTRY_EVENTMASK (EnterWindowMask | LeaveWindowMask | \

ButtonPressMask | ButtonReleaseMask) GList *menu_frame_visible; +GHashTable *menu_frame_map; + +static RrAppearance *a_sep; static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, ObMenuFrame *frame);

@@ -57,10 +59,18 @@ RrDepth(ob_rr_inst), InputOutput,

RrVisual(ob_rr_inst), mask, attrib); } -GHashTable *menu_frame_map; - 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; menu_frame_map = g_hash_table_new(g_int_hash, g_int_equal);

@@ -68,6 +78,8 @@ }

void menu_frame_shutdown(gboolean reconfig) { + RrAppearanceFree(a_sep); + if (reconfig) return; g_hash_table_destroy(menu_frame_map);

@@ -333,7 +345,8 @@ item_a = ob_rr_theme->a_menu_title;

th = ob_rr_theme->menu_title_height; } else { 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; default:

@@ -437,26 +450,31 @@ self->area.width - 2*ob_rr_theme->paddingx,

ob_rr_theme->menu_title_height - 2*ob_rr_theme->paddingy); } else { - RrAppearance *clear; + gint i; - /* unlabeled separaator */ - XMoveResizeWindow(ob_display, self->text, PADDING, PADDING, - self->area.width - 2*PADDING, SEPARATOR_HEIGHT); + /* unlabeled separator */ + XMoveResizeWindow(ob_display, self->text, 0, 0, + self->area.width, + ob_rr_theme->menu_sep_width + + 2*ob_rr_theme->menu_sep_paddingy); - clear = ob_rr_theme->a_clear_tex; - RrAppearanceClearTextures(clear); - clear->texture[0].type = RR_TEXTURE_LINE_ART; - clear->surface.parent = item_a; - clear->surface.parentx = PADDING; - clear->surface.parenty = PADDING; - clear->texture[0].data.lineart.color = - text_a->texture[0].data.text.color; - clear->texture[0].data.lineart.x1 = 2*PADDING; - clear->texture[0].data.lineart.y1 = SEPARATOR_HEIGHT/2; - clear->texture[0].data.lineart.x2 = self->area.width - 4*PADDING; - clear->texture[0].data.lineart.y2 = SEPARATOR_HEIGHT/2; - RrPaint(clear, self->text, - self->area.width - 2*PADDING, SEPARATOR_HEIGHT); + a_sep->surface.parent = item_a; + a_sep->surface.parentx = 0; + a_sep->surface.parenty = 0; + for (i = 0; i < ob_rr_theme->menu_sep_width; ++i) { + a_sep->texture[i].data.lineart.x1 = + ob_rr_theme->menu_sep_paddingx; + a_sep->texture[i].data.lineart.y1 = + ob_rr_theme->menu_sep_paddingy + i; + a_sep->texture[i].data.lineart.x2 = + self->area.width - ob_rr_theme->menu_sep_paddingx - 1; + a_sep->texture[i].data.lineart.y2 = + ob_rr_theme->menu_sep_paddingy + i; + } + + RrPaint(a_sep, self->text, self->area.width, + ob_rr_theme->menu_sep_width + + 2*ob_rr_theme->menu_sep_paddingy); } break; }

@@ -592,7 +610,8 @@ overlap with the menu's outside border */

if (last_entry) h -= ob_rr_theme->mbwidth; } else { - h += SEPARATOR_HEIGHT; + h += ob_rr_theme->menu_sep_width + + 2*ob_rr_theme->menu_sep_paddingy - PADDING * 2; } break; }

@@ -723,7 +742,8 @@ th = ob_rr_theme->menu_title_height +

(ob_rr_theme->mbwidth - PADDING) *2; } else { tw = 0; - th = SEPARATOR_HEIGHT; + th = ob_rr_theme->menu_sep_width + + 2*ob_rr_theme->menu_sep_paddingy - 2*PADDING; } break; }
M render/theme.crender/theme.c

@@ -211,6 +211,17 @@ theme->cbwidthx = theme->paddingx;

if (!read_int(db, "window.client.padding.height", &theme->cbwidthy) || theme->cbwidthy < 0 || theme->cbwidthy > 100) 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 */ if (!read_color(db, inst,

@@ -408,6 +419,12 @@ if (!read_color(db, inst,

"menu.items.active.text.color", &theme->menu_selected_color)) 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 */

@@ -1408,6 +1425,7 @@ RrColorFree(theme->titlebut_unfocused_pressed_color);

RrColorFree(theme->titlebut_focused_unpressed_color); RrColorFree(theme->titlebut_unfocused_unpressed_color); RrColorFree(theme->menu_title_color); + RrColorFree(theme->menu_sep_color); RrColorFree(theme->menu_color); RrColorFree(theme->menu_selected_color); RrColorFree(theme->menu_disabled_color);
M render/theme.hrender/theme.h

@@ -47,6 +47,9 @@ gint cbwidthx;

gint cbwidthy; gint menu_overlap_x; 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 */ gint win_font_height; gint menu_title_font_height;

@@ -84,6 +87,7 @@ RrColor *titlebut_unfocused_pressed_color;

RrColor *titlebut_focused_unpressed_color; RrColor *titlebut_unfocused_unpressed_color; RrColor *menu_title_color; + RrColor *menu_sep_color; RrColor *menu_color; RrColor *menu_selected_color; RrColor *menu_disabled_color;