summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2016-02-07 15:55:45 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2016-02-07 18:29:48 +0200
commit46170e5d0993238f0e6e84b0940fc80b84e2d14a (patch)
tree5427a23366c4f533dad9b74442d35859c88020a2
parenta75484ee331504a9902ee565e619c09472721af3 (diff)
downloadmetacity-46170e5d0993238f0e6e84b0940fc80b84e2d14a.tar.gz
libmetacity: consider minimum sizes 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. Start by supporting min-width/min-height where it makes sense. Adapted from: https://git.gnome.org/browse/mutter/commit/?id=d5b69bcd542b759af661de2caa5a0e7fe6901e9f
-rw-r--r--libmetacity/meta-frame-layout.h5
-rw-r--r--libmetacity/meta-theme-gtk.c30
2 files changed, 30 insertions, 5 deletions
diff --git a/libmetacity/meta-frame-layout.h b/libmetacity/meta-frame-layout.h
index 934c65b2..a03d4aa7 100644
--- a/libmetacity/meta-frame-layout.h
+++ b/libmetacity/meta-frame-layout.h
@@ -65,6 +65,11 @@ struct _MetaFrameLayout
/** Space between titlebar elements */
guint titlebar_spacing;
+
+ /** Min size of titlebar region */
+ GtkRequisition titlebar_min_size;
+ /** Min size of titlebar buttons */
+ GtkRequisition button_min_size;
} gtk;
struct {
diff --git a/libmetacity/meta-theme-gtk.c b/libmetacity/meta-theme-gtk.c
index 31ba274d..fa756ee9 100644
--- a/libmetacity/meta-theme-gtk.c
+++ b/libmetacity/meta-theme-gtk.c
@@ -173,6 +173,16 @@ get_padding_and_border (GtkStyleContext *style,
}
static void
+get_min_size (GtkStyleContext *style,
+ GtkRequisition *requisition)
+{
+ gtk_style_context_get (style, gtk_style_context_get_state (style),
+ "min-width", &requisition->width,
+ "min-height", &requisition->height,
+ NULL);
+}
+
+static void
scale_border (GtkBorder *border,
double factor)
{
@@ -190,6 +200,7 @@ frame_layout_sync_with_style (MetaFrameLayout *layout,
{
GtkStyleContext *style;
GtkBorder border;
+ GtkRequisition requisition;
int border_radius, max_radius;
meta_style_info_set_flags (style_info, flags);
@@ -245,14 +256,17 @@ frame_layout_sync_with_style (MetaFrameLayout *layout,
layout->bottom_right_corner_rounded_radius = MAX (border_radius, max_radius);
}
+ get_min_size (style, &layout->gtk.titlebar_min_size);
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_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);
style = style_info->styles[META_STYLE_ELEMENT_IMAGE];
+ get_min_size (style, &requisition);
get_padding_and_border (style, &border);
scale_border (&border, layout->title_scale);
@@ -260,6 +274,11 @@ frame_layout_sync_with_style (MetaFrameLayout *layout,
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,
+ requisition.height);
}
static void
@@ -288,10 +307,11 @@ meta_theme_gtk_get_frame_borders (MetaThemeImpl *impl,
if (!layout->has_title)
text_height = 0;
- buttons_height = layout->gtk.icon_size +
- layout->button_border.top + layout->button_border.bottom;
+ buttons_height = MAX ((gint) layout->gtk.icon_size, layout->gtk.button_min_size.height) +
+ layout->button_border.top + layout->button_border.bottom;
- content_height = MAX (buttons_height, text_height) +
+ content_height = MAX (buttons_height, text_height);
+ content_height = MAX (content_height, layout->gtk.titlebar_min_size.height) +
layout->gtk.titlebar_border.top +
layout->gtk.titlebar_border.bottom;
@@ -499,9 +519,9 @@ meta_theme_gtk_calc_geometry (MetaThemeImpl *impl,
(fgeom->content_border.right + borders.invisible.right);
content_height = borders.visible.top - fgeom->content_border.top - fgeom->content_border.bottom;
- button_width = layout->gtk.icon_size +
+ button_width = MAX ((gint) layout->gtk.icon_size, layout->gtk.button_min_size.width) +
layout->button_border.left + layout->button_border.right;
- button_height = layout->gtk.icon_size +
+ button_height = MAX ((gint) layout->gtk.icon_size, layout->gtk.button_min_size.height) +
layout->button_border.top + layout->button_border.bottom;
/* FIXME all this code sort of pretends that duplicate buttons