[metacity] libmetacity: support margins on titlebar title/buttons in GTK+ theme
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] libmetacity: support margins on titlebar title/buttons in GTK+ theme
- Date: Sun, 7 Feb 2016 16:31:41 +0000 (UTC)
commit 6b030c99c53378932a02989ebb7aedd977aef9bc
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Feb 7 16:22:54 2016 +0200
libmetacity: support margins on titlebar title/buttons in GTK+ theme
GTK+ improved its CSS support, and the default theme started to
make use of it, so we must update our theming code accordingly.
Add support for margins where they make sense.
Adapted from:
https://git.gnome.org/browse/mutter/commit/?id=e0ffef06dd810ff5acb54605f05f95133541151b
libmetacity/meta-frame-layout.h | 5 +++++
libmetacity/meta-theme-gtk.c | 32 +++++++++++++++++++++++++++++---
2 files changed, 34 insertions(+), 3 deletions(-)
---
diff --git a/libmetacity/meta-frame-layout.h b/libmetacity/meta-frame-layout.h
index a03d4aa..3bff203 100644
--- a/libmetacity/meta-frame-layout.h
+++ b/libmetacity/meta-frame-layout.h
@@ -66,6 +66,11 @@ struct _MetaFrameLayout
/** Space between titlebar elements */
guint titlebar_spacing;
+ /** Margin of title */
+ GtkBorder title_margin;
+ /** Margin of titlebar buttons */
+ GtkBorder button_margin;
+
/** Min size of titlebar region */
GtkRequisition titlebar_min_size;
/** Min size of titlebar buttons */
diff --git a/libmetacity/meta-theme-gtk.c b/libmetacity/meta-theme-gtk.c
index fa756ee..05d5b6a 100644
--- a/libmetacity/meta-theme-gtk.c
+++ b/libmetacity/meta-theme-gtk.c
@@ -260,11 +260,18 @@ frame_layout_sync_with_style (MetaFrameLayout *layout,
get_padding_and_border (style, &layout->gtk.titlebar_border);
scale_border (&layout->gtk.titlebar_border, layout->title_scale);
+ style = style_info->styles[META_STYLE_ELEMENT_TITLE];
+ get_margin (style, &layout->gtk.title_margin);
+ scale_border (&layout->gtk.title_margin, layout->title_scale);
+
style = style_info->styles[META_STYLE_ELEMENT_BUTTON];
get_min_size (style, &layout->gtk.button_min_size);
get_padding_and_border (style, &layout->button_border);
scale_border (&layout->button_border, layout->title_scale);
+ get_margin (style, &layout->gtk.button_margin);
+ scale_border (&layout->gtk.button_margin, layout->title_scale);
+
style = style_info->styles[META_STYLE_ELEMENT_IMAGE];
get_min_size (style, &requisition);
get_padding_and_border (style, &border);
@@ -275,6 +282,12 @@ frame_layout_sync_with_style (MetaFrameLayout *layout,
layout->button_border.top += border.top;
layout->button_border.bottom += border.bottom;
+ get_margin (style, &border);
+ layout->button_border.left += border.left;
+ layout->button_border.right += border.right;
+ layout->button_border.top += border.top;
+ layout->button_border.bottom += border.bottom;
+
layout->gtk.button_min_size.width = MAX (layout->gtk.button_min_size.width,
requisition.width);
layout->gtk.button_min_size.height = MAX (layout->gtk.button_min_size.height,
@@ -306,9 +319,14 @@ meta_theme_gtk_get_frame_borders (MetaThemeImpl *impl,
if (!layout->has_title)
text_height = 0;
+ else
+ text_height = layout->gtk.title_margin.top +
+ text_height +
+ layout->gtk.title_margin.bottom;
buttons_height = MAX ((gint) layout->gtk.icon_size, layout->gtk.button_min_size.height) +
- layout->button_border.top + layout->button_border.bottom;
+ layout->gtk.button_margin.top + layout->button_border.top +
+ layout->gtk.button_margin.bottom + layout->button_border.bottom;
content_height = MAX (buttons_height, text_height);
content_height = MAX (content_height, layout->gtk.titlebar_min_size.height) +
@@ -578,11 +596,15 @@ meta_theme_gtk_calc_geometry (MetaThemeImpl *impl,
space_used_by_buttons = 0;
+ space_used_by_buttons += layout->gtk.button_margin.left /** scale*/ * n_left;
space_used_by_buttons += button_width * n_left;
+ space_used_by_buttons += layout->gtk.button_margin.right /** scale*/ * n_left;
space_used_by_buttons += (button_width * 0.75) * n_left_spacers;
space_used_by_buttons += layout->gtk.titlebar_spacing * MAX (n_left - 1, 0);
+ space_used_by_buttons += layout->gtk.button_margin.left /** scale*/ * n_right;
space_used_by_buttons += button_width * n_right;
+ space_used_by_buttons += layout->gtk.button_margin.right /** scale*/ * n_right;
space_used_by_buttons += (button_width * 0.75) * n_right_spacers;
space_used_by_buttons += layout->gtk.titlebar_spacing * MAX (n_right - 1, 0);
@@ -664,6 +686,8 @@ meta_theme_gtk_calc_geometry (MetaThemeImpl *impl,
if (x < 0) /* if we go negative, leave the buttons we don't get to as 0-width */
break;
+ x -= layout->gtk.button_margin.right /** scale*/;
+
rect = right_func_rects[i];
rect->visible.x = x - button_width;
@@ -689,7 +713,7 @@ meta_theme_gtk_calc_geometry (MetaThemeImpl *impl,
else
g_memmove (&(rect->clickable), &(rect->visible), sizeof(rect->clickable));
- x = rect->visible.x;
+ x = rect->visible.x - layout->gtk.button_margin.left /** scale*/;
if (i > 0)
x -= layout->gtk.titlebar_spacing;
@@ -708,6 +732,8 @@ meta_theme_gtk_calc_geometry (MetaThemeImpl *impl,
{
MetaButtonSpace *rect;
+ x += layout->gtk.button_margin.left /** scale*/;
+
rect = left_func_rects[i];
rect->visible.x = x;
@@ -725,7 +751,7 @@ meta_theme_gtk_calc_geometry (MetaThemeImpl *impl,
else
g_memmove (&(rect->clickable), &(rect->visible), sizeof(rect->clickable));
- x = rect->visible.x + rect->visible.width;
+ x = rect->visible.x + rect->visible.width + layout->gtk.button_margin.right /** scale*/;
if (i < n_left - 1)
x += layout->gtk.titlebar_spacing;
if (left_buttons_has_spacer[i])
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]