stylecontext: Deprecate most apis
authorMatthias Clasen <mclasen@redhat.com>
Mon, 10 Oct 2022 03:30:06 +0000 (23:30 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 12 Oct 2022 19:35:00 +0000 (15:35 -0400)
The notable exception here are the global provider apis,
which are needed in some form and don't have a replacement
yet. Move them to gtkstyleprovider.[hc], so we can wholly
deprecated gtkstylecontext.[hc].

32 files changed:
gtk/deprecated/gtkstylecontext.c [new file with mode: 0644]
gtk/deprecated/gtkstylecontext.h [new file with mode: 0644]
gtk/deprecated/gtkstylecontextprivate.h [new file with mode: 0644]
gtk/deprecated/meson.build
gtk/gtk.h
gtk/gtkcsscolorvalue.c
gtk/gtkcsskeyframes.c
gtk/gtkcssnodeprivate.h
gtk/gtkcssselector.c
gtk/gtkcsstypes.c
gtk/gtkcsswidgetnode.c
gtk/gtkicontheme.c
gtk/gtkimcontextime.c
gtk/gtknotebook.c
gtk/gtkpopovercontent.c
gtk/gtksettings.c
gtk/gtksnapshot.c
gtk/gtkstylecontext.c [deleted file]
gtk/gtkstylecontext.h [deleted file]
gtk/gtkstylecontextprivate.h [deleted file]
gtk/gtkstylepropertyprivate.h
gtk/gtkstyleprovider.c
gtk/gtkstyleprovider.h
gtk/gtkstyleproviderprivate.h
gtk/gtktextutil.c
gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwidgetprivate.h
gtk/inspector/css-editor.c
gtk/inspector/graphrenderer.c
gtk/inspector/window.c
gtk/meson.build

diff --git a/gtk/deprecated/gtkstylecontext.c b/gtk/deprecated/gtkstylecontext.c
new file mode 100644 (file)
index 0000000..72e30e2
--- /dev/null
@@ -0,0 +1,982 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 2010 Carlos Garnacho <carlosg@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include "gtkstylecontextprivate.h"
+
+#include <gdk/gdk.h>
+
+#include "gtkcsscolorvalueprivate.h"
+#include "gtkcssnumbervalueprivate.h"
+#include "gtkcsstransientnodeprivate.h"
+#include "gtkdebug.h"
+#include "gtkprivate.h"
+#include "gtksettings.h"
+#include "gtksettingsprivate.h"
+#include "deprecated/gtkrender.h"
+
+
+/**
+ * GtkStyleContext:
+ *
+ * `GtkStyleContext` stores styling information affecting a widget.
+ *
+ * In order to construct the final style information, `GtkStyleContext`
+ * queries information from all attached `GtkStyleProviders`. Style
+ * providers can be either attached explicitly to the context through
+ * [method@Gtk.StyleContext.add_provider], or to the display through
+ * [func@Gtk.StyleContext.add_provider_for_display]. The resulting
+ * style is a combination of all providers’ information in priority order.
+ *
+ * For GTK widgets, any `GtkStyleContext` returned by
+ * [method@Gtk.Widget.get_style_context] will already have a `GdkDisplay`
+ * and RTL/LTR information set. The style context will also be updated
+ * automatically if any of these settings change on the widget.
+ *
+ * # Style Classes
+ *
+ * Widgets can add style classes to their context, which can be used to associate
+ * different styles by class. The documentation for individual widgets lists
+ * which style classes it uses itself, and which style classes may be added by
+ * applications to affect their appearance.
+ *
+ * # Custom styling in UI libraries and applications
+ *
+ * If you are developing a library with custom widgets that render differently
+ * than standard components, you may need to add a `GtkStyleProvider` yourself
+ * with the %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK priority, either a
+ * `GtkCssProvider` or a custom object implementing the `GtkStyleProvider`
+ * interface. This way themes may still attempt to style your UI elements in
+ * a different way if needed so.
+ *
+ * If you are using custom styling on an applications, you probably want then
+ * to make your style information prevail to the theme’s, so you must use
+ * a `GtkStyleProvider` with the %GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
+ * priority, keep in mind that the user settings in
+ * `XDG_CONFIG_HOME/gtk-4.0/gtk.css` will
+ * still take precedence over your changes, as it uses the
+ * %GTK_STYLE_PROVIDER_PRIORITY_USER priority.
+ */
+
+#define CURSOR_ASPECT_RATIO (0.04)
+
+struct _GtkStyleContextPrivate
+{
+  GdkDisplay *display;
+
+  guint cascade_changed_id;
+  GtkStyleCascade *cascade;
+  GtkCssNode *cssnode;
+  GSList *saved_nodes;
+};
+typedef struct _GtkStyleContextPrivate GtkStyleContextPrivate;
+
+enum {
+  PROP_0,
+  PROP_DISPLAY,
+  LAST_PROP
+};
+
+static GParamSpec *properties[LAST_PROP] = { NULL, };
+
+static void gtk_style_context_finalize (GObject *object);
+
+static void gtk_style_context_impl_set_property (GObject      *object,
+                                                 guint         prop_id,
+                                                 const GValue *value,
+                                                 GParamSpec   *pspec);
+static void gtk_style_context_impl_get_property (GObject      *object,
+                                                 guint         prop_id,
+                                                 GValue       *value,
+                                                 GParamSpec   *pspec);
+
+static GtkCssNode * gtk_style_context_get_root (GtkStyleContext *context);
+
+G_DEFINE_TYPE_WITH_PRIVATE (GtkStyleContext, gtk_style_context, G_TYPE_OBJECT)
+
+static void
+gtk_style_context_class_init (GtkStyleContextClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = gtk_style_context_finalize;
+  object_class->set_property = gtk_style_context_impl_set_property;
+  object_class->get_property = gtk_style_context_impl_get_property;
+
+  properties[PROP_DISPLAY] =
+      g_param_spec_object ("display", NULL, NULL,
+                           GDK_TYPE_DISPLAY,
+                           GTK_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, LAST_PROP, properties);
+}
+
+static void
+gtk_style_context_pop_style_node (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (priv->saved_nodes != NULL);
+
+  if (GTK_IS_CSS_TRANSIENT_NODE (priv->cssnode))
+    gtk_css_node_set_parent (priv->cssnode, NULL);
+  g_object_unref (priv->cssnode);
+  priv->cssnode = priv->saved_nodes->data;
+  priv->saved_nodes = g_slist_remove (priv->saved_nodes, priv->cssnode);
+}
+
+static void
+gtk_style_context_cascade_changed (GtkStyleCascade *cascade,
+                                   GtkStyleContext *context)
+{
+  gtk_css_node_invalidate_style_provider (gtk_style_context_get_root (context));
+}
+
+static void
+gtk_style_context_set_cascade (GtkStyleContext *context,
+                               GtkStyleCascade *cascade)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  if (priv->cascade == cascade)
+    return;
+
+  if (priv->cascade)
+    {
+      g_signal_handler_disconnect (priv->cascade, priv->cascade_changed_id);
+      priv->cascade_changed_id = 0;
+      g_object_unref (priv->cascade);
+    }
+
+  if (cascade)
+    {
+      g_object_ref (cascade);
+      priv->cascade_changed_id = g_signal_connect (cascade,
+                                                   "gtk-private-changed",
+                                                   G_CALLBACK (gtk_style_context_cascade_changed),
+                                                   context);
+    }
+
+  priv->cascade = cascade;
+
+  if (cascade && priv->cssnode != NULL)
+    gtk_style_context_cascade_changed (cascade, context);
+}
+
+static void
+gtk_style_context_init (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  priv->display = gdk_display_get_default ();
+
+  if (priv->display == NULL)
+    g_error ("Can't create a GtkStyleContext without a display connection");
+
+  gtk_style_context_set_cascade (context,
+                                 _gtk_settings_get_style_cascade (gtk_settings_get_for_display (priv->display), 1));
+}
+
+static void
+gtk_style_context_finalize (GObject *object)
+{
+  GtkStyleContext *context = GTK_STYLE_CONTEXT (object);
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  while (priv->saved_nodes)
+    gtk_style_context_pop_style_node (context);
+
+  gtk_style_context_set_cascade (context, NULL);
+
+  if (priv->cssnode)
+    g_object_unref (priv->cssnode);
+
+  G_OBJECT_CLASS (gtk_style_context_parent_class)->finalize (object);
+}
+
+static void
+gtk_style_context_impl_set_property (GObject      *object,
+                                     guint         prop_id,
+                                     const GValue *value,
+                                     GParamSpec   *pspec)
+{
+  GtkStyleContext *context = GTK_STYLE_CONTEXT (object);
+
+  switch (prop_id)
+    {
+    case PROP_DISPLAY:
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+      gtk_style_context_set_display (context, g_value_get_object (value));
+G_GNUC_END_IGNORE_DEPRECATIONS
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+gtk_style_context_impl_get_property (GObject    *object,
+                                     guint       prop_id,
+                                     GValue     *value,
+                                     GParamSpec *pspec)
+{
+  GtkStyleContext *context = GTK_STYLE_CONTEXT (object);
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  switch (prop_id)
+    {
+    case PROP_DISPLAY:
+      g_value_set_object (value, priv->display);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+/* returns TRUE if someone called gtk_style_context_save() but hasn’t
+ * called gtk_style_context_restore() yet.
+ * In those situations we don’t invalidate the context when somebody
+ * changes state/classes.
+ */
+static gboolean
+gtk_style_context_is_saved (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  return priv->saved_nodes != NULL;
+}
+
+static GtkCssNode *
+gtk_style_context_get_root (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  if (priv->saved_nodes != NULL)
+    return g_slist_last (priv->saved_nodes)->data;
+  else
+    return priv->cssnode;
+}
+
+GtkStyleProvider *
+gtk_style_context_get_style_provider (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  return GTK_STYLE_PROVIDER (priv->cascade);
+}
+
+static gboolean
+gtk_style_context_has_custom_cascade (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GtkSettings *settings = gtk_settings_get_for_display (priv->display);
+
+  return priv->cascade != _gtk_settings_get_style_cascade (settings, _gtk_style_cascade_get_scale (priv->cascade));
+}
+
+GtkCssStyle *
+gtk_style_context_lookup_style (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  /* Code will recreate style if it was changed */
+  return gtk_css_node_get_style (priv->cssnode);
+}
+
+GtkCssNode*
+gtk_style_context_get_node (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  return priv->cssnode;
+}
+
+GtkStyleContext *
+gtk_style_context_new_for_node (GtkCssNode *node)
+{
+  GtkStyleContext *context;
+  GtkStyleContextPrivate *priv;
+
+  g_return_val_if_fail (GTK_IS_CSS_NODE (node), NULL);
+
+  context = g_object_new (GTK_TYPE_STYLE_CONTEXT, NULL);
+  priv = gtk_style_context_get_instance_private (context);
+  priv->cssnode = g_object_ref (node);
+
+  return context;
+}
+
+/**
+ * gtk_style_context_add_provider:
+ * @context: a `GtkStyleContext`
+ * @provider: a `GtkStyleProvider`
+ * @priority: the priority of the style provider. The lower
+ *   it is, the earlier it will be used in the style construction.
+ *   Typically this will be in the range between
+ *   %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK and
+ *   %GTK_STYLE_PROVIDER_PRIORITY_USER
+ *
+ * Adds a style provider to @context, to be used in style construction.
+ *
+ * Note that a style provider added by this function only affects
+ * the style of the widget to which @context belongs. If you want
+ * to affect the style of all widgets, use
+ * [func@Gtk.StyleContext.add_provider_for_display].
+ *
+ * Note: If both priorities are the same, a `GtkStyleProvider`
+ * added through this function takes precedence over another added
+ * through [func@Gtk.StyleContext.add_provider_for_display].
+ *
+ * Deprecated: 4.10: Use style classes instead
+ */
+void
+gtk_style_context_add_provider (GtkStyleContext  *context,
+                                GtkStyleProvider *provider,
+                                guint             priority)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
+
+  if (!gtk_style_context_has_custom_cascade (context))
+    {
+      GtkStyleCascade *new_cascade;
+
+      new_cascade = _gtk_style_cascade_new ();
+      _gtk_style_cascade_set_scale (new_cascade, _gtk_style_cascade_get_scale (priv->cascade));
+      _gtk_style_cascade_set_parent (new_cascade,
+                                     _gtk_settings_get_style_cascade (gtk_settings_get_for_display (priv->display), 1));
+      _gtk_style_cascade_add_provider (new_cascade, provider, priority);
+      gtk_style_context_set_cascade (context, new_cascade);
+      g_object_unref (new_cascade);
+    }
+  else
+    {
+      _gtk_style_cascade_add_provider (priv->cascade, provider, priority);
+    }
+}
+
+/**
+ * gtk_style_context_remove_provider:
+ * @context: a `GtkStyleContext`
+ * @provider: a `GtkStyleProvider`
+ *
+ * Removes @provider from the style providers list in @context.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_style_context_remove_provider (GtkStyleContext  *context,
+                                   GtkStyleProvider *provider)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
+
+  if (!gtk_style_context_has_custom_cascade (context))
+    return;
+
+  _gtk_style_cascade_remove_provider (priv->cascade, provider);
+}
+
+/**
+ * gtk_style_context_set_state:
+ * @context: a `GtkStyleContext`
+ * @flags: state to represent
+ *
+ * Sets the state to be used for style matching.
+ *
+ * Deprecated: 4.10: You should not use this api
+ */
+void
+gtk_style_context_set_state (GtkStyleContext *context,
+                             GtkStateFlags    flags)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  gtk_css_node_set_state (priv->cssnode, flags);
+}
+
+/**
+ * gtk_style_context_get_state:
+ * @context: a `GtkStyleContext`
+ *
+ * Returns the state used for style matching.
+ *
+ * This method should only be used to retrieve the `GtkStateFlags`
+ * to pass to `GtkStyleContext` methods, like
+ * [method@Gtk.StyleContext.get_padding].
+ * If you need to retrieve the current state of a `GtkWidget`, use
+ * [method@Gtk.Widget.get_state_flags].
+ *
+ * Returns: the state flags
+ *
+ * Deprecated: 4.10: Use [method@Gtk.Widget.get_state_flags] instead
+ **/
+GtkStateFlags
+gtk_style_context_get_state (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), 0);
+
+  return gtk_css_node_get_state (priv->cssnode);
+}
+
+/**
+ * gtk_style_context_set_scale:
+ * @context: a `GtkStyleContext`
+ * @scale: scale
+ *
+ * Sets the scale to use when getting image assets for the style.
+ *
+ * Deprecated: 4.10: You should not use this api
+ **/
+void
+gtk_style_context_set_scale (GtkStyleContext *context,
+                             int              scale)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  if (scale == _gtk_style_cascade_get_scale (priv->cascade))
+    return;
+
+  if (gtk_style_context_has_custom_cascade (context))
+    {
+      _gtk_style_cascade_set_scale (priv->cascade, scale);
+    }
+  else
+    {
+      GtkStyleCascade *new_cascade;
+
+      new_cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (priv->display),
+                                                     scale);
+      gtk_style_context_set_cascade (context, new_cascade);
+    }
+}
+
+/**
+ * gtk_style_context_get_scale:
+ * @context: a `GtkStyleContext`
+ *
+ * Returns the scale used for assets.
+ *
+ * Returns: the scale
+ *
+ * Deprecated 4.10: Use [method@Gtk.Widget.get_scale_factor] instead
+ **/
+int
+gtk_style_context_get_scale (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), 0);
+
+  return _gtk_style_cascade_get_scale (priv->cascade);
+}
+
+/*
+ * gtk_style_context_save_to_node:
+ * @context: a `GtkStyleContext`
+ * @node: the node to save to
+ *
+ * Saves the @context state to a node.
+ *
+ * This allows temporary modifications done through
+ * [method@Gtk.StyleContext.add_class],
+ * [method@Gtk.StyleContext.remove_class],
+ * [method@Gtk.StyleContext.set_state] etc.
+ *
+ * Rendering using [func@Gtk.render_background] or similar
+ * functions are done using the given @node.
+ *
+ * To undo, call [method@Gtk.StyleContext.restore].
+ * The matching call to [method@Gtk.StyleContext.restore]
+ * must be done before GTK returns to the main loop.
+ */
+void
+gtk_style_context_save_to_node (GtkStyleContext *context,
+                                GtkCssNode      *node)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (GTK_IS_CSS_NODE (node));
+
+  priv->saved_nodes = g_slist_prepend (priv->saved_nodes, priv->cssnode);
+  priv->cssnode = g_object_ref (node);
+}
+
+/**
+ * gtk_style_context_save:
+ * @context: a `GtkStyleContext`
+ *
+ * Saves the @context state.
+ *
+ * This allows temporary modifications done through
+ * [method@Gtk.StyleContext.add_class],
+ * [method@Gtk.StyleContext.remove_class],
+ * [method@Gtk.StyleContext.set_state] to be quickly
+ * reverted in one go through [method@Gtk.StyleContext.restore].
+ *
+ * The matching call to [method@Gtk.StyleContext.restore]
+ * must be done before GTK returns to the main loop.
+ *
+ * Deprecated: 4.10: This API will be removed in GTK 5
+ **/
+void
+gtk_style_context_save (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GtkCssNode *cssnode;
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+
+  /* Make sure we have the style existing. It is the
+   * parent of the new saved node after all.
+   */
+  if (!gtk_style_context_is_saved (context))
+    gtk_style_context_lookup_style (context);
+
+  cssnode = gtk_css_transient_node_new (priv->cssnode);
+  gtk_css_node_set_parent (cssnode, gtk_style_context_get_root (context));
+  gtk_style_context_save_to_node (context, cssnode);
+
+  g_object_unref (cssnode);
+}
+
+/**
+ * gtk_style_context_restore:
+ * @context: a `GtkStyleContext`
+ *
+ * Restores @context state to a previous stage.
+ *
+ * See [method@Gtk.StyleContext.save].
+ *
+ * Deprecated: 4.10: This API will be removed in GTK 5
+ **/
+void
+gtk_style_context_restore (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  if (priv->saved_nodes == NULL)
+    {
+      g_warning ("Unpaired gtk_style_context_restore() call");
+      return;
+    }
+
+  gtk_style_context_pop_style_node (context);
+}
+
+/**
+ * gtk_style_context_add_class:
+ * @context: a `GtkStyleContext`
+ * @class_name: class name to use in styling
+ *
+ * Adds a style class to @context, so later uses of the
+ * style context will make use of this new class for styling.
+ *
+ * In the CSS file format, a `GtkEntry` defining a “search”
+ * class, would be matched by:
+ *
+ * ```css
+ * entry.search { ... }
+ * ```
+ *
+ * While any widget defining a “search” class would be
+ * matched by:
+ * ```css
+ * .search { ... }
+ * ```
+ * Deprecated: 4.10: Use [method@Gtk.Widget.add_css_class] instead
+ */
+void
+gtk_style_context_add_class (GtkStyleContext *context,
+                             const char      *class_name)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GQuark class_quark;
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (class_name != NULL);
+
+  class_quark = g_quark_from_string (class_name);
+
+  gtk_css_node_add_class (priv->cssnode, class_quark);
+}
+
+/**
+ * gtk_style_context_remove_class:
+ * @context: a `GtkStyleContext`
+ * @class_name: class name to remove
+ *
+ * Removes @class_name from @context.
+ *
+ * Deprecated: 4.10: Use [method@Gtk.Widget.remove_css_class] instead
+ */
+void
+gtk_style_context_remove_class (GtkStyleContext *context,
+                                const char      *class_name)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GQuark class_quark;
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (class_name != NULL);
+
+  class_quark = g_quark_try_string (class_name);
+  if (!class_quark)
+    return;
+
+  gtk_css_node_remove_class (priv->cssnode, class_quark);
+}
+
+/**
+ * gtk_style_context_has_class:
+ * @context: a `GtkStyleContext`
+ * @class_name: a class name
+ *
+ * Returns %TRUE if @context currently has defined the
+ * given class name.
+ *
+ * Returns: %TRUE if @context has @class_name defined
+ *
+ * Deprecated: 4.10: Use [method@Gtk.Widget.has_css_class] instead
+ **/
+gboolean
+gtk_style_context_has_class (GtkStyleContext *context,
+                             const char      *class_name)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GQuark class_quark;
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
+  g_return_val_if_fail (class_name != NULL, FALSE);
+
+  class_quark = g_quark_try_string (class_name);
+  if (!class_quark)
+    return FALSE;
+
+  return gtk_css_node_has_class (priv->cssnode, class_quark);
+}
+
+GtkCssValue *
+_gtk_style_context_peek_property (GtkStyleContext *context,
+                                  guint            property_id)
+{
+  GtkCssStyle *values = gtk_style_context_lookup_style (context);
+
+  return gtk_css_style_get_value (values, property_id);
+}
+
+/**
+ * gtk_style_context_set_display:
+ * @context: a `GtkStyleContext`
+ * @display: a `GdkDisplay`
+ *
+ * Attaches @context to the given display.
+ *
+ * The display is used to add style information from “global”
+ * style providers, such as the display's `GtkSettings` instance.
+ *
+ * If you are using a `GtkStyleContext` returned from
+ * [method@Gtk.Widget.get_style_context], you do not need to
+ * call this yourself.
+ *
+ * Deprecated: 4.10: You should not use this api
+ */
+void
+gtk_style_context_set_display (GtkStyleContext *context,
+                               GdkDisplay      *display)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GtkStyleCascade *display_cascade;
+
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+
+  if (priv->display == display)
+    return;
+
+  if (gtk_style_context_has_custom_cascade (context))
+    {
+      display_cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display), 1);
+      _gtk_style_cascade_set_parent (priv->cascade, display_cascade);
+    }
+  else
+    {
+      display_cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display),
+                                                        _gtk_style_cascade_get_scale (priv->cascade));
+      gtk_style_context_set_cascade (context, display_cascade);
+    }
+
+  priv->display = display;
+
+  g_object_notify_by_pspec (G_OBJECT (context), properties[PROP_DISPLAY]);
+}
+
+/**
+ * gtk_style_context_get_display:
+ * @context: a `GtkStyleContext`
+ *
+ * Returns the `GdkDisplay` to which @context is attached.
+ *
+ * Returns: (transfer none): a `GdkDisplay`.
+ *
+ * Deprecated: 4.10: Use [method@Gtk.Widget.get_display] instead
+ */
+GdkDisplay *
+gtk_style_context_get_display (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+
+  return priv->display;
+}
+
+static gboolean
+gtk_style_context_resolve_color (GtkStyleContext    *context,
+                                 GtkCssValue        *color,
+                                 GdkRGBA            *result)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GtkCssValue *val;
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
+  g_return_val_if_fail (color != NULL, FALSE);
+  g_return_val_if_fail (result != NULL, FALSE);
+
+  val = _gtk_css_color_value_resolve (color,
+                                      GTK_STYLE_PROVIDER (priv->cascade),
+                                      _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR),
+                                      NULL);
+  if (val == NULL)
+    return FALSE;
+
+  *result = *gtk_css_color_value_get_rgba (val);
+  _gtk_css_value_unref (val);
+  return TRUE;
+}
+
+/**
+ * gtk_style_context_lookup_color:
+ * @context: a `GtkStyleContext`
+ * @color_name: color name to lookup
+ * @color: (out): Return location for the looked up color
+ *
+ * Looks up and resolves a color name in the @context color map.
+ *
+ * Returns: %TRUE if @color_name was found and resolved, %FALSE otherwise
+ *
+ * Deprecated: 4.10: This api will be removed in GTK 5
+ */
+gboolean
+gtk_style_context_lookup_color (GtkStyleContext *context,
+                                const char      *color_name,
+                                GdkRGBA         *color)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GtkCssValue *value;
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
+  g_return_val_if_fail (color_name != NULL, FALSE);
+  g_return_val_if_fail (color != NULL, FALSE);
+
+  value = gtk_style_provider_get_color (GTK_STYLE_PROVIDER (priv->cascade), color_name);
+  if (value == NULL)
+    return FALSE;
+
+  return gtk_style_context_resolve_color (context, value, color);
+}
+
+/**
+ * gtk_style_context_get_color:
+ * @context: a `GtkStyleContext`
+ * @color: (out): return value for the foreground color
+ *
+ * Gets the foreground color for a given state.
+ *
+ * Deprecated: 4.10: This api will be removed in GTK 5
+ */
+void
+gtk_style_context_get_color (GtkStyleContext *context,
+                             GdkRGBA         *color)
+{
+  g_return_if_fail (color != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  *color = *gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR));
+}
+
+/**
+ * gtk_style_context_get_border:
+ * @context: a `GtkStyleContext`
+ * @border: (out): return value for the border settings
+ *
+ * Gets the border for a given state as a `GtkBorder`.
+ *
+ * Deprecated: 4.10: This api will be removed in GTK 5
+ */
+void
+gtk_style_context_get_border (GtkStyleContext *context,
+                              GtkBorder       *border)
+{
+  GtkCssStyle *style;
+
+  g_return_if_fail (border != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  style = gtk_style_context_lookup_style (context);
+
+  border->top = round (_gtk_css_number_value_get (style->border->border_top_width, 100));
+  border->right = round (_gtk_css_number_value_get (style->border->border_right_width, 100));
+  border->bottom = round (_gtk_css_number_value_get (style->border->border_bottom_width, 100));
+  border->left = round (_gtk_css_number_value_get (style->border->border_left_width, 100));
+}
+
+/**
+ * gtk_style_context_get_padding:
+ * @context: a `GtkStyleContext`
+ * @padding: (out): return value for the padding settings
+ *
+ * Gets the padding for a given state as a `GtkBorder`.
+ *
+ * Deprecated: 4.10: This api will be removed in GTK 5
+ */
+void
+gtk_style_context_get_padding (GtkStyleContext *context,
+                               GtkBorder       *padding)
+{
+  GtkCssStyle *style;
+
+  g_return_if_fail (padding != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  style = gtk_style_context_lookup_style (context);
+
+  padding->top = round (_gtk_css_number_value_get (style->size->padding_top, 100));
+  padding->right = round (_gtk_css_number_value_get (style->size->padding_right, 100));
+  padding->bottom = round (_gtk_css_number_value_get (style->size->padding_bottom, 100));
+  padding->left = round (_gtk_css_number_value_get (style->size->padding_left, 100));
+}
+
+/**
+ * gtk_style_context_get_margin:
+ * @context: a `GtkStyleContext`
+ * @margin: (out): return value for the margin settings
+ *
+ * Gets the margin for a given state as a `GtkBorder`.
+ *
+ * Deprecated: 4.10: This api will be removed in GTK 5
+ */
+void
+gtk_style_context_get_margin (GtkStyleContext *context,
+                              GtkBorder       *margin)
+{
+  GtkCssStyle *style;
+
+  g_return_if_fail (margin != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  style = gtk_style_context_lookup_style (context);
+
+  margin->top = round (_gtk_css_number_value_get (style->size->margin_top, 100));
+  margin->right = round (_gtk_css_number_value_get (style->size->margin_right, 100));
+  margin->bottom = round (_gtk_css_number_value_get (style->size->margin_bottom, 100));
+  margin->left = round (_gtk_css_number_value_get (style->size->margin_left, 100));
+}
+
+void
+_gtk_style_context_get_cursor_color (GtkStyleContext *context,
+                                     GdkRGBA         *primary_color,
+                                     GdkRGBA         *secondary_color)
+{
+  GtkCssStyle *style;
+
+  style = gtk_style_context_lookup_style (context);
+
+  if (primary_color)
+    *primary_color = *gtk_css_color_value_get_rgba (style->font->caret_color ? style->font->caret_color : style->core->color);
+
+  if (secondary_color)
+    *secondary_color = *gtk_css_color_value_get_rgba (style->font->secondary_caret_color ? style->font->secondary_caret_color : style->core->color);
+}
+
+/**
+ * GtkStyleContextPrintFlags:
+ * @GTK_STYLE_CONTEXT_PRINT_NONE: Default value.
+ * @GTK_STYLE_CONTEXT_PRINT_RECURSE: Print the entire tree of
+ *   CSS nodes starting at the style context's node
+ * @GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE: Show the values of the
+ *   CSS properties for each node
+ * @GTK_STYLE_CONTEXT_PRINT_SHOW_CHANGE: Show information about
+ *   what changes affect the styles
+ *
+ * Flags that modify the behavior of gtk_style_context_to_string().
+ *
+ * New values may be added to this enumeration.
+ */
+
+/**
+ * gtk_style_context_to_string:
+ * @context: a `GtkStyleContext`
+ * @flags: Flags that determine what to print
+ *
+ * Converts the style context into a string representation.
+ *
+ * The string representation always includes information about
+ * the name, state, id, visibility and style classes of the CSS
+ * node that is backing @context. Depending on the flags, more
+ * information may be included.
+ *
+ * This function is intended for testing and debugging of the
+ * CSS implementation in GTK. There are no guarantees about
+ * the format of the returned string, it may change.
+ *
+ * Returns: a newly allocated string representing @context
+ *
+ * Deprecated: 4.10: This api will be removed in GTK 5
+ */
+char *
+gtk_style_context_to_string (GtkStyleContext           *context,
+                             GtkStyleContextPrintFlags  flags)
+{
+  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
+  GString *string;
+
+  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+
+  string = g_string_new ("");
+
+  gtk_css_node_print (priv->cssnode, flags, string, 0);
+
+  return g_string_free (string, FALSE);
+}
diff --git a/gtk/deprecated/gtkstylecontext.h b/gtk/deprecated/gtkstylecontext.h
new file mode 100644 (file)
index 0000000..b1e9244
--- /dev/null
@@ -0,0 +1,140 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 2010 Carlos Garnacho <carlosg@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GTK_STYLE_CONTEXT_H__
+#define __GTK_STYLE_CONTEXT_H__
+
+#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
+#error "Only <gtk/gtk.h> can be included directly."
+#endif
+
+#include <gtk/css/gtkcss.h>
+
+#include <gtk/gtkborder.h>
+#include <gtk/gtkstyleprovider.h>
+#include <gtk/gtktypes.h>
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_STYLE_CONTEXT         (gtk_style_context_get_type ())
+#define GTK_STYLE_CONTEXT(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_STYLE_CONTEXT, GtkStyleContext))
+#define GTK_STYLE_CONTEXT_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST    ((c), GTK_TYPE_STYLE_CONTEXT, GtkStyleContextClass))
+#define GTK_IS_STYLE_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_STYLE_CONTEXT))
+#define GTK_IS_STYLE_CONTEXT_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE    ((c), GTK_TYPE_STYLE_CONTEXT))
+#define GTK_STYLE_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS  ((o), GTK_TYPE_STYLE_CONTEXT, GtkStyleContextClass))
+
+typedef struct _GtkStyleContextClass GtkStyleContextClass;
+
+struct _GtkStyleContext
+{
+  GObject parent_object;
+};
+
+struct _GtkStyleContextClass
+{
+  GObjectClass parent_class;
+
+  void (* changed) (GtkStyleContext *context);
+
+  /* Padding for future expansion */
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+};
+
+
+GDK_AVAILABLE_IN_ALL
+GType gtk_style_context_get_type (void) G_GNUC_CONST;
+
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_add_provider    (GtkStyleContext  *context,
+                                        GtkStyleProvider *provider,
+                                        guint             priority);
+
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_remove_provider (GtkStyleContext  *context,
+                                        GtkStyleProvider *provider);
+
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_save    (GtkStyleContext *context);
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_restore (GtkStyleContext *context);
+
+GDK_DEPRECATED_IN_4_10
+void          gtk_style_context_set_state    (GtkStyleContext *context,
+                                              GtkStateFlags    flags);
+GDK_DEPRECATED_IN_4_10
+GtkStateFlags gtk_style_context_get_state    (GtkStyleContext *context);
+
+GDK_DEPRECATED_IN_4_10
+void          gtk_style_context_set_scale    (GtkStyleContext *context,
+                                              int              scale);
+GDK_DEPRECATED_IN_4_10
+int           gtk_style_context_get_scale    (GtkStyleContext *context);
+
+GDK_DEPRECATED_IN_4_10
+void     gtk_style_context_add_class    (GtkStyleContext *context,
+                                         const char      *class_name);
+GDK_DEPRECATED_IN_4_10
+void     gtk_style_context_remove_class (GtkStyleContext *context,
+                                         const char      *class_name);
+GDK_DEPRECATED_IN_4_10
+gboolean gtk_style_context_has_class    (GtkStyleContext *context,
+                                         const char      *class_name);
+
+GDK_DEPRECATED_IN_4_10
+void        gtk_style_context_set_display (GtkStyleContext *context,
+                                           GdkDisplay      *display);
+GDK_DEPRECATED_IN_4_10
+GdkDisplay *gtk_style_context_get_display (GtkStyleContext *context);
+
+GDK_DEPRECATED_IN_4_10
+gboolean gtk_style_context_lookup_color (GtkStyleContext *context,
+                                         const char      *color_name,
+                                         GdkRGBA         *color);
+
+/* Some helper functions to retrieve most common properties */
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_get_color            (GtkStyleContext *context,
+                                             GdkRGBA         *color);
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_get_border           (GtkStyleContext *context,
+                                             GtkBorder       *border);
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_get_padding          (GtkStyleContext *context,
+                                             GtkBorder       *padding);
+GDK_DEPRECATED_IN_4_10
+void gtk_style_context_get_margin           (GtkStyleContext *context,
+                                             GtkBorder       *margin);
+
+typedef enum {
+  GTK_STYLE_CONTEXT_PRINT_NONE         = 0,
+  GTK_STYLE_CONTEXT_PRINT_RECURSE      = 1 << 0,
+  GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE   = 1 << 1,
+  GTK_STYLE_CONTEXT_PRINT_SHOW_CHANGE  = 1 << 2
+} GtkStyleContextPrintFlags;
+
+GDK_DEPRECATED_IN_4_10
+char * gtk_style_context_to_string (GtkStyleContext           *context,
+                                    GtkStyleContextPrintFlags  flags);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkStyleContext, g_object_unref)
+
+G_END_DECLS
+
+#endif /* __GTK_STYLE_CONTEXT_H__ */
diff --git a/gtk/deprecated/gtkstylecontextprivate.h b/gtk/deprecated/gtkstylecontextprivate.h
new file mode 100644 (file)
index 0000000..4cab724
--- /dev/null
@@ -0,0 +1,47 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 2010 Carlos Garnacho <carlosg@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GTK_STYLE_CONTEXT_PRIVATE_H__
+#define __GTK_STYLE_CONTEXT_PRIVATE_H__
+
+#include "gtkstylecontext.h"
+
+#include "gtkcssnodeprivate.h"
+#include "gtkstyleproviderprivate.h"
+#include "gtkcssvalueprivate.h"
+
+G_BEGIN_DECLS
+
+GtkStyleContext *gtk_style_context_new_for_node              (GtkCssNode      *node);
+
+GtkCssNode     *gtk_style_context_get_node                   (GtkStyleContext *context);
+GtkStyleProvider *
+                gtk_style_context_get_style_provider         (GtkStyleContext *context);
+
+void            gtk_style_context_save_to_node               (GtkStyleContext *context,
+                                                              GtkCssNode      *node);
+
+GtkCssStyle *   gtk_style_context_lookup_style               (GtkStyleContext *context);
+GtkCssValue   * _gtk_style_context_peek_property             (GtkStyleContext *context,
+                                                              guint            property_id);
+void           _gtk_style_context_get_cursor_color           (GtkStyleContext    *context,
+                                                              GdkRGBA            *primary_color,
+                                                              GdkRGBA            *secondary_color);
+
+G_END_DECLS
+
+#endif /* __GTK_STYLE_CONTEXT_PRIVATE_H__ */
index f6f90dd64b767bff9dfb365703f2e58d89ae3552..cd5b1821706c343b2f43408549c3325bb92d1835 100644 (file)
@@ -25,6 +25,7 @@ gtk_deprecated_sources = [
   'deprecated/gtkiconview.c',
   'deprecated/gtkliststore.c',
   'deprecated/gtkrender.c',
+  'deprecated/gtkstylecontext.c',
   'deprecated/gtktreedatalist.c',
   'deprecated/gtktreednd.c',
   'deprecated/gtktreemodel.c',
@@ -65,6 +66,7 @@ gtk_deprecated_headers = [
   'deprecated/gtkiconview.h',
   'deprecated/gtkliststore.h',
   'deprecated/gtkrender.h',
+  'deprecated/gtkstylecontext.h',
   'deprecated/gtktreednd.h',
   'deprecated/gtktreemodel.h',
   'deprecated/gtktreemodelfilter.h',
index 0bbc5455c4202ec00868529a410ec19c970ebc7f..cf139b5dda96b4e234c85a1a48b14c61d80b7c5c 100644 (file)
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
 #include <gtk/gtkstringfilter.h>
 #include <gtk/gtkstringlist.h>
 #include <gtk/gtkstringsorter.h>
-#include <gtk/gtkstylecontext.h>
+#include <gtk/deprecated/gtkstylecontext.h>
 #include <gtk/gtkstyleprovider.h>
 #include <gtk/gtkswitch.h>
 #include <gtk/gtksymbolicpaintable.h>
index 54304894018174e679334f63f2f665c580a9135a..4b0b4adfe4315bb7264e5cbccf35f56434f5da99 100644 (file)
@@ -22,6 +22,8 @@
 #include "gtkcssstylepropertyprivate.h"
 #include "gtkprivate.h"
 #include "gtkstylepropertyprivate.h"
+#include "gtkcssstyleprivate.h"
+#include "gtkstyleproviderprivate.h"
 
 #include "gdk/gdkhslaprivate.h"
 #include "gdk/gdkrgbaprivate.h"
index 33d71ef067220767cbd0e1c2757da994e62729be..89c4b0b4092aa1a3b26f84940c021369da518aaa 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "gtkcsskeyframesprivate.h"
 
+#include "gtkcssstyleprivate.h"
 #include "gtkcssarrayvalueprivate.h"
 #include "gtkcssshorthandpropertyprivate.h"
 #include "gtkcssstylepropertyprivate.h"
index e696ec49bc5d4176d7b521d366fd223732124194..c713a87df695b87598197804cec501b64fad7dd2 100644 (file)
@@ -24,7 +24,7 @@
 #include "gtkcssstylechangeprivate.h"
 #include "gtkbitmaskprivate.h"
 #include "gtkcsstypesprivate.h"
-#include "gtkstylecontext.h"
+#include "deprecated/gtkstylecontext.h"
 #include "gtklistlistmodelprivate.h"
 
 G_BEGIN_DECLS
index 158110c2d169dd015dab9724e972460ccfdc2383..207d83ac7d5a3808f4993a23ef8cb4502fa0552e 100644 (file)
 #include "config.h"
 
 #include "gtkcssselectorprivate.h"
+#include "gtkcssnodeprivate.h"
 
 #include <stdlib.h>
 #include <string.h>
 
 #include "gtkcssprovider.h"
-#include "gtkstylecontextprivate.h"
 
 #include <errno.h>
 #if defined(_MSC_VER) && _MSC_VER >= 1500
index fcbb47ca8dc75e43c6662d4f0c33783114b4cd9c..a4de02742034fb639248024fdfbd288ba84dfbd0 100644 (file)
@@ -20,7 +20,6 @@
 #include "gtkcsstypesprivate.h"
 
 #include "gtkcssnumbervalueprivate.h"
-#include "gtkstylecontextprivate.h"
 
 void
 gtk_css_change_print (GtkCssChange  change,
index fcc7682832c0059029dc26d5b2b3c31a1cdb8612..c63e367bb59d9a6014a70171f31a2efb7629aac2 100644 (file)
@@ -22,7 +22,7 @@
 #include "gtkcssanimatedstyleprivate.h"
 #include "gtkprivate.h"
 #include "gtksettingsprivate.h"
-#include "gtkstylecontextprivate.h"
+#include "deprecated/gtkstylecontextprivate.h"
 #include "gtkwidgetprivate.h"
 #include "gtkwindowprivate.h"
 
index 2c66e54ea8ddc93cf94b78d1448933684e9e5c9e..c585d7bef8f3de799539b2325966d7eabc8b933a 100644 (file)
@@ -48,7 +48,6 @@
 #include "gtkprivate.h"
 #include "gtksettingsprivate.h"
 #include "gtksnapshot.h"
-#include "gtkstylecontextprivate.h"
 #include "gtkstyleproviderprivate.h"
 #include "gtksymbolicpaintable.h"
 #include "gtkwidgetprivate.h"
index e341925733b8384886cdff3209ee3222fdf9b51f..33a69f45c55d844d119dd210ca828800056da03b 100644 (file)
@@ -36,7 +36,7 @@
 #include "gdk/gdkkeysyms.h"
 #include "gdk/win32/gdkwin32.h"
 #include "gtk/gtkimmodule.h"
-#include "gtk/gtkstylecontextprivate.h"
+#include "gtk/deprecated/gtkstylecontextprivate.h"
 #include "gtk/gtkcssstyleprivate.h"
 
 /* avoid warning */
index 7e75048ce82e7251bedeaef819947529510353e7..7593a1fe637d3ac3cb79de0ba5ce5747df15c769 100644 (file)
@@ -45,7 +45,6 @@
 #include "gtkpopovermenuprivate.h"
 #include "gtkorientable.h"
 #include "gtksizerequest.h"
-#include "gtkstylecontextprivate.h"
 #include "gtkprivate.h"
 #include "gtkstack.h"
 #include "gtktypebuiltins.h"
index 49b0e4a3306f33b7eef44afbf4c0011ba9215dc7..06ca8d38ebcd0fc7f2e3f3aa72da186db269a3b9 100644 (file)
@@ -21,8 +21,8 @@
 #include "config.h"
 
 #include "gtkpopovercontentprivate.h"
-#include "gtkstylecontextprivate.h"
 
+#include "gtkcssstylechangeprivate.h"
 #include "gtkwidgetprivate.h"
 #include "gtkprivate.h"
 
index d6b97a882e3e35f54499c73c3559ea6a18d62487..62154553238b2e2272cb3c06f3b4e185381c67b3 100644 (file)
@@ -23,7 +23,7 @@
 #include "gtkcssproviderprivate.h"
 #include "gtkprivate.h"
 #include "gtkscrolledwindow.h"
-#include "gtkstylecontextprivate.h"
+#include "deprecated/gtkstylecontextprivate.h"
 #include "gtkstyleproviderprivate.h"
 #include "gtktypebuiltins.h"
 #include "gtkversion.h"
index 90cbbb8833cb65985f65f70674f291b0778ff992..7c17a6072829f0c03dfb4de9eeba72d8cfac6434 100644 (file)
@@ -24,7 +24,6 @@
 #include "gtkcssshadowvalueprivate.h"
 #include "gtkdebug.h"
 #include "gtkrendernodepaintableprivate.h"
-#include "gtkstylecontextprivate.h"
 #include "gsktransformprivate.h"
 
 #include "gdk/gdkrgbaprivate.h"
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
deleted file mode 100644 (file)
index 18c90bf..0000000
+++ /dev/null
@@ -1,999 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 2010 Carlos Garnacho <carlosg@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include "gtkstylecontextprivate.h"
-
-#include <gdk/gdk.h>
-
-#include "gtkcsscolorvalueprivate.h"
-#include "gtkcssnumbervalueprivate.h"
-#include "gtkcsstransientnodeprivate.h"
-#include "gtkdebug.h"
-#include "gtkprivate.h"
-#include "gtksettings.h"
-#include "gtksettingsprivate.h"
-#include "deprecated/gtkrender.h"
-
-
-/**
- * GtkStyleContext:
- *
- * `GtkStyleContext` stores styling information affecting a widget.
- *
- * In order to construct the final style information, `GtkStyleContext`
- * queries information from all attached `GtkStyleProviders`. Style
- * providers can be either attached explicitly to the context through
- * [method@Gtk.StyleContext.add_provider], or to the display through
- * [func@Gtk.StyleContext.add_provider_for_display]. The resulting
- * style is a combination of all providers’ information in priority order.
- *
- * For GTK widgets, any `GtkStyleContext` returned by
- * [method@Gtk.Widget.get_style_context] will already have a `GdkDisplay`
- * and RTL/LTR information set. The style context will also be updated
- * automatically if any of these settings change on the widget.
- *
- * # Style Classes
- *
- * Widgets can add style classes to their context, which can be used to associate
- * different styles by class. The documentation for individual widgets lists
- * which style classes it uses itself, and which style classes may be added by
- * applications to affect their appearance.
- *
- * # Custom styling in UI libraries and applications
- *
- * If you are developing a library with custom widgets that render differently
- * than standard components, you may need to add a `GtkStyleProvider` yourself
- * with the %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK priority, either a
- * `GtkCssProvider` or a custom object implementing the `GtkStyleProvider`
- * interface. This way themes may still attempt to style your UI elements in
- * a different way if needed so.
- *
- * If you are using custom styling on an applications, you probably want then
- * to make your style information prevail to the theme’s, so you must use
- * a `GtkStyleProvider` with the %GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
- * priority, keep in mind that the user settings in
- * `XDG_CONFIG_HOME/gtk-4.0/gtk.css` will
- * still take precedence over your changes, as it uses the
- * %GTK_STYLE_PROVIDER_PRIORITY_USER priority.
- */
-
-#define CURSOR_ASPECT_RATIO (0.04)
-
-struct _GtkStyleContextPrivate
-{
-  GdkDisplay *display;
-
-  guint cascade_changed_id;
-  GtkStyleCascade *cascade;
-  GtkCssNode *cssnode;
-  GSList *saved_nodes;
-};
-typedef struct _GtkStyleContextPrivate GtkStyleContextPrivate;
-
-enum {
-  PROP_0,
-  PROP_DISPLAY,
-  LAST_PROP
-};
-
-static GParamSpec *properties[LAST_PROP] = { NULL, };
-
-static void gtk_style_context_finalize (GObject *object);
-
-static void gtk_style_context_impl_set_property (GObject      *object,
-                                                 guint         prop_id,
-                                                 const GValue *value,
-                                                 GParamSpec   *pspec);
-static void gtk_style_context_impl_get_property (GObject      *object,
-                                                 guint         prop_id,
-                                                 GValue       *value,
-                                                 GParamSpec   *pspec);
-
-static GtkCssNode * gtk_style_context_get_root (GtkStyleContext *context);
-
-G_DEFINE_TYPE_WITH_PRIVATE (GtkStyleContext, gtk_style_context, G_TYPE_OBJECT)
-
-static void
-gtk_style_context_class_init (GtkStyleContextClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  object_class->finalize = gtk_style_context_finalize;
-  object_class->set_property = gtk_style_context_impl_set_property;
-  object_class->get_property = gtk_style_context_impl_get_property;
-
-  properties[PROP_DISPLAY] =
-      g_param_spec_object ("display", NULL, NULL,
-                           GDK_TYPE_DISPLAY,
-                           GTK_PARAM_READWRITE);
-
-  g_object_class_install_properties (object_class, LAST_PROP, properties);
-}
-
-static void
-gtk_style_context_pop_style_node (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (priv->saved_nodes != NULL);
-
-  if (GTK_IS_CSS_TRANSIENT_NODE (priv->cssnode))
-    gtk_css_node_set_parent (priv->cssnode, NULL);
-  g_object_unref (priv->cssnode);
-  priv->cssnode = priv->saved_nodes->data;
-  priv->saved_nodes = g_slist_remove (priv->saved_nodes, priv->cssnode);
-}
-
-static void
-gtk_style_context_cascade_changed (GtkStyleCascade *cascade,
-                                   GtkStyleContext *context)
-{
-  gtk_css_node_invalidate_style_provider (gtk_style_context_get_root (context));
-}
-
-static void
-gtk_style_context_set_cascade (GtkStyleContext *context,
-                               GtkStyleCascade *cascade)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  if (priv->cascade == cascade)
-    return;
-
-  if (priv->cascade)
-    {
-      g_signal_handler_disconnect (priv->cascade, priv->cascade_changed_id);
-      priv->cascade_changed_id = 0;
-      g_object_unref (priv->cascade);
-    }
-
-  if (cascade)
-    {
-      g_object_ref (cascade);
-      priv->cascade_changed_id = g_signal_connect (cascade,
-                                                   "gtk-private-changed",
-                                                   G_CALLBACK (gtk_style_context_cascade_changed),
-                                                   context);
-    }
-
-  priv->cascade = cascade;
-
-  if (cascade && priv->cssnode != NULL)
-    gtk_style_context_cascade_changed (cascade, context);
-}
-
-static void
-gtk_style_context_init (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  priv->display = gdk_display_get_default ();
-
-  if (priv->display == NULL)
-    g_error ("Can't create a GtkStyleContext without a display connection");
-
-  gtk_style_context_set_cascade (context,
-                                 _gtk_settings_get_style_cascade (gtk_settings_get_for_display (priv->display), 1));
-}
-
-static void
-gtk_style_context_finalize (GObject *object)
-{
-  GtkStyleContext *context = GTK_STYLE_CONTEXT (object);
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  while (priv->saved_nodes)
-    gtk_style_context_pop_style_node (context);
-
-  gtk_style_context_set_cascade (context, NULL);
-
-  if (priv->cssnode)
-    g_object_unref (priv->cssnode);
-
-  G_OBJECT_CLASS (gtk_style_context_parent_class)->finalize (object);
-}
-
-static void
-gtk_style_context_impl_set_property (GObject      *object,
-                                     guint         prop_id,
-                                     const GValue *value,
-                                     GParamSpec   *pspec)
-{
-  GtkStyleContext *context = GTK_STYLE_CONTEXT (object);
-
-  switch (prop_id)
-    {
-    case PROP_DISPLAY:
-      gtk_style_context_set_display (context, g_value_get_object (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_style_context_impl_get_property (GObject    *object,
-                                     guint       prop_id,
-                                     GValue     *value,
-                                     GParamSpec *pspec)
-{
-  GtkStyleContext *context = GTK_STYLE_CONTEXT (object);
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  switch (prop_id)
-    {
-    case PROP_DISPLAY:
-      g_value_set_object (value, priv->display);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-/* returns TRUE if someone called gtk_style_context_save() but hasn’t
- * called gtk_style_context_restore() yet.
- * In those situations we don’t invalidate the context when somebody
- * changes state/classes.
- */
-static gboolean
-gtk_style_context_is_saved (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  return priv->saved_nodes != NULL;
-}
-
-static GtkCssNode *
-gtk_style_context_get_root (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  if (priv->saved_nodes != NULL)
-    return g_slist_last (priv->saved_nodes)->data;
-  else
-    return priv->cssnode;
-}
-
-GtkStyleProvider *
-gtk_style_context_get_style_provider (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  return GTK_STYLE_PROVIDER (priv->cascade);
-}
-
-static gboolean
-gtk_style_context_has_custom_cascade (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GtkSettings *settings = gtk_settings_get_for_display (priv->display);
-
-  return priv->cascade != _gtk_settings_get_style_cascade (settings, _gtk_style_cascade_get_scale (priv->cascade));
-}
-
-GtkCssStyle *
-gtk_style_context_lookup_style (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  /* Code will recreate style if it was changed */
-  return gtk_css_node_get_style (priv->cssnode);
-}
-
-GtkCssNode*
-gtk_style_context_get_node (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  return priv->cssnode;
-}
-
-GtkStyleContext *
-gtk_style_context_new_for_node (GtkCssNode *node)
-{
-  GtkStyleContext *context;
-  GtkStyleContextPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_CSS_NODE (node), NULL);
-
-  context = g_object_new (GTK_TYPE_STYLE_CONTEXT, NULL);
-  priv = gtk_style_context_get_instance_private (context);
-  priv->cssnode = g_object_ref (node);
-
-  return context;
-}
-
-/**
- * gtk_style_context_add_provider:
- * @context: a `GtkStyleContext`
- * @provider: a `GtkStyleProvider`
- * @priority: the priority of the style provider. The lower
- *   it is, the earlier it will be used in the style construction.
- *   Typically this will be in the range between
- *   %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK and
- *   %GTK_STYLE_PROVIDER_PRIORITY_USER
- *
- * Adds a style provider to @context, to be used in style construction.
- *
- * Note that a style provider added by this function only affects
- * the style of the widget to which @context belongs. If you want
- * to affect the style of all widgets, use
- * [func@Gtk.StyleContext.add_provider_for_display].
- *
- * Note: If both priorities are the same, a `GtkStyleProvider`
- * added through this function takes precedence over another added
- * through [func@Gtk.StyleContext.add_provider_for_display].
- */
-void
-gtk_style_context_add_provider (GtkStyleContext  *context,
-                                GtkStyleProvider *provider,
-                                guint             priority)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
-
-  if (!gtk_style_context_has_custom_cascade (context))
-    {
-      GtkStyleCascade *new_cascade;
-
-      new_cascade = _gtk_style_cascade_new ();
-      _gtk_style_cascade_set_scale (new_cascade, _gtk_style_cascade_get_scale (priv->cascade));
-      _gtk_style_cascade_set_parent (new_cascade,
-                                     _gtk_settings_get_style_cascade (gtk_settings_get_for_display (priv->display), 1));
-      _gtk_style_cascade_add_provider (new_cascade, provider, priority);
-      gtk_style_context_set_cascade (context, new_cascade);
-      g_object_unref (new_cascade);
-    }
-  else
-    {
-      _gtk_style_cascade_add_provider (priv->cascade, provider, priority);
-    }
-}
-
-/**
- * gtk_style_context_remove_provider:
- * @context: a `GtkStyleContext`
- * @provider: a `GtkStyleProvider`
- *
- * Removes @provider from the style providers list in @context.
- */
-void
-gtk_style_context_remove_provider (GtkStyleContext  *context,
-                                   GtkStyleProvider *provider)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
-
-  if (!gtk_style_context_has_custom_cascade (context))
-    return;
-
-  _gtk_style_cascade_remove_provider (priv->cascade, provider);
-}
-
-/**
- * gtk_style_context_add_provider_for_display:
- * @display: a `GdkDisplay`
- * @provider: a `GtkStyleProvider`
- * @priority: the priority of the style provider. The lower
- *   it is, the earlier it will be used in the style construction.
- *   Typically this will be in the range between
- *   %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK and
- *   %GTK_STYLE_PROVIDER_PRIORITY_USER
- *
- * Adds a global style provider to @display, which will be used
- * in style construction for all `GtkStyleContexts` under @display.
- *
- * GTK uses this to make styling information from `GtkSettings`
- * available.
- *
- * Note: If both priorities are the same, A `GtkStyleProvider`
- * added through [method@Gtk.StyleContext.add_provider] takes
- * precedence over another added through this function.
- **/
-void
-gtk_style_context_add_provider_for_display (GdkDisplay       *display,
-                                            GtkStyleProvider *provider,
-                                            guint             priority)
-{
-  GtkStyleCascade *cascade;
-
-  g_return_if_fail (GDK_IS_DISPLAY (display));
-  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
-  g_return_if_fail (!GTK_IS_SETTINGS (provider) || _gtk_settings_get_display (GTK_SETTINGS (provider)) == display);
-
-  cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display), 1);
-  _gtk_style_cascade_add_provider (cascade, provider, priority);
-}
-
-/**
- * gtk_style_context_remove_provider_for_display:
- * @display: a `GdkDisplay`
- * @provider: a `GtkStyleProvider`
- *
- * Removes @provider from the global style providers list in @display.
- */
-void
-gtk_style_context_remove_provider_for_display (GdkDisplay       *display,
-                                               GtkStyleProvider *provider)
-{
-  GtkStyleCascade *cascade;
-
-  g_return_if_fail (GDK_IS_DISPLAY (display));
-  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
-  g_return_if_fail (!GTK_IS_SETTINGS (provider));
-
-  cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display), 1);
-  _gtk_style_cascade_remove_provider (cascade, provider);
-}
-
-/**
- * gtk_style_context_set_state:
- * @context: a `GtkStyleContext`
- * @flags: state to represent
- *
- * Sets the state to be used for style matching.
- */
-void
-gtk_style_context_set_state (GtkStyleContext *context,
-                             GtkStateFlags    flags)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  gtk_css_node_set_state (priv->cssnode, flags);
-}
-
-/**
- * gtk_style_context_get_state:
- * @context: a `GtkStyleContext`
- *
- * Returns the state used for style matching.
- *
- * This method should only be used to retrieve the `GtkStateFlags`
- * to pass to `GtkStyleContext` methods, like
- * [method@Gtk.StyleContext.get_padding].
- * If you need to retrieve the current state of a `GtkWidget`, use
- * [method@Gtk.Widget.get_state_flags].
- *
- * Returns: the state flags
- **/
-GtkStateFlags
-gtk_style_context_get_state (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), 0);
-
-  return gtk_css_node_get_state (priv->cssnode);
-}
-
-/**
- * gtk_style_context_set_scale:
- * @context: a `GtkStyleContext`
- * @scale: scale
- *
- * Sets the scale to use when getting image assets for the style.
- **/
-void
-gtk_style_context_set_scale (GtkStyleContext *context,
-                             int              scale)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  if (scale == _gtk_style_cascade_get_scale (priv->cascade))
-    return;
-
-  if (gtk_style_context_has_custom_cascade (context))
-    {
-      _gtk_style_cascade_set_scale (priv->cascade, scale);
-    }
-  else
-    {
-      GtkStyleCascade *new_cascade;
-
-      new_cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (priv->display),
-                                                     scale);
-      gtk_style_context_set_cascade (context, new_cascade);
-    }
-}
-
-/**
- * gtk_style_context_get_scale:
- * @context: a `GtkStyleContext`
- *
- * Returns the scale used for assets.
- *
- * Returns: the scale
- **/
-int
-gtk_style_context_get_scale (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), 0);
-
-  return _gtk_style_cascade_get_scale (priv->cascade);
-}
-
-/*
- * gtk_style_context_save_to_node:
- * @context: a `GtkStyleContext`
- * @node: the node to save to
- *
- * Saves the @context state to a node.
- *
- * This allows temporary modifications done through
- * [method@Gtk.StyleContext.add_class],
- * [method@Gtk.StyleContext.remove_class],
- * [method@Gtk.StyleContext.set_state] etc.
- *
- * Rendering using [func@Gtk.render_background] or similar
- * functions are done using the given @node.
- *
- * To undo, call [method@Gtk.StyleContext.restore].
- * The matching call to [method@Gtk.StyleContext.restore]
- * must be done before GTK returns to the main loop.
- */
-void
-gtk_style_context_save_to_node (GtkStyleContext *context,
-                                GtkCssNode      *node)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (GTK_IS_CSS_NODE (node));
-
-  priv->saved_nodes = g_slist_prepend (priv->saved_nodes, priv->cssnode);
-  priv->cssnode = g_object_ref (node);
-}
-
-/**
- * gtk_style_context_save:
- * @context: a `GtkStyleContext`
- *
- * Saves the @context state.
- *
- * This allows temporary modifications done through
- * [method@Gtk.StyleContext.add_class],
- * [method@Gtk.StyleContext.remove_class],
- * [method@Gtk.StyleContext.set_state] to be quickly
- * reverted in one go through [method@Gtk.StyleContext.restore].
- *
- * The matching call to [method@Gtk.StyleContext.restore]
- * must be done before GTK returns to the main loop.
- **/
-void
-gtk_style_context_save (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GtkCssNode *cssnode;
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-
-  /* Make sure we have the style existing. It is the
-   * parent of the new saved node after all.
-   */
-  if (!gtk_style_context_is_saved (context))
-    gtk_style_context_lookup_style (context);
-
-  cssnode = gtk_css_transient_node_new (priv->cssnode);
-  gtk_css_node_set_parent (cssnode, gtk_style_context_get_root (context));
-  gtk_style_context_save_to_node (context, cssnode);
-
-  g_object_unref (cssnode);
-}
-
-/**
- * gtk_style_context_restore:
- * @context: a `GtkStyleContext`
- *
- * Restores @context state to a previous stage.
- *
- * See [method@Gtk.StyleContext.save].
- **/
-void
-gtk_style_context_restore (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  if (priv->saved_nodes == NULL)
-    {
-      g_warning ("Unpaired gtk_style_context_restore() call");
-      return;
-    }
-
-  gtk_style_context_pop_style_node (context);
-}
-
-/**
- * gtk_style_context_add_class:
- * @context: a `GtkStyleContext`
- * @class_name: class name to use in styling
- *
- * Adds a style class to @context, so later uses of the
- * style context will make use of this new class for styling.
- *
- * In the CSS file format, a `GtkEntry` defining a “search”
- * class, would be matched by:
- *
- * ```css
- * entry.search { ... }
- * ```
- *
- * While any widget defining a “search” class would be
- * matched by:
- * ```css
- * .search { ... }
- * ```
- */
-void
-gtk_style_context_add_class (GtkStyleContext *context,
-                             const char      *class_name)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GQuark class_quark;
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (class_name != NULL);
-
-  class_quark = g_quark_from_string (class_name);
-
-  gtk_css_node_add_class (priv->cssnode, class_quark);
-}
-
-/**
- * gtk_style_context_remove_class:
- * @context: a `GtkStyleContext`
- * @class_name: class name to remove
- *
- * Removes @class_name from @context.
- */
-void
-gtk_style_context_remove_class (GtkStyleContext *context,
-                                const char      *class_name)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GQuark class_quark;
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (class_name != NULL);
-
-  class_quark = g_quark_try_string (class_name);
-  if (!class_quark)
-    return;
-
-  gtk_css_node_remove_class (priv->cssnode, class_quark);
-}
-
-/**
- * gtk_style_context_has_class:
- * @context: a `GtkStyleContext`
- * @class_name: a class name
- *
- * Returns %TRUE if @context currently has defined the
- * given class name.
- *
- * Returns: %TRUE if @context has @class_name defined
- **/
-gboolean
-gtk_style_context_has_class (GtkStyleContext *context,
-                             const char      *class_name)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GQuark class_quark;
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
-  g_return_val_if_fail (class_name != NULL, FALSE);
-
-  class_quark = g_quark_try_string (class_name);
-  if (!class_quark)
-    return FALSE;
-
-  return gtk_css_node_has_class (priv->cssnode, class_quark);
-}
-
-GtkCssValue *
-_gtk_style_context_peek_property (GtkStyleContext *context,
-                                  guint            property_id)
-{
-  GtkCssStyle *values = gtk_style_context_lookup_style (context);
-
-  return gtk_css_style_get_value (values, property_id);
-}
-
-/**
- * gtk_style_context_set_display:
- * @context: a `GtkStyleContext`
- * @display: a `GdkDisplay`
- *
- * Attaches @context to the given display.
- *
- * The display is used to add style information from “global”
- * style providers, such as the display's `GtkSettings` instance.
- *
- * If you are using a `GtkStyleContext` returned from
- * [method@Gtk.Widget.get_style_context], you do not need to
- * call this yourself.
- */
-void
-gtk_style_context_set_display (GtkStyleContext *context,
-                               GdkDisplay      *display)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GtkStyleCascade *display_cascade;
-
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (GDK_IS_DISPLAY (display));
-
-  if (priv->display == display)
-    return;
-
-  if (gtk_style_context_has_custom_cascade (context))
-    {
-      display_cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display), 1);
-      _gtk_style_cascade_set_parent (priv->cascade, display_cascade);
-    }
-  else
-    {
-      display_cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display),
-                                                        _gtk_style_cascade_get_scale (priv->cascade));
-      gtk_style_context_set_cascade (context, display_cascade);
-    }
-
-  priv->display = display;
-
-  g_object_notify_by_pspec (G_OBJECT (context), properties[PROP_DISPLAY]);
-}
-
-/**
- * gtk_style_context_get_display:
- * @context: a `GtkStyleContext`
- *
- * Returns the `GdkDisplay` to which @context is attached.
- *
- * Returns: (transfer none): a `GdkDisplay`.
- */
-GdkDisplay *
-gtk_style_context_get_display (GtkStyleContext *context)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
-
-  return priv->display;
-}
-
-static gboolean
-gtk_style_context_resolve_color (GtkStyleContext    *context,
-                                 GtkCssValue        *color,
-                                 GdkRGBA            *result)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GtkCssValue *val;
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-  g_return_val_if_fail (result != NULL, FALSE);
-
-  val = _gtk_css_color_value_resolve (color,
-                                      GTK_STYLE_PROVIDER (priv->cascade),
-                                      _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR),
-                                      NULL);
-  if (val == NULL)
-    return FALSE;
-
-  *result = *gtk_css_color_value_get_rgba (val);
-  _gtk_css_value_unref (val);
-  return TRUE;
-}
-
-/**
- * gtk_style_context_lookup_color:
- * @context: a `GtkStyleContext`
- * @color_name: color name to lookup
- * @color: (out): Return location for the looked up color
- *
- * Looks up and resolves a color name in the @context color map.
- *
- * Returns: %TRUE if @color_name was found and resolved, %FALSE otherwise
- */
-gboolean
-gtk_style_context_lookup_color (GtkStyleContext *context,
-                                const char      *color_name,
-                                GdkRGBA         *color)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GtkCssValue *value;
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), FALSE);
-  g_return_val_if_fail (color_name != NULL, FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-
-  value = gtk_style_provider_get_color (GTK_STYLE_PROVIDER (priv->cascade), color_name);
-  if (value == NULL)
-    return FALSE;
-
-  return gtk_style_context_resolve_color (context, value, color);
-}
-
-/**
- * gtk_style_context_get_color:
- * @context: a `GtkStyleContext`
- * @color: (out): return value for the foreground color
- *
- * Gets the foreground color for a given state.
- */
-void
-gtk_style_context_get_color (GtkStyleContext *context,
-                             GdkRGBA         *color)
-{
-  g_return_if_fail (color != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  *color = *gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR));
-}
-
-/**
- * gtk_style_context_get_border:
- * @context: a `GtkStyleContext`
- * @border: (out): return value for the border settings
- *
- * Gets the border for a given state as a `GtkBorder`.
- */
-void
-gtk_style_context_get_border (GtkStyleContext *context,
-                              GtkBorder       *border)
-{
-  GtkCssStyle *style;
-
-  g_return_if_fail (border != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  style = gtk_style_context_lookup_style (context);
-
-  border->top = round (_gtk_css_number_value_get (style->border->border_top_width, 100));
-  border->right = round (_gtk_css_number_value_get (style->border->border_right_width, 100));
-  border->bottom = round (_gtk_css_number_value_get (style->border->border_bottom_width, 100));
-  border->left = round (_gtk_css_number_value_get (style->border->border_left_width, 100));
-}
-
-/**
- * gtk_style_context_get_padding:
- * @context: a `GtkStyleContext`
- * @padding: (out): return value for the padding settings
- *
- * Gets the padding for a given state as a `GtkBorder`.
- */
-void
-gtk_style_context_get_padding (GtkStyleContext *context,
-                               GtkBorder       *padding)
-{
-  GtkCssStyle *style;
-
-  g_return_if_fail (padding != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  style = gtk_style_context_lookup_style (context);
-
-  padding->top = round (_gtk_css_number_value_get (style->size->padding_top, 100));
-  padding->right = round (_gtk_css_number_value_get (style->size->padding_right, 100));
-  padding->bottom = round (_gtk_css_number_value_get (style->size->padding_bottom, 100));
-  padding->left = round (_gtk_css_number_value_get (style->size->padding_left, 100));
-}
-
-/**
- * gtk_style_context_get_margin:
- * @context: a `GtkStyleContext`
- * @margin: (out): return value for the margin settings
- *
- * Gets the margin for a given state as a `GtkBorder`.
- */
-void
-gtk_style_context_get_margin (GtkStyleContext *context,
-                              GtkBorder       *margin)
-{
-  GtkCssStyle *style;
-
-  g_return_if_fail (margin != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  style = gtk_style_context_lookup_style (context);
-
-  margin->top = round (_gtk_css_number_value_get (style->size->margin_top, 100));
-  margin->right = round (_gtk_css_number_value_get (style->size->margin_right, 100));
-  margin->bottom = round (_gtk_css_number_value_get (style->size->margin_bottom, 100));
-  margin->left = round (_gtk_css_number_value_get (style->size->margin_left, 100));
-}
-
-void
-_gtk_style_context_get_cursor_color (GtkStyleContext *context,
-                                     GdkRGBA         *primary_color,
-                                     GdkRGBA         *secondary_color)
-{
-  GtkCssStyle *style;
-
-  style = gtk_style_context_lookup_style (context);
-
-  if (primary_color)
-    *primary_color = *gtk_css_color_value_get_rgba (style->font->caret_color ? style->font->caret_color : style->core->color);
-
-  if (secondary_color)
-    *secondary_color = *gtk_css_color_value_get_rgba (style->font->secondary_caret_color ? style->font->secondary_caret_color : style->core->color);
-}
-
-/**
- * GtkStyleContextPrintFlags:
- * @GTK_STYLE_CONTEXT_PRINT_NONE: Default value.
- * @GTK_STYLE_CONTEXT_PRINT_RECURSE: Print the entire tree of
- *   CSS nodes starting at the style context's node
- * @GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE: Show the values of the
- *   CSS properties for each node
- * @GTK_STYLE_CONTEXT_PRINT_SHOW_CHANGE: Show information about
- *   what changes affect the styles
- *
- * Flags that modify the behavior of gtk_style_context_to_string().
- *
- * New values may be added to this enumeration.
- */
-
-/**
- * gtk_style_context_to_string:
- * @context: a `GtkStyleContext`
- * @flags: Flags that determine what to print
- *
- * Converts the style context into a string representation.
- *
- * The string representation always includes information about
- * the name, state, id, visibility and style classes of the CSS
- * node that is backing @context. Depending on the flags, more
- * information may be included.
- *
- * This function is intended for testing and debugging of the
- * CSS implementation in GTK. There are no guarantees about
- * the format of the returned string, it may change.
- *
- * Returns: a newly allocated string representing @context
- */
-char *
-gtk_style_context_to_string (GtkStyleContext           *context,
-                             GtkStyleContextPrintFlags  flags)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  GString *string;
-
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
-
-  string = g_string_new ("");
-
-  gtk_css_node_print (priv->cssnode, flags, string, 0);
-
-  return g_string_free (string, FALSE);
-}
diff --git a/gtk/gtkstylecontext.h b/gtk/gtkstylecontext.h
deleted file mode 100644 (file)
index 21462ef..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 2010 Carlos Garnacho <carlosg@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __GTK_STYLE_CONTEXT_H__
-#define __GTK_STYLE_CONTEXT_H__
-
-#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
-#error "Only <gtk/gtk.h> can be included directly."
-#endif
-
-#include <gtk/css/gtkcss.h>
-
-#include <gtk/gtkborder.h>
-#include <gtk/gtkstyleprovider.h>
-#include <gtk/gtktypes.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_STYLE_CONTEXT         (gtk_style_context_get_type ())
-#define GTK_STYLE_CONTEXT(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_STYLE_CONTEXT, GtkStyleContext))
-#define GTK_STYLE_CONTEXT_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST    ((c), GTK_TYPE_STYLE_CONTEXT, GtkStyleContextClass))
-#define GTK_IS_STYLE_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_STYLE_CONTEXT))
-#define GTK_IS_STYLE_CONTEXT_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE    ((c), GTK_TYPE_STYLE_CONTEXT))
-#define GTK_STYLE_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS  ((o), GTK_TYPE_STYLE_CONTEXT, GtkStyleContextClass))
-
-typedef struct _GtkStyleContextClass GtkStyleContextClass;
-
-struct _GtkStyleContext
-{
-  GObject parent_object;
-};
-
-struct _GtkStyleContextClass
-{
-  GObjectClass parent_class;
-
-  void (* changed) (GtkStyleContext *context);
-
-  /* Padding for future expansion */
-  void (*_gtk_reserved1) (void);
-  void (*_gtk_reserved2) (void);
-  void (*_gtk_reserved3) (void);
-  void (*_gtk_reserved4) (void);
-};
-
-
-GDK_AVAILABLE_IN_ALL
-GType gtk_style_context_get_type (void) G_GNUC_CONST;
-
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_add_provider_for_display    (GdkDisplay       *display,
-                                                    GtkStyleProvider *provider,
-                                                    guint             priority);
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_remove_provider_for_display (GdkDisplay       *display,
-                                                    GtkStyleProvider *provider);
-
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_add_provider    (GtkStyleContext  *context,
-                                        GtkStyleProvider *provider,
-                                        guint             priority);
-
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_remove_provider (GtkStyleContext  *context,
-                                        GtkStyleProvider *provider);
-
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_save    (GtkStyleContext *context);
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_restore (GtkStyleContext *context);
-
-GDK_AVAILABLE_IN_ALL
-void          gtk_style_context_set_state    (GtkStyleContext *context,
-                                              GtkStateFlags    flags);
-GDK_AVAILABLE_IN_ALL
-GtkStateFlags gtk_style_context_get_state    (GtkStyleContext *context);
-
-GDK_AVAILABLE_IN_ALL
-void          gtk_style_context_set_scale    (GtkStyleContext *context,
-                                              int              scale);
-GDK_AVAILABLE_IN_ALL
-int           gtk_style_context_get_scale    (GtkStyleContext *context);
-
-GDK_AVAILABLE_IN_ALL
-void     gtk_style_context_add_class    (GtkStyleContext *context,
-                                         const char      *class_name);
-GDK_AVAILABLE_IN_ALL
-void     gtk_style_context_remove_class (GtkStyleContext *context,
-                                         const char      *class_name);
-GDK_AVAILABLE_IN_ALL
-gboolean gtk_style_context_has_class    (GtkStyleContext *context,
-                                         const char      *class_name);
-
-GDK_AVAILABLE_IN_ALL
-void        gtk_style_context_set_display (GtkStyleContext *context,
-                                           GdkDisplay      *display);
-GDK_AVAILABLE_IN_ALL
-GdkDisplay *gtk_style_context_get_display (GtkStyleContext *context);
-
-GDK_AVAILABLE_IN_ALL
-gboolean gtk_style_context_lookup_color (GtkStyleContext *context,
-                                         const char      *color_name,
-                                         GdkRGBA         *color);
-
-/* Some helper functions to retrieve most common properties */
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_get_color            (GtkStyleContext *context,
-                                             GdkRGBA         *color);
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_get_border           (GtkStyleContext *context,
-                                             GtkBorder       *border);
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_get_padding          (GtkStyleContext *context,
-                                             GtkBorder       *padding);
-GDK_AVAILABLE_IN_ALL
-void gtk_style_context_get_margin           (GtkStyleContext *context,
-                                             GtkBorder       *margin);
-
-typedef enum {
-  GTK_STYLE_CONTEXT_PRINT_NONE         = 0,
-  GTK_STYLE_CONTEXT_PRINT_RECURSE      = 1 << 0,
-  GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE   = 1 << 1,
-  GTK_STYLE_CONTEXT_PRINT_SHOW_CHANGE  = 1 << 2
-} GtkStyleContextPrintFlags;
-
-GDK_AVAILABLE_IN_ALL
-char * gtk_style_context_to_string (GtkStyleContext           *context,
-                                    GtkStyleContextPrintFlags  flags);
-
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkStyleContext, g_object_unref)
-
-G_END_DECLS
-
-#endif /* __GTK_STYLE_CONTEXT_H__ */
diff --git a/gtk/gtkstylecontextprivate.h b/gtk/gtkstylecontextprivate.h
deleted file mode 100644 (file)
index 4cab724..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 2010 Carlos Garnacho <carlosg@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __GTK_STYLE_CONTEXT_PRIVATE_H__
-#define __GTK_STYLE_CONTEXT_PRIVATE_H__
-
-#include "gtkstylecontext.h"
-
-#include "gtkcssnodeprivate.h"
-#include "gtkstyleproviderprivate.h"
-#include "gtkcssvalueprivate.h"
-
-G_BEGIN_DECLS
-
-GtkStyleContext *gtk_style_context_new_for_node              (GtkCssNode      *node);
-
-GtkCssNode     *gtk_style_context_get_node                   (GtkStyleContext *context);
-GtkStyleProvider *
-                gtk_style_context_get_style_provider         (GtkStyleContext *context);
-
-void            gtk_style_context_save_to_node               (GtkStyleContext *context,
-                                                              GtkCssNode      *node);
-
-GtkCssStyle *   gtk_style_context_lookup_style               (GtkStyleContext *context);
-GtkCssValue   * _gtk_style_context_peek_property             (GtkStyleContext *context,
-                                                              guint            property_id);
-void           _gtk_style_context_get_cursor_color           (GtkStyleContext    *context,
-                                                              GdkRGBA            *primary_color,
-                                                              GdkRGBA            *secondary_color);
-
-G_END_DECLS
-
-#endif /* __GTK_STYLE_CONTEXT_PRIVATE_H__ */
index b57331dd840d957862406ac6e18dc9d9efb091ec..7bd0e7f247871bce850b6b951fe460b6dbfe357b 100644 (file)
@@ -21,7 +21,6 @@
 #include <gtk/css/gtkcss.h>
 #include "gtk/css/gtkcsstokenizerprivate.h"
 #include "gtk/css/gtkcssparserprivate.h"
-#include "gtkstylecontextprivate.h"
 #include "gtkcssvalueprivate.h"
 
 G_BEGIN_DECLS
index 19dca70d2a6b522edb7683d23b2b2e25e800c8a4..d7c8af8687f5625b5b2859c9c3f25d8813ed39a6 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "config.h"
 
+#include "gtksettingsprivate.h"
 #include "gtkstyleproviderprivate.h"
 
 #include "gtkprivate.h"
@@ -168,3 +169,65 @@ gtk_style_provider_emit_error (GtkStyleProvider *provider,
   if (iface->emit_error)
     iface->emit_error (provider, section, error);
 }
+
+
+/* These apis are misnamed, and the rest of GtkStyleContext is deprecated,
+ * so put them here for now
+ */
+
+/**
+ * gtk_style_context_add_provider_for_display:
+ * @display: a `GdkDisplay`
+ * @provider: a `GtkStyleProvider`
+ * @priority: the priority of the style provider. The lower
+ *   it is, the earlier it will be used in the style construction.
+ *   Typically this will be in the range between
+ *   %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK and
+ *   %GTK_STYLE_PROVIDER_PRIORITY_USER
+ *
+ * Adds a global style provider to @display, which will be used
+ * in style construction for all `GtkStyleContexts` under @display.
+ *
+ * GTK uses this to make styling information from `GtkSettings`
+ * available.
+ *
+ * Note: If both priorities are the same, A `GtkStyleProvider`
+ * added through [method@Gtk.StyleContext.add_provider] takes
+ * precedence over another added through this function.
+ */
+void
+gtk_style_context_add_provider_for_display (GdkDisplay       *display,
+                                            GtkStyleProvider *provider,
+                                            guint             priority)
+{
+  GtkStyleCascade *cascade;
+
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
+  g_return_if_fail (!GTK_IS_SETTINGS (provider) || _gtk_settings_get_display (GTK_SETTINGS (provider)) == display);
+
+  cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display), 1);
+  _gtk_style_cascade_add_provider (cascade, provider, priority);
+}
+
+/**
+ * gtk_style_context_remove_provider_for_display:
+ * @display: a `GdkDisplay`
+ * @provider: a `GtkStyleProvider`
+ *
+ * Removes @provider from the global style providers list in @display.
+ */
+void
+gtk_style_context_remove_provider_for_display (GdkDisplay       *display,
+                                               GtkStyleProvider *provider)
+{
+  GtkStyleCascade *cascade;
+
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+  g_return_if_fail (GTK_IS_STYLE_PROVIDER (provider));
+  g_return_if_fail (!GTK_IS_SETTINGS (provider));
+
+  cascade = _gtk_settings_get_style_cascade (gtk_settings_get_for_display (display), 1);
+  _gtk_style_cascade_remove_provider (cascade, provider);
+}
+
index 3d696606a80852791a6f5bbc3365256760cf4fac..86de970da807fad5604edbc174c21dd69adc66bd 100644 (file)
@@ -90,6 +90,15 @@ GType gtk_style_provider_get_type (void) G_GNUC_CONST;
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkStyleProvider, g_object_unref)
 
