diff --git a/doc/theme-format.txt b/doc/theme-format.txt index bb79d4534..cefc31627 100644 --- a/doc/theme-format.txt +++ b/doc/theme-format.txt @@ -22,6 +22,16 @@ This document has separate sections for each format version. You may want to read the document in reverse order, since the base features are discussed under version 1. +New Features in Theme Format Version 3.1 +======================================== + +Additional predefined variables are added for positioning expressions: + + frame_x_center: the X center of the entire frame, with respect to the + piece currently being drawn. + frame_y_center: the Y center of the entire frame, with respect to the + piece currently being drawn. + New Features in Theme Format Version 3 ====================================== diff --git a/src/ui/theme-parser.c b/src/ui/theme-parser.c index 9dad99fbd..b2d8bf77d 100644 --- a/src/ui/theme-parser.c +++ b/src/ui/theme-parser.c @@ -38,7 +38,7 @@ * look out for. */ #define THEME_MAJOR_VERSION 3 -#define THEME_MINOR_VERSION 0 +#define THEME_MINOR_VERSION 1 #define THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION) #define METACITY_THEME_FILENAME_FORMAT "metacity-theme-%d.xml" diff --git a/src/ui/theme.c b/src/ui/theme.c index 0bb43655a..367423371 100644 --- a/src/ui/theme.c +++ b/src/ui/theme.c @@ -2188,6 +2188,10 @@ pos_eval_get_variable (PosToken *t, *result = env->title_width; else if (t->d.v.name_quark == env->theme->quark_title_height) *result = env->title_height; + else if (t->d.v.name_quark == env->theme->quark_frame_x_center) + *result = env->frame_x_center; + else if (t->d.v.name_quark == env->theme->quark_frame_y_center) + *result = env->frame_y_center; else { g_set_error (err, META_THEME_ERROR, @@ -2229,6 +2233,10 @@ pos_eval_get_variable (PosToken *t, *result = env->title_width; else if (strcmp (t->d.v.name, "title_height") == 0) *result = env->title_height; + else if (strcmp (t->d.v.name, "frame_x_center") == 0) + *result = env->frame_x_center; + else if (strcmp (t->d.v.name, "frame_y_center") == 0) + *result = env->frame_y_center; else { g_set_error (err, META_THEME_ERROR, @@ -3437,6 +3445,8 @@ fill_env (MetaPositionExprEnv *env, env->right_width = info->fgeom->right_width; env->top_height = info->fgeom->top_height; env->bottom_height = info->fgeom->bottom_height; + env->frame_x_center = info->fgeom->width / 2 - logical_region.x; + env->frame_y_center = info->fgeom->height / 2 - logical_region.y; } else { @@ -3444,6 +3454,8 @@ fill_env (MetaPositionExprEnv *env, env->right_width = 0; env->top_height = 0; env->bottom_height = 0; + env->frame_x_center = 0; + env->frame_y_center = 0; } env->mini_icon_width = info->mini_icon ? gdk_pixbuf_get_width (info->mini_icon) : 0; @@ -4845,6 +4857,8 @@ meta_theme_new (void) theme->quark_icon_height = g_quark_from_static_string ("icon_height"); theme->quark_title_width = g_quark_from_static_string ("title_width"); theme->quark_title_height = g_quark_from_static_string ("title_height"); + theme->quark_frame_x_center = g_quark_from_static_string ("frame_x_center"); + theme->quark_frame_y_center = g_quark_from_static_string ("frame_y_center"); return theme; } diff --git a/src/ui/theme.h b/src/ui/theme.h index ddf777d4d..02a61566a 100644 --- a/src/ui/theme.h +++ b/src/ui/theme.h @@ -819,6 +819,8 @@ struct _MetaTheme GQuark quark_icon_height; GQuark quark_title_width; GQuark quark_title_height; + GQuark quark_frame_x_center; + GQuark quark_frame_y_center; }; struct _MetaPositionExprEnv @@ -834,6 +836,8 @@ struct _MetaPositionExprEnv int bottom_height; int title_width; int title_height; + int frame_x_center; + int frame_y_center; int mini_icon_width; int mini_icon_height; int icon_width;