mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 19:42:05 +00:00
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:
parent
2db71e73b4
commit
89a371ec98
@ -416,21 +416,16 @@ meta_frames_ensure_layout (MetaFrames *frames,
|
|||||||
{
|
{
|
||||||
gpointer key, value;
|
gpointer key, value;
|
||||||
PangoFontDescription *font_desc;
|
PangoFontDescription *font_desc;
|
||||||
double scale;
|
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
scale = meta_theme_get_title_scale (meta_theme_get_current (),
|
|
||||||
type,
|
|
||||||
flags);
|
|
||||||
|
|
||||||
frame->layout = gtk_widget_create_pango_layout (widget, frame->title);
|
frame->layout = gtk_widget_create_pango_layout (widget, frame->title);
|
||||||
|
|
||||||
pango_layout_set_ellipsize (frame->layout, PANGO_ELLIPSIZE_END);
|
pango_layout_set_ellipsize (frame->layout, PANGO_ELLIPSIZE_END);
|
||||||
pango_layout_set_auto_dir (frame->layout, FALSE);
|
pango_layout_set_auto_dir (frame->layout, FALSE);
|
||||||
pango_layout_set_single_paragraph_mode (frame->layout, TRUE);
|
pango_layout_set_single_paragraph_mode (frame->layout, TRUE);
|
||||||
|
|
||||||
font_desc = meta_gtk_widget_get_font_desc (widget, scale,
|
font_desc = meta_style_info_create_font_desc (frame->style_info);
|
||||||
meta_prefs_get_titlebar_font ());
|
meta_frame_style_apply_scale (style, font_desc);
|
||||||
|
|
||||||
size = pango_font_description_get_size (font_desc);
|
size = pango_font_description_get_size (font_desc);
|
||||||
|
|
||||||
|
@ -1021,6 +1021,8 @@ MetaFrameStyle* meta_frame_style_new (MetaFrameStyle *parent);
|
|||||||
void meta_frame_style_ref (MetaFrameStyle *style);
|
void meta_frame_style_ref (MetaFrameStyle *style);
|
||||||
void meta_frame_style_unref (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,
|
gboolean meta_frame_style_validate (MetaFrameStyle *style,
|
||||||
guint current_theme_version,
|
guint current_theme_version,
|
||||||
@ -1042,15 +1044,13 @@ MetaFrameStyle* meta_theme_get_frame_style (MetaTheme *theme,
|
|||||||
MetaFrameType type,
|
MetaFrameType type,
|
||||||
MetaFrameFlags flags);
|
MetaFrameFlags flags);
|
||||||
|
|
||||||
double meta_theme_get_title_scale (MetaTheme *theme,
|
|
||||||
MetaFrameType type,
|
|
||||||
MetaFrameFlags flags);
|
|
||||||
|
|
||||||
MetaStyleInfo * meta_theme_create_style_info (GdkScreen *screen,
|
MetaStyleInfo * meta_theme_create_style_info (GdkScreen *screen,
|
||||||
const gchar *variant);
|
const gchar *variant);
|
||||||
MetaStyleInfo * meta_style_info_ref (MetaStyleInfo *style);
|
MetaStyleInfo * meta_style_info_ref (MetaStyleInfo *style);
|
||||||
void meta_style_info_unref (MetaStyleInfo *style_info);
|
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,
|
void meta_theme_draw_frame (MetaTheme *theme,
|
||||||
MetaStyleInfo *style_info,
|
MetaStyleInfo *style_info,
|
||||||
cairo_t *cr,
|
cairo_t *cr,
|
||||||
@ -1130,9 +1130,6 @@ gboolean meta_theme_replace_constants (MetaTheme *theme,
|
|||||||
|
|
||||||
/* random stuff */
|
/* 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,
|
int meta_pango_font_desc_get_text_height (const PangoFontDescription *font_desc,
|
||||||
PangoContext *context);
|
PangoContext *context);
|
||||||
|
|
||||||
|
@ -4032,6 +4032,15 @@ get_button (MetaFrameStyle *style,
|
|||||||
return op_list;
|
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
|
gboolean
|
||||||
meta_frame_style_validate (MetaFrameStyle *style,
|
meta_frame_style_validate (MetaFrameStyle *style,
|
||||||
guint current_theme_version,
|
guint current_theme_version,
|
||||||
@ -4982,24 +4991,6 @@ meta_theme_get_frame_style (MetaTheme *theme,
|
|||||||
return style;
|
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 *
|
static GtkStyleContext *
|
||||||
create_style_context (GType widget_type,
|
create_style_context (GType widget_type,
|
||||||
GtkStyleContext *parent_style,
|
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
|
void
|
||||||
meta_theme_draw_frame (MetaTheme *theme,
|
meta_theme_draw_frame (MetaTheme *theme,
|
||||||
MetaStyleInfo *style_info,
|
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:
|
* meta_pango_font_desc_get_text_height:
|
||||||
* @font_desc: the font
|
* @font_desc: the font
|
||||||
|
17
src/ui/ui.c
17
src/ui/ui.c
@ -576,7 +576,7 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
|
|||||||
MetaFrameBorders *borders)
|
MetaFrameBorders *borders)
|
||||||
{
|
{
|
||||||
int text_height;
|
int text_height;
|
||||||
GtkStyleContext *style = NULL;
|
MetaStyleInfo *style_info = NULL;
|
||||||
PangoContext *context;
|
PangoContext *context;
|
||||||
const PangoFontDescription *font_desc;
|
const PangoFontDescription *font_desc;
|
||||||
PangoFontDescription *free_font_desc = NULL;
|
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);
|
GdkDisplay *display = gdk_x11_lookup_xdisplay (ui->xdisplay);
|
||||||
GdkScreen *screen = gdk_display_get_screen (display, XScreenNumberOfScreen (ui->xscreen));
|
GdkScreen *screen = gdk_display_get_screen (display, XScreenNumberOfScreen (ui->xscreen));
|
||||||
GtkWidgetPath *widget_path;
|
|
||||||
|
|
||||||
style = gtk_style_context_new ();
|
style_info = meta_theme_create_style_info (screen, NULL);
|
||||||
gtk_style_context_set_screen (style, screen);
|
free_font_desc = meta_style_info_create_font_desc (style_info);
|
||||||
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);
|
|
||||||
font_desc = (const PangoFontDescription *) free_font_desc;
|
font_desc = (const PangoFontDescription *) free_font_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -617,8 +610,8 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
|
|||||||
meta_frame_borders_clear (borders);
|
meta_frame_borders_clear (borders);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (style != NULL)
|
if (style_info != NULL)
|
||||||
g_object_unref (style);
|
meta_style_info_unref (style_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user