track the maximum margin of menu items. use this to keep icons in the menus inside the bevel/borders of the menu items
This commit is contained in:
parent
99e79c5469
commit
3e7b4478ee
2 changed files with 47 additions and 10 deletions
|
@ -198,6 +198,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
|
||||||
RrAppearance *item_a, *text_a;
|
RrAppearance *item_a, *text_a;
|
||||||
gint th; /* temp */
|
gint th; /* temp */
|
||||||
ObMenu *sub;
|
ObMenu *sub;
|
||||||
|
ObMenuFrame *frame = self->frame;
|
||||||
|
|
||||||
item_a = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
|
item_a = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
|
||||||
!self->entry->data.normal.enabled) ?
|
!self->entry->data.normal.enabled) ?
|
||||||
|
@ -284,9 +285,12 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
|
||||||
if (self->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR &&
|
if (self->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR &&
|
||||||
self->entry->data.normal.icon_data)
|
self->entry->data.normal.icon_data)
|
||||||
{
|
{
|
||||||
XMoveResizeWindow(ob_display, self->icon, PADDING, 0,
|
XMoveResizeWindow(ob_display, self->icon,
|
||||||
self->frame->item_h,
|
PADDING, frame->item_margin.top,
|
||||||
self->frame->item_h);
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom,
|
||||||
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom);
|
||||||
self->a_icon->texture[0].data.rgba.width =
|
self->a_icon->texture[0].data.rgba.width =
|
||||||
self->entry->data.normal.icon_width;
|
self->entry->data.normal.icon_width;
|
||||||
self->a_icon->texture[0].data.rgba.height =
|
self->a_icon->texture[0].data.rgba.height =
|
||||||
|
@ -295,18 +299,24 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
|
||||||
self->entry->data.normal.icon_data;
|
self->entry->data.normal.icon_data;
|
||||||
self->a_icon->surface.parent = item_a;
|
self->a_icon->surface.parent = item_a;
|
||||||
self->a_icon->surface.parentx = PADDING;
|
self->a_icon->surface.parentx = PADDING;
|
||||||
self->a_icon->surface.parenty = 0;
|
self->a_icon->surface.parenty = frame->item_margin.top;
|
||||||
RrPaint(self->a_icon, self->icon,
|
RrPaint(self->a_icon, self->icon,
|
||||||
self->frame->item_h, self->frame->item_h);
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom,
|
||||||
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom);
|
||||||
XMapWindow(ob_display, self->icon);
|
XMapWindow(ob_display, self->icon);
|
||||||
} else if (self->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR &&
|
} else if (self->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR &&
|
||||||
self->entry->data.normal.mask)
|
self->entry->data.normal.mask)
|
||||||
{
|
{
|
||||||
RrColor *c;
|
RrColor *c;
|
||||||
|
|
||||||
XMoveResizeWindow(ob_display, self->icon, PADDING, 0,
|
XMoveResizeWindow(ob_display, self->icon,
|
||||||
self->frame->item_h,
|
PADDING, frame->item_margin.top,
|
||||||
self->frame->item_h);
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom,
|
||||||
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom);
|
||||||
self->a_mask->texture[0].data.mask.mask =
|
self->a_mask->texture[0].data.mask.mask =
|
||||||
self->entry->data.normal.mask;
|
self->entry->data.normal.mask;
|
||||||
|
|
||||||
|
@ -320,9 +330,12 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
|
||||||
|
|
||||||
self->a_mask->surface.parent = item_a;
|
self->a_mask->surface.parent = item_a;
|
||||||
self->a_mask->surface.parentx = PADDING;
|
self->a_mask->surface.parentx = PADDING;
|
||||||
self->a_mask->surface.parenty = 0;
|
self->a_mask->surface.parenty = frame->item_margin.top;
|
||||||
RrPaint(self->a_mask, self->icon,
|
RrPaint(self->a_mask, self->icon,
|
||||||
self->frame->item_h, self->frame->item_h);
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom,
|
||||||
|
self->frame->item_h - frame->item_margin.top
|
||||||
|
- frame->item_margin.bottom);
|
||||||
XMapWindow(ob_display, self->icon);
|
XMapWindow(ob_display, self->icon);
|
||||||
} else
|
} else
|
||||||
XUnmapWindow(ob_display, self->icon);
|
XUnmapWindow(ob_display, self->icon);
|
||||||
|
@ -382,13 +395,36 @@ static void menu_frame_render(ObMenuFrame *self)
|
||||||
|
|
||||||
XMoveWindow(ob_display, self->items, 0, h);
|
XMoveWindow(ob_display, self->items, 0, h);
|
||||||
|
|
||||||
|
STRUT_SET(self->item_margin, 0, 0, 0, 0);
|
||||||
|
|
||||||
if (self->entries) {
|
if (self->entries) {
|
||||||
ObMenuEntryFrame *e = self->entries->data;
|
ObMenuEntryFrame *e = self->entries->data;
|
||||||
|
gint l, t, r, b;
|
||||||
|
|
||||||
e->a_text_normal->texture[0].data.text.string = "";
|
e->a_text_normal->texture[0].data.text.string = "";
|
||||||
RrMinsize(e->a_text_normal, &tw, &th);
|
RrMinsize(e->a_text_normal, &tw, &th);
|
||||||
tw += 2*PADDING;
|
tw += 2*PADDING;
|
||||||
th += 2*PADDING;
|
th += 2*PADDING;
|
||||||
self->item_h = th;
|
self->item_h = th;
|
||||||
|
|
||||||
|
RrMargins(e->a_normal, &l, &t, &r, &b);
|
||||||
|
STRUT_SET(self->item_margin,
|
||||||
|
MAX(self->item_margin.left, l),
|
||||||
|
MAX(self->item_margin.top, t),
|
||||||
|
MAX(self->item_margin.right, r),
|
||||||
|
MAX(self->item_margin.bottom, b));
|
||||||
|
RrMargins(e->a_selected, &l, &t, &r, &b);
|
||||||
|
STRUT_SET(self->item_margin,
|
||||||
|
MAX(self->item_margin.left, l),
|
||||||
|
MAX(self->item_margin.top, t),
|
||||||
|
MAX(self->item_margin.right, r),
|
||||||
|
MAX(self->item_margin.bottom, b));
|
||||||
|
RrMargins(e->a_disabled, &l, &t, &r, &b);
|
||||||
|
STRUT_SET(self->item_margin,
|
||||||
|
MAX(self->item_margin.left, l),
|
||||||
|
MAX(self->item_margin.top, t),
|
||||||
|
MAX(self->item_margin.right, r),
|
||||||
|
MAX(self->item_margin.bottom, b));
|
||||||
} else
|
} else
|
||||||
self->item_h = 0;
|
self->item_h = 0;
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ struct _ObMenuFrame
|
||||||
|
|
||||||
/* On-screen area (including borders!) */
|
/* On-screen area (including borders!) */
|
||||||
Rect area;
|
Rect area;
|
||||||
|
Strut item_margin;
|
||||||
gint inner_w; /* inside the borders */
|
gint inner_w; /* inside the borders */
|
||||||
gint title_h; /* includes the bwidth below it */
|
gint title_h; /* includes the bwidth below it */
|
||||||
gint item_h; /* height of all normal items */
|
gint item_h; /* height of all normal items */
|
||||||
|
|
Loading…
Reference in a new issue