[gtk+/wip/otte/gtk4: 28/41] API: screen: Stop storing font options



commit ecf43a8e2c2da8eb785ddcdaedb9d70e75e14799
Author: Benjamin Otte <otte redhat com>
Date:   Fri Sep 30 04:58:29 2016 +0200

    API: screen: Stop storing font options
    
    font options are only ever set by the GtkSettings object and only ever
    used inside GTK, so just store them there.

 gdk/gdkpango.c           |    4 --
 gdk/gdkscreen.c          |   81 ----------------------------------------------
 gdk/gdkscreen.h          |    6 ---
 gdk/gdkscreenprivate.h   |    1 -
 gtk/gtksettings.c        |   27 ++++++++++------
 gtk/gtksettingsprivate.h |    2 +
 gtk/gtkwidget.c          |   12 +++---
 7 files changed, 25 insertions(+), 108 deletions(-)
---
diff --git a/gdk/gdkpango.c b/gdk/gdkpango.c
index 3d6a909..9c431c6 100644
--- a/gdk/gdkpango.c
+++ b/gdk/gdkpango.c
@@ -350,7 +350,6 @@ gdk_pango_context_get_for_screen (GdkScreen *screen)
 {
   PangoFontMap *fontmap;
   PangoContext *context;
-  const cairo_font_options_t *options;
   double dpi;
 
   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
@@ -358,9 +357,6 @@ gdk_pango_context_get_for_screen (GdkScreen *screen)
   fontmap = pango_cairo_font_map_get_default ();
   context = pango_font_map_create_context (fontmap);
 
-  options = gdk_screen_get_font_options (screen);
-  pango_cairo_context_set_font_options (context, options);
-
   dpi = gdk_screen_get_resolution (screen);
   pango_cairo_context_set_resolution (context, dpi);
 
diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c
index ee69322..1ca9807 100644
--- a/gdk/gdkscreen.c
+++ b/gdk/gdkscreen.c
@@ -47,7 +47,6 @@
  */
 
 
-static void gdk_screen_finalize     (GObject        *object);
 static void gdk_screen_set_property (GObject        *object,
                                     guint           prop_id,
                                     const GValue   *value,
@@ -60,7 +59,6 @@ static void gdk_screen_get_property (GObject        *object,
 enum
 {
   PROP_0,
-  PROP_FONT_OPTIONS,
   PROP_RESOLUTION
 };
 
@@ -81,19 +79,10 @@ gdk_screen_class_init (GdkScreenClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  object_class->finalize = gdk_screen_finalize;
   object_class->set_property = gdk_screen_set_property;
   object_class->get_property = gdk_screen_get_property;
 
   g_object_class_install_property (object_class,
-                                  PROP_FONT_OPTIONS,
-                                  g_param_spec_pointer ("font-options",
-                                                        P_("Font options"),
-                                                        P_("The default font options for the screen"),
-                                                        G_PARAM_READWRITE|G_PARAM_STATIC_NAME|
-                                                       G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
-
-  g_object_class_install_property (object_class,
                                   PROP_RESOLUTION,
                                   g_param_spec_double ("resolution",
                                                        P_("Font resolution"),
@@ -152,17 +141,6 @@ gdk_screen_init (GdkScreen *screen)
   screen->resolution = -1.;
 }
 
-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 (gdk_screen_parent_class)->finalize (object);
-}
-
 void 
 _gdk_screen_close (GdkScreen *screen)
 {
@@ -176,59 +154,6 @@ _gdk_screen_close (GdkScreen *screen)
 }
 
 /**
- * gdk_screen_set_font_options:
- * @screen: a #GdkScreen
- * @options: (allow-none): 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.
- *
- * Since: 2.10
- **/
-void
-gdk_screen_set_font_options (GdkScreen                  *screen,
-                            const cairo_font_options_t *options)
-{
-  g_return_if_fail (GDK_IS_SCREEN (screen));
-
-  if (screen->font_options != options)
-    {
-      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;
-
-      g_object_notify (G_OBJECT (screen), "font-options");
-    }
-}
-
-/**
- * gdk_screen_get_font_options:
- * @screen: a #GdkScreen
- * 
- * Gets any options previously set with gdk_screen_set_font_options().
- * 
- * Returns: (nullable): the current font options, or %NULL if no
- *  default font options have been set.
- *
- * Since: 2.10
- **/
-const cairo_font_options_t *
-gdk_screen_get_font_options (GdkScreen *screen)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
-  return screen->font_options;
-}
-
-/**
  * gdk_screen_set_resolution:
  * @screen: a #GdkScreen
  * @dpi: the resolution in “dots per inch”. (Physical inches aren’t actually
@@ -313,9 +238,6 @@ gdk_screen_get_property (GObject      *object,
 
   switch (prop_id)
     {
-    case PROP_FONT_OPTIONS:
-      g_value_set_pointer (value, (gpointer) gdk_screen_get_font_options (screen));
-      break;
     case PROP_RESOLUTION:
       g_value_set_double (value, gdk_screen_get_resolution (screen));
       break;
@@ -335,9 +257,6 @@ gdk_screen_set_property (GObject      *object,
 
   switch (prop_id)
     {
-    case PROP_FONT_OPTIONS:
-      gdk_screen_set_font_options (screen, g_value_get_pointer (value));
-      break;
     case PROP_RESOLUTION:
       gdk_screen_set_resolution (screen, g_value_get_double (value));
       break;
diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h
index ea237c7..0899e1d 100644
--- a/gdk/gdkscreen.h
+++ b/gdk/gdkscreen.h
@@ -67,12 +67,6 @@ gboolean   gdk_screen_get_setting (GdkScreen   *screen,
                                    GValue      *value);
 
 GDK_AVAILABLE_IN_ALL
-void                        gdk_screen_set_font_options (GdkScreen                  *screen,
-                                                         const cairo_font_options_t *options);
-GDK_AVAILABLE_IN_ALL
-const cairo_font_options_t *gdk_screen_get_font_options (GdkScreen                  *screen);
-
-GDK_AVAILABLE_IN_ALL
 void    gdk_screen_set_resolution (GdkScreen *screen,
                                    gdouble    dpi);
 GDK_AVAILABLE_IN_ALL
diff --git a/gdk/gdkscreenprivate.h b/gdk/gdkscreenprivate.h
index 941502c..928cdd9 100644
--- a/gdk/gdkscreenprivate.h
+++ b/gdk/gdkscreenprivate.h
@@ -33,7 +33,6 @@ struct _GdkScreen
 {
   GObject parent_instance;
 
-  cairo_font_options_t *font_options;
   gdouble resolution; /* pixels/points scale factor for fonts */
   guint resolution_set : 1; /* resolution set through public API */
   guint closed : 1;
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index f6d7283..4596752 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -126,6 +126,7 @@ struct _GtkSettingsPrivate
   gint font_size;
   gboolean font_size_absolute;
   gchar *font_family;
+  cairo_font_options_t *font_options;
 };
 
 struct _GtkSettingsValuePrivate
@@ -1799,6 +1800,9 @@ gtk_settings_finalize (GObject *object)
   settings_update_provider (priv->screen, &priv->key_theme_provider, NULL);
   g_slist_free_full (priv->style_cascades, g_object_unref);
 
+  if (priv->font_options)
+    cairo_font_options_destroy (priv->font_options);
+
   g_free (priv->font_family);
 
   G_OBJECT_CLASS (gtk_settings_parent_class)->finalize (object);
@@ -2996,7 +3000,9 @@ settings_update_font_options (GtkSettings *settings)
   cairo_antialias_t antialias_mode;
   gchar *rgba_str;
   cairo_subpixel_order_t subpixel_order;
-  cairo_font_options_t *options;
+
+  if (priv->font_options)
+    cairo_font_options_destroy (priv->font_options);
 
   g_object_get (settings,
                 "gtk-xft-antialias", &antialias,
@@ -3005,9 +3011,9 @@ settings_update_font_options (GtkSettings *settings)
                 "gtk-xft-rgba", &rgba_str,
                 NULL);
 
-  options = cairo_font_options_create ();
+  priv->font_options = cairo_font_options_create ();
 
-  cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_ON);
+  cairo_font_options_set_hint_metrics (priv->font_options, CAIRO_HINT_METRICS_ON);
 
   hint_style = CAIRO_HINT_STYLE_DEFAULT;
   if (hinting == 0)
@@ -3031,7 +3037,7 @@ settings_update_font_options (GtkSettings *settings)
 
   g_free (hint_style_str);
 
-  cairo_font_options_set_hint_style (options, hint_style);
+  cairo_font_options_set_hint_style (priv->font_options, hint_style);
 
   subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
   if (rgba_str)
@@ -3048,7 +3054,7 @@ settings_update_font_options (GtkSettings *settings)
 
   g_free (rgba_str);
 
-  cairo_font_options_set_subpixel_order (options, subpixel_order);
+  cairo_font_options_set_subpixel_order (priv->font_options, subpixel_order);
 
   antialias_mode = CAIRO_ANTIALIAS_DEFAULT;
   if (antialias == 0)
@@ -3063,11 +3069,7 @@ settings_update_font_options (GtkSettings *settings)
         antialias_mode = CAIRO_ANTIALIAS_GRAY;
     }
 
-  cairo_font_options_set_antialias (options, antialias_mode);
-
-  gdk_screen_set_font_options (priv->screen, options);
-
-  cairo_font_options_destroy (options);
+  cairo_font_options_set_antialias (priv->font_options, antialias_mode);
 }
 
 static gboolean
@@ -3260,6 +3262,11 @@ settings_update_key_theme (GtkSettings *settings)
   g_free (key_theme_name);
 }
 
