[mutter/wip/fmuellner/theme-updates: 10/12] theme: Support margins on titlebar title/buttons



commit 2b2086b21e9b871c5c5ae9c3be0a062387af1000
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Jan 14 17:32:46 2016 +0100

    theme: Support margins on titlebar title/buttons
    
    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.

 src/ui/theme-private.h |    5 +++++
 src/ui/theme.c         |   32 +++++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 3 deletions(-)
---
diff --git a/src/ui/theme-private.h b/src/ui/theme-private.h
index ea3c532..c27c3f9 100644
--- a/src/ui/theme-private.h
+++ b/src/ui/theme-private.h
@@ -60,6 +60,11 @@ struct _MetaFrameLayout
   /** Border/padding of titlebar buttons */
   GtkBorder button_border;
 
+  /** 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/src/ui/theme.c b/src/ui/theme.c
index 712a841..b844e56 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -79,9 +79,12 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout,
 
   if (!layout->has_title)
     text_height = 0;
+  else
+    text_height = layout->title_margin.top + text_height + layout->title_margin.bottom;
 
   buttons_height = MAX (layout->icon_size, layout->button_min_size.height) +
-    layout->button_border.top + layout->button_border.bottom;
+    layout->button_margin.top + layout->button_border.top +
+    layout->button_margin.bottom + layout->button_border.bottom;
   content_height = MAX (buttons_height, text_height);
   content_height = MAX (content_height, layout->titlebar_min_size.height) +
                    layout->titlebar_border.top + layout->titlebar_border.bottom;
@@ -297,10 +300,18 @@ meta_frame_layout_sync_with_style (MetaFrameLayout *layout,
   get_padding_and_border (style, &layout->titlebar_border);
   scale_border (&layout->titlebar_border, layout->title_scale);
 
+  style = style_info->styles[META_STYLE_ELEMENT_TITLE];
+  gtk_style_context_get_margin (style, gtk_style_context_get_state (style),
+                                &layout->title_margin);
+  scale_border (&layout->title_margin, layout->title_scale);
+
   style = style_info->styles[META_STYLE_ELEMENT_BUTTON];
   get_min_size (style, &layout->button_min_size);
   get_padding_and_border (style, &layout->button_border);
   scale_border (&layout->button_border, layout->title_scale);
+  gtk_style_context_get_margin (style, gtk_style_context_get_state (style),
+                                &layout->button_margin);
+  scale_border (&layout->button_margin, layout->title_scale);
 
   style = style_info->styles[META_STYLE_ELEMENT_IMAGE];
   get_min_size (style, &requisition);
@@ -312,6 +323,13 @@ meta_frame_layout_sync_with_style (MetaFrameLayout *layout,
   layout->button_border.top += border.top;
   layout->button_border.bottom += border.bottom;
 
+  gtk_style_context_get_margin (style, gtk_style_context_get_state (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->button_min_size.width = MAX(layout->button_min_size.width,
                                       requisition.width);
   layout->button_min_size.height = MAX(layout->button_min_size.height,
@@ -442,11 +460,15 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
 
       space_used_by_buttons = 0;
 
+      space_used_by_buttons += layout->button_margin.left * scale * n_left;
       space_used_by_buttons += button_width * n_left;
+      space_used_by_buttons += layout->button_margin.right * scale * n_left;
       space_used_by_buttons += (button_width * 0.75) * n_left_spacers;
       space_used_by_buttons += layout->titlebar_spacing * scale * MAX (n_left - 1, 0);
 
+      space_used_by_buttons += layout->button_margin.left * scale * n_right;
       space_used_by_buttons += button_width * n_right;
+      space_used_by_buttons += layout->button_margin.right * scale * n_right;
       space_used_by_buttons += (button_width * 0.75) * n_right_spacers;
       space_used_by_buttons += layout->titlebar_spacing * scale * MAX (n_right - 1, 0);
 
@@ -516,6 +538,8 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
       if (x < 0) /* if we go negative, leave the buttons we don't get to as 0-width */
         break;
 
+      x -= layout->button_margin.right * scale;
+
       rect = right_func_rects[i];
       rect->visible.x = x - button_width;
       if (right_buttons_has_spacer[i])
@@ -541,7 +565,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
       else
         g_memmove (&(rect->clickable), &(rect->visible), sizeof(rect->clickable));
 
-      x = rect->visible.x;
+      x = rect->visible.x - layout->button_margin.left * scale;
 
       if (i > 0)
         x -= layout->titlebar_spacing;
@@ -560,6 +584,8 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
     {
       MetaButtonSpace *rect;
 
+      x += layout->button_margin.left * scale;
+
       rect = left_func_rects[i];
 
       rect->visible.x = x;
@@ -586,7 +612,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
       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->button_margin.right * scale;
       if (i < n_left - 1)
         x += layout->titlebar_spacing * scale;
       if (left_buttons_has_spacer[i])


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]