Fix for #314004, reported by Michael Reinsch:
2005-08-23 Owen Taylor <otaylor@redhat.com> Fix for #314004, reported by Michael Reinsch: * gdk/gdk.symbols: * gdk/gdkscreen.[ch]: Add gdk_screen_get/set_font_options_libgtk_only() Add gdk_screen_get/set_resolution_libgtk_only() * gdk/gdkpango.c (gdk_pango_context_get_for_screen): Set the options for the screen on the newly created context. * gtk/gtksettings.c (settings_update_font_options/dpi) gtkwidget.c: Move font options and dpi code from gtkwidget.c to gtksettings.c, set the font options on the screen. * gtk/gtkwidget.c (gtk_widget_update_pango_context): Just get the font options from the screen and set them on the context.
This commit is contained in:
committed by
Matthias Clasen
parent
39169b6fd6
commit
2b1bea02f2
18
ChangeLog
18
ChangeLog
@@ -1,3 +1,21 @@
|
|||||||
|
2005-08-23 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
Fix for #314004, reported by Michael Reinsch:
|
||||||
|
|
||||||
|
* gdk/gdk.symbols:
|
||||||
|
* gdk/gdkscreen.[ch]: Add gdk_screen_get/set_font_options_libgtk_only()
|
||||||
|
Add gdk_screen_get/set_resolution_libgtk_only()
|
||||||
|
|
||||||
|
* gdk/gdkpango.c (gdk_pango_context_get_for_screen): Set
|
||||||
|
the options for the screen on the newly created context.
|
||||||
|
|
||||||
|
* gtk/gtksettings.c (settings_update_font_options/dpi) gtkwidget.c:
|
||||||
|
Move font options and dpi code from gtkwidget.c to gtksettings.c, set
|
||||||
|
the font options on the screen.
|
||||||
|
|
||||||
|
* gtk/gtkwidget.c (gtk_widget_update_pango_context): Just get
|
||||||
|
the font options from the screen and set them on the context.
|
||||||
|
|
||||||
2005-08-23 Kristian Rietveld <kris@gtk.org>
|
2005-08-23 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_inserted): don't
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_inserted): don't
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
2005-08-23 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
Fix for #314004, reported by Michael Reinsch:
|
||||||
|
|
||||||
|
* gdk/gdk.symbols:
|
||||||
|
* gdk/gdkscreen.[ch]: Add gdk_screen_get/set_font_options_libgtk_only()
|
||||||
|
Add gdk_screen_get/set_resolution_libgtk_only()
|
||||||
|
|
||||||
|
* gdk/gdkpango.c (gdk_pango_context_get_for_screen): Set
|
||||||
|
the options for the screen on the newly created context.
|
||||||
|
|
||||||
|
* gtk/gtksettings.c (settings_update_font_options/dpi) gtkwidget.c:
|
||||||
|
Move font options and dpi code from gtkwidget.c to gtksettings.c, set
|
||||||
|
the font options on the screen.
|
||||||
|
|
||||||
|
* gtk/gtkwidget.c (gtk_widget_update_pango_context): Just get
|
||||||
|
the font options from the screen and set them on the context.
|
||||||
|
|
||||||
2005-08-23 Kristian Rietveld <kris@gtk.org>
|
2005-08-23 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_inserted): don't
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_inserted): don't
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
2005-08-23 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
Fix for #314004, reported by Michael Reinsch:
|
||||||
|
|
||||||
|
* gdk/gdk.symbols:
|
||||||
|
* gdk/gdkscreen.[ch]: Add gdk_screen_get/set_font_options_libgtk_only()
|
||||||
|
Add gdk_screen_get/set_resolution_libgtk_only()
|
||||||
|
|
||||||
|
* gdk/gdkpango.c (gdk_pango_context_get_for_screen): Set
|
||||||
|
the options for the screen on the newly created context.
|
||||||
|
|
||||||
|
* gtk/gtksettings.c (settings_update_font_options/dpi) gtkwidget.c:
|
||||||
|
Move font options and dpi code from gtkwidget.c to gtksettings.c, set
|
||||||
|
the font options on the screen.
|
||||||
|
|
||||||
|
* gtk/gtkwidget.c (gtk_widget_update_pango_context): Just get
|
||||||
|
the font options from the screen and set them on the context.
|
||||||
|
|
||||||
2005-08-23 Kristian Rietveld <kris@gtk.org>
|
2005-08-23 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_inserted): don't
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_inserted): don't
|
||||||
|
|||||||
@@ -962,6 +962,10 @@ gdk_draw_rgb_image_dithalign
|
|||||||
gdk_screen_get_type G_GNUC_CONST
|
gdk_screen_get_type G_GNUC_CONST
|
||||||
gdk_screen_get_monitor_at_point
|
gdk_screen_get_monitor_at_point
|
||||||
gdk_screen_get_monitor_at_window
|
gdk_screen_get_monitor_at_window
|
||||||
|
gdk_screen_set_font_options_libgtk_only
|
||||||
|
gdk_screen_get_font_options_libgtk_only
|
||||||
|
gdk_screen_set_resolution_libgtk_only
|
||||||
|
gdk_screen_get_resolution_libgtk_only
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1333,6 +1333,12 @@ gdk_pango_layout_get_clip_region (PangoLayout *layout,
|
|||||||
* instead of this function, to get the appropriate context for
|
* instead of this function, to get the appropriate context for
|
||||||
* the widget you intend to render text onto.
|
* the widget you intend to render text onto.
|
||||||
*
|
*
|
||||||
|
* The newly created context will have the default font options (see
|
||||||
|
* #cairo_font_options_t) for the default screen; if these options
|
||||||
|
* change it will not be updated. Using gtk_widget_get_pango_context()
|
||||||
|
* is more convenient if you want to keep a context around and track
|
||||||
|
* changes to the screen's font rendering settings.
|
||||||
|
*
|
||||||
* Return value: a new #PangoContext for the default display
|
* Return value: a new #PangoContext for the default display
|
||||||
**/
|
**/
|
||||||
PangoContext *
|
PangoContext *
|
||||||
@@ -1353,6 +1359,12 @@ gdk_pango_context_get (void)
|
|||||||
* instead of this function, to get the appropriate context for
|
* instead of this function, to get the appropriate context for
|
||||||
* the widget you intend to render text onto.
|
* the widget you intend to render text onto.
|
||||||
*
|
*
|
||||||
|
* The newly created context will have the default font options
|
||||||
|
* (see #cairo_font_options_t) for the screen; if these options
|
||||||
|
* change it will not be updated. Using gtk_widget_get_pango_context()
|
||||||
|
* is more convenient if you want to keep a context around and track
|
||||||
|
* changes to the screen's font rendering settings.
|
||||||
|
*
|
||||||
* Return value: a new #PangoContext for @screen
|
* Return value: a new #PangoContext for @screen
|
||||||
*
|
*
|
||||||
* Since: 2.2
|
* Since: 2.2
|
||||||
@@ -1361,12 +1373,23 @@ PangoContext *
|
|||||||
gdk_pango_context_get_for_screen (GdkScreen *screen)
|
gdk_pango_context_get_for_screen (GdkScreen *screen)
|
||||||
{
|
{
|
||||||
PangoFontMap *fontmap;
|
PangoFontMap *fontmap;
|
||||||
|
PangoContext *context;
|
||||||
|
const cairo_font_options_t *options;
|
||||||
|
double dpi;
|
||||||
|
|
||||||
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
|
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
|
||||||
|
|
||||||
fontmap = pango_cairo_font_map_get_default ();
|
fontmap = pango_cairo_font_map_get_default ();
|
||||||
|
|
||||||
return pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
|
context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
|
||||||
|
|
||||||
|
options = gdk_screen_get_font_options_libgtk_only (screen);
|
||||||
|
pango_cairo_context_set_font_options (context, options);
|
||||||
|
|
||||||
|
dpi = gdk_screen_get_resolution_libgtk_only (screen);
|
||||||
|
pango_cairo_context_set_resolution (context, dpi);
|
||||||
|
|
||||||
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define __GDK_PANGO_C__
|
#define __GDK_PANGO_C__
|
||||||
|
|||||||
113
gdk/gdkscreen.c
113
gdk/gdkscreen.c
@@ -29,7 +29,9 @@
|
|||||||
#include "gdkalias.h"
|
#include "gdkalias.h"
|
||||||
|
|
||||||
static void gdk_screen_class_init (GdkScreenClass *klass);
|
static void gdk_screen_class_init (GdkScreenClass *klass);
|
||||||
|
static void gdk_screen_init (GdkScreen *screen);
|
||||||
static void gdk_screen_dispose (GObject *object);
|
static void gdk_screen_dispose (GObject *object);
|
||||||
|
static void gdk_screen_finalize (GObject *object);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -51,7 +53,7 @@ gdk_screen_get_type (void)
|
|||||||
static const GTypeInfo object_info =
|
static const GTypeInfo object_info =
|
||||||
{
|
{
|
||||||
sizeof (GdkScreenClass),
|
sizeof (GdkScreenClass),
|
||||||
(GBaseInitFunc) NULL,
|
(GBaseInitFunc) gdk_screen_init,
|
||||||
(GBaseFinalizeFunc) NULL,
|
(GBaseFinalizeFunc) NULL,
|
||||||
(GClassInitFunc) gdk_screen_class_init,
|
(GClassInitFunc) gdk_screen_class_init,
|
||||||
NULL, /* class_finalize */
|
NULL, /* class_finalize */
|
||||||
@@ -76,6 +78,7 @@ gdk_screen_class_init (GdkScreenClass *klass)
|
|||||||
parent_class = g_type_class_peek_parent (klass);
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
object_class->dispose = gdk_screen_dispose;
|
object_class->dispose = gdk_screen_dispose;
|
||||||
|
object_class->finalize = gdk_screen_finalize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GdkScreen::size-changed:
|
* GdkScreen::size-changed:
|
||||||
@@ -97,6 +100,12 @@ gdk_screen_class_init (GdkScreenClass *klass)
|
|||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gdk_screen_init (GdkScreen *screen)
|
||||||
|
{
|
||||||
|
screen->resolution = -1;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_screen_dispose (GObject *object)
|
gdk_screen_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
@@ -115,6 +124,17 @@ gdk_screen_dispose (GObject *object)
|
|||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gdk_screen_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
GdkScreen *screen = GDK_SCREEN (object);
|
||||||
|
|
||||||
|
if (screen->font_options)
|
||||||
|
cairo_font_options_destroy (screen->font_options);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_gdk_screen_close (GdkScreen *screen)
|
_gdk_screen_close (GdkScreen *screen)
|
||||||
{
|
{
|
||||||
@@ -317,5 +337,96 @@ gdk_screen_height_mm (void)
|
|||||||
return gdk_screen_get_height_mm (gdk_screen_get_default ());
|
return gdk_screen_get_height_mm (gdk_screen_get_default ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_screen_set_font_options_libgtk_only:
|
||||||
|
* @screen: a #GdkScreen
|
||||||
|
* @options: a #cairo_font_options_t, or %NULL to unset any
|
||||||
|
* previously set default font options.
|
||||||
|
*
|
||||||
|
* Sets the default font options for the screen. These
|
||||||
|
* options will be set on any #PangoContext's newly created
|
||||||
|
* with gdk_pango_context_get_for_screen(). Changing the
|
||||||
|
* default set of font options does not affect contexts that
|
||||||
|
* have already been created.
|
||||||
|
*
|
||||||
|
* This function is not part of the GDK public API and is only
|
||||||
|
* for use by GTK+.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_screen_set_font_options_libgtk_only (GdkScreen *screen,
|
||||||
|
const cairo_font_options_t *options)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GDK_IS_SCREEN (screen));
|
||||||
|
|
||||||
|
if (screen->font_options)
|
||||||
|
cairo_font_options_destroy (screen->font_options);
|
||||||
|
|
||||||
|
if (options)
|
||||||
|
screen->font_options = cairo_font_options_copy (options);
|
||||||
|
else
|
||||||
|
screen->font_options = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_screen_get_font_options_libgtk_only:
|
||||||
|
* @screen: a #GdkScreen
|
||||||
|
*
|
||||||
|
* Gets any options previously set with gdk_screen_set_font_options_libgtk_only().
|
||||||
|
*
|
||||||
|
* Return value: the current font options, or %NULL if no default
|
||||||
|
* font options have been set.
|
||||||
|
**/
|
||||||
|
const cairo_font_options_t *
|
||||||
|
gdk_screen_get_font_options_libgtk_only (GdkScreen *screen)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
|
||||||
|
|
||||||
|
return screen->font_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_screen_set_resolution_libgtk_only:
|
||||||
|
* @screen: a #GdkScreen
|
||||||
|
* @dpi: the resolution in "dots per inch". (Physical inches aren't actually
|
||||||
|
* involved; the terminology is conventional.)
|
||||||
|
|
||||||
|
* Sets the resolution for font handling on the screen. This is a
|
||||||
|
* scale factor between points specified in a #PangoFontDescription
|
||||||
|
* and cairo units. The default value is 96, meaning that a 10 point
|
||||||
|
* font will be 13 units high. (10 * 96. / 72. = 13.3).
|
||||||
|
*
|
||||||
|
* This function is not part of the GDK public API and is only
|
||||||
|
* for use by GTK+.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_screen_set_resolution_libgtk_only (GdkScreen *screen,
|
||||||
|
gdouble dpi)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GDK_IS_SCREEN (screen));
|
||||||
|
|
||||||
|
if (dpi >= 0)
|
||||||
|
screen->resolution = dpi;
|
||||||
|
else
|
||||||
|
screen->resolution = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_screen_get_resolution_libgtk_only:
|
||||||
|
* @screen: a #GdkScreen
|
||||||
|
*
|
||||||
|
* Gets the resolution for font handling on the screen; see
|
||||||
|
* gdk_screen_set_resolution_libgtk_only() for full details.
|
||||||
|
*
|
||||||
|
* Return value: the current resolution, or -1 if no resolution
|
||||||
|
* has been set.
|
||||||
|
**/
|
||||||
|
gdouble
|
||||||
|
gdk_screen_get_resolution_libgtk_only (GdkScreen *screen)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
|
||||||
|
|
||||||
|
return screen->resolution;
|
||||||
|
}
|
||||||
|
|
||||||
#define __GDK_SCREEN_C__
|
#define __GDK_SCREEN_C__
|
||||||
#include "gdkaliasdef.c"
|
#include "gdkaliasdef.c"
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#ifndef __GDK_SCREEN_H__
|
#ifndef __GDK_SCREEN_H__
|
||||||
#define __GDK_SCREEN_H__
|
#define __GDK_SCREEN_H__
|
||||||
|
|
||||||
|
#include <cairo.h>
|
||||||
#include "gdk/gdktypes.h"
|
#include "gdk/gdktypes.h"
|
||||||
#include "gdk/gdkdisplay.h"
|
#include "gdk/gdkdisplay.h"
|
||||||
|
|
||||||
@@ -46,6 +47,9 @@ struct _GdkScreen
|
|||||||
|
|
||||||
GdkGC *normal_gcs[32];
|
GdkGC *normal_gcs[32];
|
||||||
GdkGC *exposure_gcs[32];
|
GdkGC *exposure_gcs[32];
|
||||||
|
|
||||||
|
cairo_font_options_t *font_options;
|
||||||
|
double resolution; /* pixels/points scale factor for fonts */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkScreenClass
|
struct _GdkScreenClass
|
||||||
@@ -98,6 +102,14 @@ gboolean gdk_screen_get_setting (GdkScreen *screen,
|
|||||||
const gchar *name,
|
const gchar *name,
|
||||||
GValue *value);
|
GValue *value);
|
||||||
|
|
||||||
|
void gdk_screen_set_font_options_libgtk_only (GdkScreen *screen,
|
||||||
|
const cairo_font_options_t *options);
|
||||||
|
const cairo_font_options_t *gdk_screen_get_font_options_libgtk_only (GdkScreen *screen);
|
||||||
|
|
||||||
|
void gdk_screen_set_resolution_libgtk_only (GdkScreen *screen,
|
||||||
|
gdouble dpi);
|
||||||
|
gdouble gdk_screen_get_resolution_libgtk_only (GdkScreen *screen);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GDK_SCREEN_H__ */
|
#endif /* __GDK_SCREEN_H__ */
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "gtkmodules.h"
|
#include "gtkmodules.h"
|
||||||
#include "gtksettings.h"
|
#include "gtksettings.h"
|
||||||
#include "gtkrc.h"
|
#include "gtkrc.h"
|
||||||
@@ -100,6 +103,8 @@ static void settings_update_modules (GtkSettings *setting
|
|||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
#ifdef GDK_WINDOWING_X11
|
||||||
static void settings_update_cursor_theme (GtkSettings *settings);
|
static void settings_update_cursor_theme (GtkSettings *settings);
|
||||||
|
static void settings_update_resolution (GtkSettings *settings);
|
||||||
|
static void settings_update_font_options (GtkSettings *settings);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -553,16 +558,20 @@ gtk_settings_notify (GObject *object,
|
|||||||
break;
|
break;
|
||||||
#ifdef GDK_WINDOWING_X11
|
#ifdef GDK_WINDOWING_X11
|
||||||
case PROP_XFT_DPI:
|
case PROP_XFT_DPI:
|
||||||
case PROP_XFT_ANTIALIAS:
|
settings_update_resolution (settings);
|
||||||
case PROP_XFT_HINTING:
|
|
||||||
case PROP_XFT_HINTSTYLE:
|
|
||||||
case PROP_XFT_RGBA:
|
|
||||||
/* This is a hack because with gtk_rc_reset_styles() doesn't get
|
/* This is a hack because with gtk_rc_reset_styles() doesn't get
|
||||||
* widgets with gtk_widget_style_set(), and also causes more
|
* widgets with gtk_widget_style_set(), and also causes more
|
||||||
* recomputation than necessary.
|
* recomputation than necessary.
|
||||||
*/
|
*/
|
||||||
gtk_rc_reset_styles (GTK_SETTINGS (object));
|
gtk_rc_reset_styles (GTK_SETTINGS (object));
|
||||||
break;
|
break;
|
||||||
|
case PROP_XFT_ANTIALIAS:
|
||||||
|
case PROP_XFT_HINTING:
|
||||||
|
case PROP_XFT_HINTSTYLE:
|
||||||
|
case PROP_XFT_RGBA:
|
||||||
|
settings_update_font_options (settings);
|
||||||
|
gtk_rc_reset_styles (GTK_SETTINGS (object));
|
||||||
|
break;
|
||||||
case PROP_CURSOR_THEME_NAME:
|
case PROP_CURSOR_THEME_NAME:
|
||||||
case PROP_CURSOR_THEME_SIZE:
|
case PROP_CURSOR_THEME_SIZE:
|
||||||
settings_update_cursor_theme (settings);
|
settings_update_cursor_theme (settings);
|
||||||
@@ -1358,6 +1367,104 @@ settings_update_cursor_theme (GtkSettings *settings)
|
|||||||
|
|
||||||
gdk_x11_display_set_cursor_theme (display, theme, size);
|
gdk_x11_display_set_cursor_theme (display, theme, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_update_font_options (GtkSettings *settings)
|
||||||
|
{
|
||||||
|
gint hinting;
|
||||||
|
gchar *hint_style_str;
|
||||||
|
cairo_hint_style_t hint_style = CAIRO_HINT_STYLE_DEFAULT;
|
||||||
|
gint antialias;
|
||||||
|
cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_DEFAULT;
|
||||||
|
gchar *rgba_str;
|
||||||
|
cairo_subpixel_order_t subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
|
||||||
|
gint dpi_int;
|
||||||
|
double dpi;
|
||||||
|
cairo_font_options_t *options;
|
||||||
|
|
||||||
|
g_object_get (settings,
|
||||||
|
"gtk-xft-antialias", &antialias,
|
||||||
|
"gtk-xft-hinting", &hinting,
|
||||||
|
"gtk-xft-hintstyle", &hint_style_str,
|
||||||
|
"gtk-xft-rgba", &rgba_str,
|
||||||
|
"gtk-xft-dpi", &dpi_int,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (dpi_int > 0)
|
||||||
|
dpi = dpi_int / 1024.;
|
||||||
|
else
|
||||||
|
dpi = -1.;
|
||||||
|
|
||||||
|
options = cairo_font_options_create ();
|
||||||
|
|
||||||
|
if (hinting >= 0 && !hinting)
|
||||||
|
{
|
||||||
|
hint_style = CAIRO_HINT_STYLE_NONE;
|
||||||
|
}
|
||||||
|
else if (hint_style_str)
|
||||||
|
{
|
||||||
|
if (strcmp (hint_style_str, "hintnone") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_NONE;
|
||||||
|
else if (strcmp (hint_style_str, "hintslight") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_SLIGHT;
|
||||||
|
else if (strcmp (hint_style_str, "hintmedium") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_MEDIUM;
|
||||||
|
else if (strcmp (hint_style_str, "hintfull") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_FULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hint_style_str)
|
||||||
|
g_free (hint_style_str);
|
||||||
|
|
||||||
|
cairo_font_options_set_hint_style (options, hint_style);
|
||||||
|
|
||||||
|
if (rgba_str)
|
||||||
|
{
|
||||||
|
if (strcmp (rgba_str, "rgb") == 0)
|
||||||
|
subpixel_order = CAIRO_SUBPIXEL_ORDER_RGB;
|
||||||
|
else if (strcmp (rgba_str, "bgr") == 0)
|
||||||
|
subpixel_order = CAIRO_SUBPIXEL_ORDER_BGR;
|
||||||
|
else if (strcmp (rgba_str, "vrgb") == 0)
|
||||||
|
subpixel_order = CAIRO_SUBPIXEL_ORDER_VRGB;
|
||||||
|
else if (strcmp (rgba_str, "vbgr") == 0)
|
||||||
|
subpixel_order = CAIRO_SUBPIXEL_ORDER_VBGR;
|
||||||
|
|
||||||
|
g_free (rgba_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
cairo_font_options_set_subpixel_order (options, subpixel_order);
|
||||||
|
|
||||||
|
if (antialias >= 0 && !antialias)
|
||||||
|
antialias_mode = CAIRO_ANTIALIAS_NONE;
|
||||||
|
else if (subpixel_order != CAIRO_SUBPIXEL_ORDER_DEFAULT)
|
||||||
|
antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
|
||||||
|
else if (antialias >= 0)
|
||||||
|
antialias_mode = CAIRO_ANTIALIAS_GRAY;
|
||||||
|
|
||||||
|
cairo_font_options_set_antialias (options, antialias_mode);
|
||||||
|
|
||||||
|
gdk_screen_set_font_options_libgtk_only (settings->screen, options);
|
||||||
|
|
||||||
|
cairo_font_options_destroy (options);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_update_resolution (GtkSettings *settings)
|
||||||
|
{
|
||||||
|
gint dpi_int;
|
||||||
|
double dpi;
|
||||||
|
|
||||||
|
g_object_get (settings,
|
||||||
|
"gtk-xft-dpi", &dpi_int,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (dpi_int > 0)
|
||||||
|
dpi = dpi_int / 1024.;
|
||||||
|
else
|
||||||
|
dpi = -1.;
|
||||||
|
|
||||||
|
gdk_screen_set_resolution_libgtk_only (settings->screen, dpi);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __GTK_SETTINGS_C__
|
#define __GTK_SETTINGS_C__
|
||||||
|
|||||||
@@ -5197,91 +5197,10 @@ static void
|
|||||||
update_pango_context (GtkWidget *widget,
|
update_pango_context (GtkWidget *widget,
|
||||||
PangoContext *context)
|
PangoContext *context)
|
||||||
{
|
{
|
||||||
#ifdef GDK_WINDOWING_X11
|
|
||||||
GtkSettings *settings;
|
|
||||||
gint hinting;
|
|
||||||
gchar *hint_style_str;
|
|
||||||
cairo_hint_style_t hint_style = CAIRO_HINT_STYLE_DEFAULT;
|
|
||||||
gint antialias;
|
|
||||||
cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_DEFAULT;
|
|
||||||
gchar *rgba_str;
|
|
||||||
cairo_subpixel_order_t subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
|
|
||||||
gint dpi;
|
|
||||||
cairo_font_options_t *options;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pango_context_set_font_description (context, widget->style->font_desc);
|
pango_context_set_font_description (context, widget->style->font_desc);
|
||||||
pango_context_set_base_dir (context,
|
pango_context_set_base_dir (context,
|
||||||
gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
|
gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
|
||||||
PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL);
|
PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL);
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
|
||||||
settings = gtk_widget_get_settings (widget);
|
|
||||||
g_object_get (settings,
|
|
||||||
"gtk-xft-antialias", &antialias,
|
|
||||||
"gtk-xft-hinting", &hinting,
|
|
||||||
"gtk-xft-hintstyle", &hint_style_str,
|
|
||||||
"gtk-xft-rgba", &rgba_str,
|
|
||||||
"gtk-xft-dpi", &dpi,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (dpi > 0)
|
|
||||||
pango_cairo_context_set_resolution (context, dpi / 1024.);
|
|
||||||
else
|
|
||||||
pango_cairo_context_set_resolution (context, -1.);
|
|
||||||
|
|
||||||
options = cairo_font_options_create ();
|
|
||||||
|
|
||||||
if (hinting >= 0 && !hinting)
|
|
||||||
{
|
|
||||||
hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
}
|
|
||||||
else if (hint_style_str)
|
|
||||||
{
|
|
||||||
if (strcmp (hint_style_str, "hintnone") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
else if (strcmp (hint_style_str, "hintslight") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_SLIGHT;
|
|
||||||
else if (strcmp (hint_style_str, "hintmedium") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_MEDIUM;
|
|
||||||
else if (strcmp (hint_style_str, "hintfull") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hint_style_str)
|
|
||||||
g_free (hint_style_str);
|
|
||||||
|
|
||||||
cairo_font_options_set_hint_style (options, hint_style);
|
|
||||||
|
|
||||||
if (rgba_str)
|
|
||||||
{
|
|
||||||
if (strcmp (rgba_str, "rgb") == 0)
|
|
||||||
subpixel_order = CAIRO_SUBPIXEL_ORDER_RGB;
|
|
||||||
else if (strcmp (rgba_str, "bgr") == 0)
|
|
||||||
subpixel_order = CAIRO_SUBPIXEL_ORDER_BGR;
|
|
||||||
else if (strcmp (rgba_str, "vrgb") == 0)
|
|
||||||
subpixel_order = CAIRO_SUBPIXEL_ORDER_VRGB;
|
|
||||||
else if (strcmp (rgba_str, "vbgr") == 0)
|
|
||||||
subpixel_order = CAIRO_SUBPIXEL_ORDER_VBGR;
|
|
||||||
|
|
||||||
g_free (rgba_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
cairo_font_options_set_subpixel_order (options, subpixel_order);
|
|
||||||
|
|
||||||
if (antialias >= 0 && !antialias)
|
|
||||||
antialias_mode = CAIRO_ANTIALIAS_NONE;
|
|
||||||
else if (subpixel_order != CAIRO_SUBPIXEL_ORDER_DEFAULT)
|
|
||||||
antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
|
|
||||||
else if (antialias >= 0)
|
|
||||||
antialias_mode = CAIRO_ANTIALIAS_GRAY;
|
|
||||||
|
|
||||||
cairo_font_options_set_antialias (options, antialias_mode);
|
|
||||||
|
|
||||||
pango_cairo_context_set_font_options (context, options);
|
|
||||||
|
|
||||||
cairo_font_options_destroy (options);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -5290,7 +5209,20 @@ gtk_widget_update_pango_context (GtkWidget *widget)
|
|||||||
PangoContext *context = gtk_widget_peek_pango_context (widget);
|
PangoContext *context = gtk_widget_peek_pango_context (widget);
|
||||||
|
|
||||||
if (context)
|
if (context)
|
||||||
update_pango_context (widget, context);
|
{
|
||||||
|
GdkScreen *screen;
|
||||||
|
|
||||||
|
update_pango_context (widget, context);
|
||||||
|
|
||||||
|
screen = gtk_widget_get_screen_unchecked (widget);
|
||||||
|
if (screen)
|
||||||
|
{
|
||||||
|
pango_cairo_context_set_resolution (context,
|
||||||
|
gdk_screen_get_resolution_libgtk_only (screen));
|
||||||
|
pango_cairo_context_set_font_options (context,
|
||||||
|
gdk_screen_get_font_options_libgtk_only (screen));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user