mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
theme: Parse window radiuses from CSS
This requires a local hack to GTK+ that's ugly and I'm not sharing it. We'll do things properly soon enough.
This commit is contained in:
parent
fef2a061a8
commit
cc3be6da4d
@ -685,41 +685,6 @@ parse_boolean (const char *str,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
parse_rounding (const char *str,
|
||||
guint *val,
|
||||
GMarkupParseContext *context,
|
||||
MetaTheme *theme,
|
||||
GError **error)
|
||||
{
|
||||
if (strcmp ("true", str) == 0)
|
||||
*val = 5; /* historical "true" value */
|
||||
else if (strcmp ("false", str) == 0)
|
||||
*val = 0;
|
||||
else
|
||||
{
|
||||
int tmp;
|
||||
gboolean result;
|
||||
if (!META_THEME_ALLOWS (theme, META_THEME_VARIED_ROUND_CORNERS))
|
||||
{
|
||||
/* Not known in this version, so bail. */
|
||||
set_error (error, context, G_MARKUP_ERROR,
|
||||
G_MARKUP_ERROR_PARSE,
|
||||
_("Boolean values must be \"true\" or \"false\" not \"%s\""),
|
||||
str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
result = parse_positive_integer (str, &tmp, context, theme, error);
|
||||
|
||||
*val = tmp;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
parse_angle (const char *str,
|
||||
double *val,
|
||||
@ -961,16 +926,8 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
const char *parent = NULL;
|
||||
const char *has_title = NULL;
|
||||
const char *title_scale = NULL;
|
||||
const char *rounded_top_left = NULL;
|
||||
const char *rounded_top_right = NULL;
|
||||
const char *rounded_bottom_left = NULL;
|
||||
const char *rounded_bottom_right = NULL;
|
||||
const char *hide_buttons = NULL;
|
||||
gboolean has_title_val;
|
||||
guint rounded_top_left_val;
|
||||
guint rounded_top_right_val;
|
||||
guint rounded_bottom_left_val;
|
||||
guint rounded_bottom_right_val;
|
||||
gboolean hide_buttons_val;
|
||||
double title_scale_val;
|
||||
MetaFrameLayout *parent_layout;
|
||||
@ -979,10 +936,6 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
error,
|
||||
"!name", &name, "parent", &parent,
|
||||
"has_title", &has_title, "title_scale", &title_scale,
|
||||
"rounded_top_left", &rounded_top_left,
|
||||
"rounded_top_right", &rounded_top_right,
|
||||
"rounded_bottom_left", &rounded_bottom_left,
|
||||
"rounded_bottom_right", &rounded_bottom_right,
|
||||
"hide_buttons", &hide_buttons,
|
||||
NULL))
|
||||
return;
|
||||
@ -995,20 +948,6 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
if (hide_buttons && !parse_boolean (hide_buttons, &hide_buttons_val, context, error))
|
||||
return;
|
||||
|
||||
rounded_top_left_val = 0;
|
||||
rounded_top_right_val = 0;
|
||||
rounded_bottom_left_val = 0;
|
||||
rounded_bottom_right_val = 0;
|
||||
|
||||
if (rounded_top_left && !parse_rounding (rounded_top_left, &rounded_top_left_val, context, info->theme, error))
|
||||
return;
|
||||
if (rounded_top_right && !parse_rounding (rounded_top_right, &rounded_top_right_val, context, info->theme, error))
|
||||
return;
|
||||
if (rounded_bottom_left && !parse_rounding (rounded_bottom_left, &rounded_bottom_left_val, context, info->theme, error))
|
||||
return;
|
||||
if (rounded_bottom_right && !parse_rounding (rounded_bottom_right, &rounded_bottom_right_val, context, info->theme, error))
|
||||
return;
|
||||
|
||||
title_scale_val = 1.0;
|
||||
if (title_scale && !parse_title_scale (title_scale, &title_scale_val, context, error))
|
||||
return;
|
||||
@ -1050,18 +989,6 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
if (title_scale)
|
||||
info->layout->title_scale = title_scale_val;
|
||||
|
||||
if (rounded_top_left)
|
||||
info->layout->top_left_corner_rounded_radius = rounded_top_left_val;
|
||||
|
||||
if (rounded_top_right)
|
||||
info->layout->top_right_corner_rounded_radius = rounded_top_right_val;
|
||||
|
||||
if (rounded_bottom_left)
|
||||
info->layout->bottom_left_corner_rounded_radius = rounded_bottom_left_val;
|
||||
|
||||
if (rounded_bottom_right)
|
||||
info->layout->bottom_right_corner_rounded_radius = rounded_bottom_right_val;
|
||||
|
||||
meta_theme_insert_layout (info->theme, name, info->layout);
|
||||
|
||||
push_state (info, STATE_FRAME_GEOMETRY);
|
||||
|
@ -188,15 +188,6 @@ struct _MetaFrameLayout
|
||||
|
||||
/** Whether we should hide the buttons */
|
||||
guint hide_buttons : 1;
|
||||
|
||||
/** Radius of the top left-hand corner; 0 if not rounded */
|
||||
guint top_left_corner_rounded_radius;
|
||||
/** Radius of the top right-hand corner; 0 if not rounded */
|
||||
guint top_right_corner_rounded_radius;
|
||||
/** Radius of the bottom left-hand corner; 0 if not rounded */
|
||||
guint bottom_left_corner_rounded_radius;
|
||||
/** Radius of the bottom right-hand corner; 0 if not rounded */
|
||||
guint bottom_right_corner_rounded_radius;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -531,6 +531,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
int width, height;
|
||||
int button_width, button_height;
|
||||
int min_size_for_rounding;
|
||||
double tl, tr, bl, br;
|
||||
|
||||
/* the left/right rects in order; the max # of rects
|
||||
* is the number of button functions
|
||||
@ -871,15 +872,22 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
fgeom->bottom_left_corner_rounded_radius = 0;
|
||||
fgeom->bottom_right_corner_rounded_radius = 0;
|
||||
|
||||
if (borders.visible.top + borders.visible.left >= min_size_for_rounding)
|
||||
fgeom->top_left_corner_rounded_radius = layout->top_left_corner_rounded_radius;
|
||||
if (borders.visible.top + borders.visible.right >= min_size_for_rounding)
|
||||
fgeom->top_right_corner_rounded_radius = layout->top_right_corner_rounded_radius;
|
||||
gtk_style_context_get (ctx,
|
||||
GTK_STATE_ACTIVE,
|
||||
"border-top-left-radius", &tl,
|
||||
"border-top-right-radius", &tr,
|
||||
"border-bottom-left-radius", &bl,
|
||||
"border-bottom-right-radius", &br,
|
||||
NULL);
|
||||
|
||||
if (borders.visible.top + borders.visible.left >= min_size_for_rounding)
|
||||
fgeom->top_left_corner_rounded_radius = tl;
|
||||
if (borders.visible.top + borders.visible.right >= min_size_for_rounding)
|
||||
fgeom->top_right_corner_rounded_radius = tr;
|
||||
if (borders.visible.bottom + borders.visible.left >= min_size_for_rounding)
|
||||
fgeom->bottom_left_corner_rounded_radius = layout->bottom_left_corner_rounded_radius;
|
||||
fgeom->bottom_left_corner_rounded_radius = bl;
|
||||
if (borders.visible.bottom + borders.visible.right >= min_size_for_rounding)
|
||||
fgeom->bottom_right_corner_rounded_radius = layout->bottom_right_corner_rounded_radius;
|
||||
fgeom->bottom_right_corner_rounded_radius = br;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user