[mutter/wip/cb2eb3: 35/55] theme: Calculate frame geometry borders from CSS
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/cb2eb3: 35/55] theme: Calculate frame geometry borders from CSS
- Date: Wed, 1 Oct 2014 15:50:22 +0000 (UTC)
commit 02bb550bd629fd7dfe2372f7bfc9878cb2336699
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sun Apr 29 15:23:41 2012 -0400
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 f06326a..4e43b46 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 a411e8a..857aa43 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 3825e22..6769046 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 26decab..7549a1e 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 a931899..45a3123 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 bb1e769..6fb01a6 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]