+const cairo_font_options_t *
+gtk_settings_get_font_options (GtkSettings *settings)
+{
+  return settings->priv->font_options;
+}
 
 GdkScreen *
 _gtk_settings_get_screen (GtkSettings *settings)
diff --git a/gtk/gtksettingsprivate.h b/gtk/gtksettingsprivate.h
index 47f75a6..1b1006e 100644
--- a/gtk/gtksettingsprivate.h
+++ b/gtk/gtksettingsprivate.h
@@ -37,6 +37,8 @@ gboolean            _gtk_settings_parse_convert              (GtkRcPropertyParse
                                                               const GValue           *src_value,
                                                               GParamSpec             *pspec,
                                                               GValue                 *dest_value);
+const cairo_font_options_t *
+                    gtk_settings_get_font_options            (GtkSettings            *settings);
 GdkScreen          *_gtk_settings_get_screen                 (GtkSettings            *settings);
 GtkStyleCascade    *_gtk_settings_get_style_cascade          (GtkSettings            *settings,
                                                               gint                    scale);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index aeac800..a7550c0 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -10315,7 +10315,7 @@ update_pango_context (GtkWidget    *widget,
 {
   PangoFontDescription *font_desc;
   GtkStyleContext *style_context;
-  GdkScreen *screen;
+  GtkSettings *settings;
   cairo_font_options_t *font_options;
 
   style_context = _gtk_widget_get_style_context (widget);
@@ -10338,21 +10338,21 @@ update_pango_context (GtkWidget    *widget,
                                                                             GTK_CSS_PROPERTY_DPI),
                                           100));
 
-  screen = gtk_widget_get_screen_unchecked (widget);
+  settings = gtk_widget_get_settings (widget);
   font_options = (cairo_font_options_t*)g_object_get_qdata (G_OBJECT (widget), quark_font_options);
-  if (screen && font_options)
+  if (settings && font_options)
     {
       cairo_font_options_t *options;
 
-      options = cairo_font_options_copy (gdk_screen_get_font_options (screen));
+      options = cairo_font_options_copy (gtk_settings_get_font_options (settings));
       cairo_font_options_merge (options, font_options);
       pango_cairo_context_set_font_options (context, options);
       cairo_font_options_destroy (options);
     }
-  else if (screen)
+  else if (settings)
     {
       pango_cairo_context_set_font_options (context,
-                                            gdk_screen_get_font_options (screen));
+                                            gtk_settings_get_font_options (settings));
     }
 
   pango_context_set_font_map (context, gtk_widget_get_effective_font_map (widget));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]