frames: Use title style to set up title layout

Sounds obvious, doesn't it?

After this change when titlebar-uses-system-font is set, the "system
font" used will not be a generic one, but match what GTK+ uses in
client-side decorations.

https://bugzilla.gnome.org/show_bug.cgi?id=741917
This commit is contained in:
Florian Müllner 2014-09-25 06:44:45 +02:00 committed by Jasper St. Pierre
parent 2db71e73b4
commit 89a371ec98
4 changed files with 36 additions and 67 deletions

View File

@ -416,21 +416,16 @@ meta_frames_ensure_layout (MetaFrames *frames,
{
gpointer key, value;
PangoFontDescription *font_desc;
double scale;
int size;
scale = meta_theme_get_title_scale (meta_theme_get_current (),
type,
flags);
frame->layout = gtk_widget_create_pango_layout (widget, frame->title);
pango_layout_set_ellipsize (frame->layout, PANGO_ELLIPSIZE_END);
pango_layout_set_auto_dir (frame->layout, FALSE);
pango_layout_set_single_paragraph_mode (frame->layout, TRUE);
font_desc = meta_gtk_widget_get_font_desc (widget, scale,
meta_prefs_get_titlebar_font ());
font_desc = meta_style_info_create_font_desc (frame->style_info);
meta_frame_style_apply_scale (style, font_desc);
size = pango_font_description_get_size (font_desc);

View File

@ -1021,6 +1021,8 @@ MetaFrameStyle* meta_frame_style_new (MetaFrameStyle *parent);
void meta_frame_style_ref (MetaFrameStyle *style);
void meta_frame_style_unref (MetaFrameStyle *style);
void meta_frame_style_apply_scale (const MetaFrameStyle *style,
PangoFontDescription *font_desc);
gboolean meta_frame_style_validate (MetaFrameStyle *style,
guint current_theme_version,
@ -1042,15 +1044,13 @@ MetaFrameStyle* meta_theme_get_frame_style (MetaTheme *theme,
MetaFrameType type,
MetaFrameFlags flags);
double meta_theme_get_title_scale (MetaTheme *theme,
MetaFrameType type,
MetaFrameFlags flags);
MetaStyleInfo * meta_theme_create_style_info (GdkScreen *screen,
const gchar *variant);
MetaStyleInfo * meta_style_info_ref (MetaStyleInfo *style);
void meta_style_info_unref (MetaStyleInfo *style_info);
PangoFontDescription * meta_style_info_create_font_desc (MetaStyleInfo *style_info);
void meta_theme_draw_frame (MetaTheme *theme,
MetaStyleInfo *style_info,
cairo_t *cr,
@ -1130,9 +1130,6 @@ gboolean meta_theme_replace_constants (MetaTheme *theme,
/* random stuff */
PangoFontDescription* meta_gtk_widget_get_font_desc (GtkWidget *widget,
double scale,
const PangoFontDescription *override);
int meta_pango_font_desc_get_text_height (const PangoFontDescription *font_desc,
PangoContext *context);

View File

@ -4032,6 +4032,15 @@ get_button (MetaFrameStyle *style,
return op_list;
}
void
meta_frame_style_apply_scale (const MetaFrameStyle *style,
PangoFontDescription *font_desc)
{
int size = pango_font_description_get_size (font_desc);
pango_font_description_set_size (font_desc,
MAX (size * style->layout->title_scale, 1));
}
gboolean
meta_frame_style_validate (MetaFrameStyle *style,
guint current_theme_version,
@ -4982,24 +4991,6 @@ meta_theme_get_frame_style (MetaTheme *theme,
return style;
}
double
meta_theme_get_title_scale (MetaTheme *theme,
MetaFrameType type,
MetaFrameFlags flags)
{
MetaFrameStyle *style;
g_return_val_if_fail (type < META_FRAME_TYPE_LAST, 1.0);
style = theme_get_style (theme, type, flags);
/* Parser is not supposed to allow this currently */
if (style == NULL)
return 1.0;
return style->layout->title_scale;
}
static GtkStyleContext *
create_style_context (GType widget_type,
GtkStyleContext *parent_style,
@ -5120,6 +5111,22 @@ meta_style_info_unref (MetaStyleInfo *style_info)
}
}
PangoFontDescription*
meta_style_info_create_font_desc (MetaStyleInfo *style_info)
{
PangoFontDescription *font_desc;
const PangoFontDescription *override = meta_prefs_get_titlebar_font ();
gtk_style_context_get (style_info->styles[META_STYLE_ELEMENT_TITLE],
GTK_STATE_FLAG_NORMAL,
"font", &font_desc, NULL);
if (override)
pango_font_description_merge (font_desc, override, TRUE);
return font_desc;
}
void
meta_theme_draw_frame (MetaTheme *theme,
MetaStyleInfo *style_info,
@ -5488,29 +5495,6 @@ meta_theme_lookup_color_constant (MetaTheme *theme,
}
}
PangoFontDescription*
meta_gtk_widget_get_font_desc (GtkWidget *widget,
double scale,
const PangoFontDescription *override)
{
GtkStyleContext *style;
PangoFontDescription *font_desc;
g_return_val_if_fail (gtk_widget_get_realized (widget), NULL);
style = gtk_widget_get_style_context (widget);
gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &font_desc, NULL);
if (override)
pango_font_description_merge (font_desc, override, TRUE);
pango_font_description_set_size (font_desc,
MAX (pango_font_description_get_size (font_desc) * scale, 1));
return font_desc;
}
/**
* meta_pango_font_desc_get_text_height:
* @font_desc: the font

View File

@ -576,7 +576,7 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
MetaFrameBorders *borders)
{
int text_height;
GtkStyleContext *style = NULL;
MetaStyleInfo *style_info = NULL;
PangoContext *context;
const PangoFontDescription *font_desc;
PangoFontDescription *free_font_desc = NULL;
@ -590,16 +590,9 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
{
GdkDisplay *display = gdk_x11_lookup_xdisplay (ui->xdisplay);
GdkScreen *screen = gdk_display_get_screen (display, XScreenNumberOfScreen (ui->xscreen));
GtkWidgetPath *widget_path;
style = gtk_style_context_new ();
gtk_style_context_set_screen (style, screen);
widget_path = gtk_widget_path_new ();
gtk_widget_path_append_type (widget_path, GTK_TYPE_WINDOW);
gtk_style_context_set_path (style, widget_path);
gtk_widget_path_free (widget_path);
gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &free_font_desc, NULL);
style_info = meta_theme_create_style_info (screen, NULL);
free_font_desc = meta_style_info_create_font_desc (style_info);
font_desc = (const PangoFontDescription *) free_font_desc;
}
@ -617,8 +610,8 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
meta_frame_borders_clear (borders);
}
if (style != NULL)
g_object_unref (style);
if (style_info != NULL)
meta_style_info_unref (style_info);
}
void