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.
This commit is contained in:
Jasper St. Pierre
2012-04-29 15:23:41 -04:00
parent 8f789a8fad
commit 02bb550bd6
6 changed files with 29 additions and 53 deletions

View File

@@ -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);

View File

@@ -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,

View File

@@ -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;

View File

@@ -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,

View File

@@ -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),

View File

@@ -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);