+GDK_AVAILABLE_IN_ALL
+void gtk_style_context_add_provider_for_display    (GdkDisplay       *display,
+                                                    GtkStyleProvider *provider,
+                                                    guint             priority);
+GDK_AVAILABLE_IN_ALL
+void gtk_style_context_remove_provider_for_display (GdkDisplay       *display,
+                                                    GtkStyleProvider *provider);
+
+
 G_END_DECLS
 
 #endif /* __GTK_STYLE_PROVIDER_H__ */
index 5ee16e3d0055d24997a7f1dcb6b75671eb5e18fb..f2652113b227fa3ed54343364359ef8554a66e86 100644 (file)
@@ -19,6 +19,7 @@
 #define __GTK_STYLE_PROVIDER_PRIVATE_H__
 
 #include <glib-object.h>
+#include <gtk/gtkstyleprovider.h>
 #include "gtk/gtkcountingbloomfilterprivate.h"
 #include "gtk/gtkcsskeyframesprivate.h"
 #include "gtk/gtkcsslookupprivate.h"
index 095d333d9b6a60d8d0cfa4b557f75c2a43776371..a7cc04da61119598c3b8ef2fc0cf5a7fbd1a1abf 100644 (file)
@@ -28,7 +28,6 @@
 #include "gtktextutilprivate.h"
 
 #include "gtkcsscolorvalueprivate.h"
