Skip to content

Commit

Permalink
Add frame_x_center/frame_y_center variables for themes
Browse files Browse the repository at this point in the history
Sometimes you want to position something (usually the title) to be centered
with respect to the entire frame instead of centered with respect to the
individual piece currently being drawn.

This patch adds frame_x_center and frame_y_center variables that represent
the X/Y centers of the frame in the coordinate system of the piece being
drawn.

The theme version is bumped from 3.0 to 3.1 (3.0 is just the new version
system, 3.1 will have all the features we add for Mutter-2.28.)
position expressions

https://bugzilla.gnome.org/show_bug.cgi?id=591842

NOTE: Patch is copied from mutter and is adapted for metacity.
  • Loading branch information
owtaylor authored and vkareh committed Aug 28, 2018
1 parent ed3004d commit 728f002
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 1 deletion.
10 changes: 10 additions & 0 deletions doc/theme-format.txt
Expand Up @@ -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 want to read the document in reverse order, since the base features
are discussed under version 1. 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 New Features in Theme Format Version 3
====================================== ======================================


Expand Down
2 changes: 1 addition & 1 deletion src/ui/theme-parser.c
Expand Up @@ -38,7 +38,7 @@
* look out for. * look out for.
*/ */
#define THEME_MAJOR_VERSION 3 #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 THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION)


#define MARCO_THEME_FILENAME_FORMAT "metacity-theme-%d.xml" #define MARCO_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"
Expand Down
14 changes: 14 additions & 0 deletions src/ui/theme.c
Expand Up @@ -2312,6 +2312,10 @@ pos_eval_get_variable (PosToken *t,
*result = env->title_width; *result = env->title_width;
else if (t->d.v.name_quark == env->theme->quark_title_height) else if (t->d.v.name_quark == env->theme->quark_title_height)
*result = env->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 else
{ {
g_set_error (err, META_THEME_ERROR, g_set_error (err, META_THEME_ERROR,
Expand Down Expand Up @@ -2353,6 +2357,10 @@ pos_eval_get_variable (PosToken *t,
*result = env->title_width; *result = env->title_width;
else if (strcmp (t->d.v.name, "title_height") == 0) else if (strcmp (t->d.v.name, "title_height") == 0)
*result = env->title_height; *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 else
{ {
g_set_error (err, META_THEME_ERROR, g_set_error (err, META_THEME_ERROR,
Expand Down Expand Up @@ -3485,13 +3493,17 @@ fill_env (MetaPositionExprEnv *env,
env->right_width = info->fgeom->right_width; env->right_width = info->fgeom->right_width;
env->top_height = info->fgeom->top_height; env->top_height = info->fgeom->top_height;
env->bottom_height = info->fgeom->bottom_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 else
{ {
env->left_width = 0; env->left_width = 0;
env->right_width = 0; env->right_width = 0;
env->top_height = 0; env->top_height = 0;
env->bottom_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; env->mini_icon_width = info->mini_icon ? gdk_pixbuf_get_width (info->mini_icon) : 0;
Expand Down Expand Up @@ -5047,6 +5059,8 @@ meta_theme_new (void)
theme->quark_icon_height = g_quark_from_static_string ("icon_height"); 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_width = g_quark_from_static_string ("title_width");
theme->quark_title_height = g_quark_from_static_string ("title_height"); 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; return theme;
} }


Expand Down
4 changes: 4 additions & 0 deletions src/ui/theme.h
Expand Up @@ -830,6 +830,8 @@ struct _MetaTheme
GQuark quark_icon_height; GQuark quark_icon_height;
GQuark quark_title_width; GQuark quark_title_width;
GQuark quark_title_height; GQuark quark_title_height;
GQuark quark_frame_x_center;
GQuark quark_frame_y_center;
}; };


struct _MetaPositionExprEnv struct _MetaPositionExprEnv
Expand All @@ -845,6 +847,8 @@ struct _MetaPositionExprEnv
int bottom_height; int bottom_height;
int title_width; int title_width;
int title_height; int title_height;
int frame_x_center;
int frame_y_center;
int mini_icon_width; int mini_icon_width;
int mini_icon_height; int mini_icon_height;
int icon_width; int icon_width;
Expand Down

0 comments on commit 728f002

Please sign in to comment.