From 02bb550bd629fd7dfe2372f7bfc9878cb2336699 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 29 Apr 2012 15:23:41 -0400 Subject: [PATCH] theme: Calculate frame geometry borders from CSS Use the CSS 'border' and 'padding' properties rather than frame geometry. This is a bit messy, so I'll fix it up with a new path representing the titlebar soon. --- src/ui/frames.c | 3 +++ src/ui/preview-widget.c | 1 + src/ui/theme-parser.c | 10 +-------- src/ui/theme-private.h | 18 ++------------- src/ui/theme-viewer.c | 1 + src/ui/theme.c | 49 ++++++++++++++++++----------------------- 6 files changed, 29 insertions(+), 53 deletions(-) diff --git a/src/ui/frames.c b/src/ui/frames.c index f06326a03..4e43b4620 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -680,6 +680,7 @@ meta_frames_get_borders (MetaFrames *frames, * window size */ meta_theme_get_frame_borders (frame->tv->theme, + frame->tv->style_context, type, frame->text_height, flags, @@ -1687,6 +1688,7 @@ populate_cache (MetaFrames *frames, } meta_theme_get_frame_borders (frame->tv->theme, + frame->tv->style_context, frame_type, frame->text_height, frame_flags, @@ -1803,6 +1805,7 @@ subtract_client_area (cairo_region_t *region, META_CORE_GET_CLIENT_HEIGHT, &area.height, META_CORE_GET_END); meta_theme_get_frame_borders (frame->tv->theme, + frame->tv->style_context, type, frame->text_height, flags, &borders); diff --git a/src/ui/preview-widget.c b/src/ui/preview-widget.c index a411e8a7f..857aa43fc 100644 --- a/src/ui/preview-widget.c +++ b/src/ui/preview-widget.c @@ -169,6 +169,7 @@ ensure_info (MetaPreview *preview) { if (preview->theme) meta_theme_get_frame_borders (preview->theme, + meta_theme_get_variant (preview->theme, NULL)->style_context, preview->type, preview->text_height, preview->flags, diff --git a/src/ui/theme-parser.c b/src/ui/theme-parser.c index 3825e22ac..6769046d4 100644 --- a/src/ui/theme-parser.c +++ b/src/ui/theme-parser.c @@ -1331,15 +1331,7 @@ parse_distance (GMarkupParseContext *context, g_assert (val >= 0); /* yeah, "non-negative" not "positive" get over it */ g_assert (info->layout); - if (strcmp (name, "left_width") == 0) - info->layout->left_width = val; - else if (strcmp (name, "right_width") == 0) - info->layout->right_width = val; - else if (strcmp (name, "bottom_height") == 0) - info->layout->bottom_height = val; - else if (strcmp (name, "title_vertical_pad") == 0) - info->layout->title_vertical_pad = val; - else if (strcmp (name, "right_titlebar_edge") == 0) + if (strcmp (name, "right_titlebar_edge") == 0) info->layout->right_titlebar_edge = val; else if (strcmp (name, "left_titlebar_edge") == 0) info->layout->left_titlebar_edge = val; diff --git a/src/ui/theme-private.h b/src/ui/theme-private.h index 26decab97..7549a1e15 100644 --- a/src/ui/theme-private.h +++ b/src/ui/theme-private.h @@ -134,22 +134,12 @@ struct _MetaFrameLayout { /** Reference count. */ int refcount; - - /** Size of left side */ - int left_width; - /** Size of right side */ - int right_width; - /** Size of bottom side */ - int bottom_height; - + /** Border of blue title region * \bug (blue?!) **/ GtkBorder title_border; - /** Extra height for inside of title region, above the font height */ - int title_vertical_pad; - /** Right indent of buttons from edges of frame */ int right_titlebar_edge; /** Left indent of buttons from edges of frame */ @@ -918,11 +908,6 @@ MetaFrameLayout* meta_frame_layout_new (void); MetaFrameLayout* meta_frame_layout_copy (const MetaFrameLayout *src); void meta_frame_layout_ref (MetaFrameLayout *layout); void meta_frame_layout_unref (MetaFrameLayout *layout); -void meta_frame_layout_get_borders (const MetaFrameLayout *layout, - int text_height, - MetaFrameFlags flags, - MetaFrameType type, - MetaFrameBorders *borders); gboolean meta_frame_layout_validate (const MetaFrameLayout *layout, GError **error); @@ -1058,6 +1043,7 @@ void meta_theme_draw_frame_with_style (MetaTheme *theme, GdkPixbuf *icon); void meta_theme_get_frame_borders (MetaTheme *theme, + GtkStyleContext *style_context, MetaFrameType type, int text_height, MetaFrameFlags flags, diff --git a/src/ui/theme-viewer.c b/src/ui/theme-viewer.c index a931899a9..45a31234b 100644 --- a/src/ui/theme-viewer.c +++ b/src/ui/theme-viewer.c @@ -975,6 +975,7 @@ run_theme_benchmark (void) gtk_widget_realize (widget); meta_theme_get_frame_borders (global_theme, + meta_theme_get_variant (global_theme, NULL)->style_context, META_FRAME_TYPE_NORMAL, get_text_height (widget), get_flags (widget), diff --git a/src/ui/theme.c b/src/ui/theme.c index bb1e769fc..6fb01a6ab 100644 --- a/src/ui/theme.c +++ b/src/ui/theme.c @@ -118,15 +118,8 @@ meta_frame_layout_new (void) layout->refcount = 1; - /* Fill with -1 values to detect invalid themes */ - layout->left_width = -1; - layout->right_width = -1; - layout->bottom_height = -1; - init_border (&layout->title_border); - layout->title_vertical_pad = -1; - layout->right_titlebar_edge = -1; layout->left_titlebar_edge = -1; @@ -221,14 +214,8 @@ meta_frame_layout_validate (const MetaFrameLayout *layout, #define CHECK_GEOMETRY_BORDER(bname) if (!validate_geometry_border (&layout->bname, #bname, error)) return FALSE - CHECK_GEOMETRY_VALUE (left_width); - CHECK_GEOMETRY_VALUE (right_width); - CHECK_GEOMETRY_VALUE (bottom_height); - CHECK_GEOMETRY_BORDER (title_border); - CHECK_GEOMETRY_VALUE (title_vertical_pad); - CHECK_GEOMETRY_VALUE (right_titlebar_edge); CHECK_GEOMETRY_VALUE (left_titlebar_edge); @@ -311,15 +298,17 @@ get_style_flags (MetaFrameFlags flags) return gtk_flags; } -void +static void meta_frame_layout_get_borders (const MetaFrameLayout *layout, + GtkStyleContext *style_context, int text_height, MetaFrameFlags flags, MetaFrameType type, MetaFrameBorders *borders) { - int buttons_height, title_height, draggable_borders; - + int draggable_borders; + GtkBorder padding; + meta_frame_borders_clear (borders); /* For a full-screen window, we don't have any borders, visible or not. */ @@ -330,17 +319,19 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout, if (!layout->has_title) text_height = 0; - - buttons_height = layout->button_height + - layout->button_border.top + layout->button_border.bottom; - title_height = text_height + - layout->title_vertical_pad + - layout->title_border.top + layout->title_border.bottom; - borders->visible.top = MAX (buttons_height, title_height); - borders->visible.left = layout->left_width; - borders->visible.right = layout->right_width; - borders->visible.bottom = layout->bottom_height; + gtk_style_context_get_border (style_context, + get_style_flags (flags), + &borders->visible); + + gtk_style_context_get_padding (style_context, + get_style_flags (flags), + &padding); + + borders->visible.left += padding.left; + borders->visible.right += padding.right; + borders->visible.top += padding.top; + borders->visible.bottom += padding.bottom; draggable_borders = meta_prefs_get_draggable_border_width (); @@ -556,7 +547,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, MetaFrameBorders borders; - meta_frame_layout_get_borders (layout, text_height, + meta_frame_layout_get_borders (layout, ctx, text_height, flags, type, &borders); @@ -800,7 +791,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout, rect->clickable.height = button_height + button_y; if (i == n_right - 1) - rect->clickable.width += layout->right_titlebar_edge + layout->right_width + layout->button_border.right; + rect->clickable.width += layout->right_titlebar_edge + borders.visible.right + layout->button_border.right; } else @@ -5119,6 +5110,7 @@ meta_theme_draw_frame (MetaTheme *theme, void meta_theme_get_frame_borders (MetaTheme *theme, + GtkStyleContext *style_context, MetaFrameType type, int text_height, MetaFrameFlags flags, @@ -5137,6 +5129,7 @@ meta_theme_get_frame_borders (MetaTheme *theme, return; meta_frame_layout_get_borders (style->layout, + style_context, text_height, flags, type, borders);