-#include "gtkstylecontextprivate.h"
 #include "gtktextbuffer.h"
 #include "gtktextlayoutprivate.h"
 #include "gtkwidgetprivate.h"
index 8ef948c304d2ac436e715d9b1632915525009157..1aa14bf06be7a3606c74948f73befa3d3d46c746 100644 (file)
@@ -65,7 +65,7 @@
 #include "gtkshortcuttrigger.h"
 #include "gtksizegroup-private.h"
 #include "gtksnapshotprivate.h"
-#include "gtkstylecontextprivate.h"
+#include "deprecated/gtkstylecontextprivate.h"
 #include "gtktooltipprivate.h"
 #include "gsktransformprivate.h"
 #include "gtktypebuiltins.h"
@@ -2442,8 +2442,10 @@ gtk_widget_root (GtkWidget *widget)
       priv->root = priv->parent->priv->root;
     }
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (priv->context)
     gtk_style_context_set_display (priv->context, gtk_root_get_display (priv->root));
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   if (priv->surface_transform_data)
     add_parent_surface_transform_changed_listener (widget);
@@ -2479,8 +2481,10 @@ gtk_widget_unroot (GtkWidget *widget)
 
   GTK_WIDGET_GET_CLASS (widget)->unroot (widget);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (priv->context)
     gtk_style_context_set_display (priv->context, gdk_display_get_default ());
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   if (priv->layout_manager)
     gtk_layout_manager_set_root (priv->layout_manager, NULL);
@@ -3410,10 +3414,12 @@ gtk_widget_realize (GtkWidget *widget)
 
   g_signal_emit (widget, widget_signals[REALIZE], 0);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (priv->context)
     gtk_style_context_set_scale (priv->context, gtk_widget_get_scale_factor (widget));
   else
     gtk_widget_get_style_context (widget);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   gtk_widget_pop_verify_invariants (widget);
 }
@@ -6737,8 +6743,10 @@ _gtk_widget_scale_changed (GtkWidget *widget)
 
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (priv->context)
     gtk_style_context_set_scale (priv->context, gtk_widget_get_scale_factor (widget));
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_SCALE_FACTOR]);
 
@@ -10712,6 +10720,8 @@ _gtk_widget_peek_style_context (GtkWidget *widget)
  * for the lifetime of @widget.
  *
  * Returns: (transfer none): the widgets `GtkStyleContext`
+ *
+ * Deprecated: 4.10: Style contexts will be removed in GTK 5
  */
 GtkStyleContext *
 gtk_widget_get_style_context (GtkWidget *widget)
@@ -10726,11 +10736,13 @@ gtk_widget_get_style_context (GtkWidget *widget)
 
       priv->context = gtk_style_context_new_for_node (priv->cssnode);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
       gtk_style_context_set_scale (priv->context, gtk_widget_get_scale_factor (widget));
 
       display = _gtk_widget_get_display (widget);
       if (display)
         gtk_style_context_set_display (priv->context, display);
+G_GNUC_END_IGNORE_DEPRECATIONS
     }
 
   return priv->context;
index 8720017baddbebbbe981b0116557a173aad6e65a..5374160dcfe1a590cc945180ce24548bdd9c0dd2 100644 (file)
@@ -706,7 +706,7 @@ void            gtk_requisition_free     (GtkRequisition       *requisition);
 GDK_AVAILABLE_IN_ALL
 gboolean     gtk_widget_in_destruction (GtkWidget *widget);
 
-GDK_AVAILABLE_IN_ALL
+GDK_DEPRECATED_IN_4_10
 GtkStyleContext * gtk_widget_get_style_context (GtkWidget *widget);
 
 GDK_AVAILABLE_IN_ALL
index e1e336e6e6571ba54c58b995ac5b69140bc57f92..d902e7117fd6f1baca3a73ad6958f7e67643dc05 100644 (file)
@@ -446,15 +446,6 @@ _gtk_widget_get_display (GtkWidget *widget)
   return gtk_root_get_display (root);
 }
 
-static inline GtkStyleContext *
-_gtk_widget_get_style_context (GtkWidget *widget)
-{
-  if (G_LIKELY (widget->priv->context))
-    return widget->priv->context;
-
-  return gtk_widget_get_style_context (widget);
-}
-
 static inline gpointer
 _gtk_widget_peek_request_cache (GtkWidget *widget)
 {
index 8047545b62d7a38cbab890bb2356312f72f8186c..b1dc9bf701e2a310621bfbe03900208902fb0162 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "gtkcssprovider.h"
 #include "gtkstyleprovider.h"
-#include "gtkstylecontext.h"
 #include "gtktextview.h"
 #include "gtkmessagedialog.h"
 #include "gtkfilechooserdialog.h"
index 6ade21e5b2d5cb9333708f498964d0ce769f7a75..595f82213e0f0ef5c33cad8916b41702e7c03dbf 100644 (file)
@@ -22,7 +22,7 @@
 #include "graphdata.h"
 
 #include "gtksnapshot.h"
-#include "gtkstylecontext.h"
+#include "deprecated/gtkstylecontext.h"
 
 enum {
   PROP_0,
@@ -155,8 +155,10 @@ graph_renderer_snapshot (GtkWidget   *widget,
 
   diff = maximum - minimum;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   context = gtk_widget_get_style_context (widget);
   gtk_style_context_get_color (context, &color);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   cr = gtk_snapshot_append_cairo (snapshot,
                                   &GRAPHENE_RECT_INIT (
index 1364f34d3feef8fe0c262b7042c9688fd9a13ed3..8c55db19a094a3cff74b22c7fc30bcfdd671b095 100644 (file)
@@ -63,7 +63,6 @@
 #include "gtkrevealer.h"
 #include "gtklayoutmanager.h"
 #include "gtkcssprovider.h"
-#include "gtkstylecontext.h"
 #include "gtkwidgetprivate.h"
 
 
index 4286d14e3107995207b27efcf27ac3853c08a0c0..4e7325ad57f0abc69c429376ea760b7082e2dbfb 100644 (file)
@@ -362,7 +362,6 @@ gtk_public_sources = files([
   'gtkstringfilter.c',
   'gtkstringlist.c',
   'gtkstringsorter.c',
-  'gtkstylecontext.c',
   'gtkstyleprovider.c',
   'gtkswitch.c',
   'gtksymbolicpaintable.c',
@@ -602,7 +601,6 @@ gtk_public_headers = files([
   'gtkstringfilter.h',
   'gtkstringlist.h',
   'gtkstringsorter.h',
-  'gtkstylecontext.h',
   'gtkstyleprovider.h',
   'gtkswitch.h',
   'gtksymbolicpaintable.h',