/* GTK - The GIMP Toolkit * Copyright (C) 2010 Carlos Garnacho * * 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 . */ #include "config.h" #include #include #include #include #include "gtkprivate.h" #include "gtkmodulesprivate.h" #include "gtkpango.h" #include "gtkrenderprivate.h" #include "gtkstylecontextprivate.h" G_GNUC_BEGIN_IGNORE_DEPRECATIONS /** * SECTION:gtkthemingengine * @Short_description: Theming renderers * @Title: GtkThemingEngine * @See_also: #GtkStyleContext * * #GtkThemingEngine was the object used for rendering themed content * in GTK+ widgets. It used to allow overriding GTK+'s default * implementation of rendering functions by allowing engines to be * loaded as modules. * * #GtkThemingEngine has been deprecated in GTK+ 3.14 and will be * ignored for rendering. The advancements in CSS theming are good * enough to allow themers to achieve their goals without the need * to modify source code. */ enum { PROP_0, PROP_NAME }; struct GtkThemingEnginePrivate { GtkStyleContext *context; gchar *name; }; static void gtk_theming_engine_finalize (GObject *object); static void gtk_theming_engine_impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void gtk_theming_engine_impl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void gtk_theming_engine_render_check (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_option (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_arrow (GtkThemingEngine *engine, cairo_t *cr, gdouble angle, gdouble x, gdouble y, gdouble size); static void gtk_theming_engine_render_background (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_frame (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_expander (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_focus (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_layout (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, PangoLayout *layout); static void gtk_theming_engine_render_line (GtkThemingEngine *engine, cairo_t *cr, gdouble x0, gdouble y0, gdouble x1, gdouble y1); static void gtk_theming_engine_render_slider (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation); static void gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side, gdouble xy0_gap, gdouble xy1_gap); static void gtk_theming_engine_render_extension (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side); static void gtk_theming_engine_render_handle (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static void gtk_theming_engine_render_activity (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height); static GdkPixbuf * gtk_theming_engine_render_icon_pixbuf (GtkThemingEngine *engine, const GtkIconSource *source, GtkIconSize size); static void gtk_theming_engine_render_icon (GtkThemingEngine *engine, cairo_t *cr, GdkPixbuf *pixbuf, gdouble x, gdouble y); static void gtk_theming_engine_render_icon_surface (GtkThemingEngine *engine, cairo_t *cr, cairo_surface_t *surface, gdouble x, gdouble y); G_DEFINE_TYPE_WITH_PRIVATE (GtkThemingEngine, gtk_theming_engine, G_TYPE_OBJECT) typedef struct GtkThemingModule GtkThemingModule; typedef struct GtkThemingModuleClass GtkThemingModuleClass; struct GtkThemingModule { GTypeModule parent_instance; GModule *module; gchar *name; void (*init) (GTypeModule *module); void (*exit) (void); GtkThemingEngine * (*create_engine) (void); }; struct GtkThemingModuleClass { GTypeModuleClass parent_class; }; #define GTK_TYPE_THEMING_MODULE (gtk_theming_module_get_type ()) #define GTK_THEMING_MODULE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_THEMING_MODULE, GtkThemingModule)) #define GTK_IS_THEMING_MODULE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_THEMING_MODULE)) _GDK_EXTERN GType gtk_theming_module_get_type (void); G_DEFINE_TYPE (GtkThemingModule, gtk_theming_module, G_TYPE_TYPE_MODULE); static void gtk_theming_engine_class_init (GtkThemingEngineClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = gtk_theming_engine_finalize; object_class->set_property = gtk_theming_engine_impl_set_property; object_class->get_property = gtk_theming_engine_impl_get_property; klass->render_icon = gtk_theming_engine_render_icon; klass->render_check = gtk_theming_engine_render_check; klass->render_option = gtk_theming_engine_render_option; klass->render_arrow = gtk_theming_engine_render_arrow; klass->render_background = gtk_theming_engine_render_background; klass->render_frame = gtk_theming_engine_render_frame; klass->render_expander = gtk_theming_engine_render_expander; klass->render_focus = gtk_theming_engine_render_focus; klass->render_layout = gtk_theming_engine_render_layout; klass->render_line = gtk_theming_engine_render_line; klass->render_slider = gtk_theming_engine_render_slider; klass->render_frame_gap = gtk_theming_engine_render_frame_gap; klass->render_extension = gtk_theming_engine_render_extension; klass->render_handle = gtk_theming_engine_render_handle; klass->render_activity = gtk_theming_engine_render_activity; klass->render_icon_pixbuf = gtk_theming_engine_render_icon_pixbuf; klass->render_icon_surface = gtk_theming_engine_render_icon_surface; /** * GtkThemingEngine:name: * * The theming engine name, this name will be used when registering * custom properties, for a theming engine named "Clearlooks" registering * a "glossy" custom property, it could be referenced in the CSS file as * * |[ * -Clearlooks-glossy: true; * ]| * * Since: 3.0 */ g_object_class_install_property (object_class, PROP_NAME, g_param_spec_string ("name", P_("Name"), P_("Theming engine name"), NULL, G_PARAM_CONSTRUCT_ONLY | GTK_PARAM_READWRITE)); } static void gtk_theming_engine_init (GtkThemingEngine *engine) { engine->priv = gtk_theming_engine_get_instance_private (engine); } static void gtk_theming_engine_finalize (GObject *object) { GtkThemingEnginePrivate *priv; priv = GTK_THEMING_ENGINE (object)->priv; g_free (priv->name); G_OBJECT_CLASS (gtk_theming_engine_parent_class)->finalize (object); } static void gtk_theming_engine_impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GtkThemingEnginePrivate *priv; priv = GTK_THEMING_ENGINE (object)->priv; switch (prop_id) { case PROP_NAME: g_free (priv->name); priv->name = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void gtk_theming_engine_impl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GtkThemingEnginePrivate *priv; priv = GTK_THEMING_ENGINE (object)->priv; switch (prop_id) { case PROP_NAME: g_value_set_string (value, priv->name); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } /** * gtk_theming_engine_get_property: * @engine: a #GtkThemingEngine * @property: the property name * @state: state to retrieve the value for * @value: (out) (transfer full): return location for the property value, * you must free this memory using g_value_unset() once you are * done with it. * * Gets a property value as retrieved from the style settings that apply * to the currently rendered element. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_property (GtkThemingEngine *engine, const gchar *property, GtkStateFlags state, GValue *value) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); g_return_if_fail (property != NULL); g_return_if_fail (value != NULL); priv = engine->priv; gtk_style_context_get_property (priv->context, property, state, value); } /** * gtk_theming_engine_get_valist: * @engine: a #GtkThemingEngine * @state: state to retrieve values for * @args: va_list of property name/return location pairs, followed by %NULL * * Retrieves several style property values that apply to the currently * rendered element. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_valist (GtkThemingEngine *engine, GtkStateFlags state, va_list args) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_valist (priv->context, state, args); } /** * gtk_theming_engine_get: * @engine: a #GtkThemingEngine * @state: state to retrieve values for * @...: property name /return value pairs, followed by %NULL * * Retrieves several style property values that apply to the currently * rendered element. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get (GtkThemingEngine *engine, GtkStateFlags state, ...) { GtkThemingEnginePrivate *priv; va_list args; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; va_start (args, state); gtk_style_context_get_valist (priv->context, state, args); va_end (args); } /** * gtk_theming_engine_get_style_property: * @engine: a #GtkThemingEngine * @property_name: the name of the widget style property * @value: (out): Return location for the property value, free with * g_value_unset() after use. * * Gets the value for a widget style property. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_style_property (GtkThemingEngine *engine, const gchar *property_name, GValue *value) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); g_return_if_fail (property_name != NULL); priv = engine->priv; gtk_style_context_get_style_property (priv->context, property_name, value); } /** * gtk_theming_engine_get_style_valist: * @engine: a #GtkThemingEngine * @args: va_list of property name/return location pairs, followed by %NULL * * Retrieves several widget style properties from @engine according to the * currently rendered content’s style. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_style_valist (GtkThemingEngine *engine, va_list args) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_style_valist (priv->context, args); } /** * gtk_theming_engine_get_style: * @engine: a #GtkThemingEngine * @...: property name /return value pairs, followed by %NULL * * Retrieves several widget style properties from @engine according * to the currently rendered content’s style. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_style (GtkThemingEngine *engine, ...) { GtkThemingEnginePrivate *priv; va_list args; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; va_start (args, engine); gtk_style_context_get_style_valist (priv->context, args); va_end (args); } /** * gtk_theming_engine_lookup_color: * @engine: a #GtkThemingEngine * @color_name: color name to lookup * @color: (out): Return location for the looked up color * * Looks up and resolves a color name in the current style’s color map. * * Returns: %TRUE if @color_name was found and resolved, %FALSE otherwise * * Since: 3.0 * * Deprecated: 3.14 **/ gboolean gtk_theming_engine_lookup_color (GtkThemingEngine *engine, const gchar *color_name, GdkRGBA *color) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), FALSE); g_return_val_if_fail (color_name != NULL, FALSE); priv = engine->priv; return gtk_style_context_lookup_color (priv->context, color_name, color); } /** * gtk_theming_engine_get_state: * @engine: a #GtkThemingEngine * * returns the state used when rendering. * * Returns: the state flags * * Since: 3.0 * * Deprecated: 3.14 **/ GtkStateFlags gtk_theming_engine_get_state (GtkThemingEngine *engine) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), 0); priv = engine->priv; return gtk_style_context_get_state (priv->context); } /** * gtk_theming_engine_state_is_running: * @engine: a #GtkThemingEngine * @state: a widget state * @progress: (out): return location for the transition progress * * Returns %TRUE if there is a transition animation running for the * current region (see gtk_style_context_push_animatable_region()). * * If @progress is not %NULL, the animation progress will be returned * there, 0.0 means the state is closest to being %FALSE, while 1.0 means * it’s closest to being %TRUE. This means transition animations will * run from 0 to 1 when @state is being set to %TRUE and from 1 to 0 when * it’s being set to %FALSE. * * Returns: %TRUE if there is a running transition animation for @state. * * Since: 3.0 * * Deprecated: 3.6: Always returns %FALSE **/ gboolean gtk_theming_engine_state_is_running (GtkThemingEngine *engine, GtkStateType state, gdouble *progress) { g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), FALSE); return FALSE; } /** * gtk_theming_engine_get_path: * @engine: a #GtkThemingEngine * * Returns the widget path used for style matching. * * Returns: (transfer none): A #GtkWidgetPath * * Since: 3.0 * * Deprecated: 3.14 **/ const GtkWidgetPath * gtk_theming_engine_get_path (GtkThemingEngine *engine) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), NULL); priv = engine->priv; return gtk_style_context_get_path (priv->context); } /** * gtk_theming_engine_has_class: * @engine: a #GtkThemingEngine * @style_class: class name to look up * * Returns %TRUE if the currently rendered contents have * defined the given class name. * * Returns: %TRUE if @engine has @class_name defined * * Since: 3.0 * * Deprecated: 3.14 **/ gboolean gtk_theming_engine_has_class (GtkThemingEngine *engine, const gchar *style_class) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), FALSE); priv = engine->priv; return gtk_style_context_has_class (priv->context, style_class); } /** * gtk_theming_engine_has_region: * @engine: a #GtkThemingEngine * @style_region: a region name * @flags: (out) (allow-none): return location for region flags * * Returns %TRUE if the currently rendered contents have the * region defined. If @flags_return is not %NULL, it is set * to the flags affecting the region. * * Returns: %TRUE if region is defined * * Since: 3.0 * * Deprecated: 3.14 **/ gboolean gtk_theming_engine_has_region (GtkThemingEngine *engine, const gchar *style_region, GtkRegionFlags *flags) { GtkThemingEnginePrivate *priv; if (flags) *flags = 0; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), FALSE); priv = engine->priv; G_GNUC_BEGIN_IGNORE_DEPRECATIONS return gtk_style_context_has_region (priv->context, style_region, flags); G_GNUC_END_IGNORE_DEPRECATIONS } /** * gtk_theming_engine_get_direction: * @engine: a #GtkThemingEngine * * Returns the widget direction used for rendering. * * Returns: the widget direction * * Since: 3.0 * * Deprecated: 3.8: Use gtk_theming_engine_get_state() and * check for #GTK_STATE_FLAG_DIR_LTR and * #GTK_STATE_FLAG_DIR_RTL instead. **/ GtkTextDirection gtk_theming_engine_get_direction (GtkThemingEngine *engine) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), GTK_TEXT_DIR_LTR); priv = engine->priv; G_GNUC_BEGIN_IGNORE_DEPRECATIONS; return gtk_style_context_get_direction (priv->context); G_GNUC_END_IGNORE_DEPRECATIONS; } /** * gtk_theming_engine_get_junction_sides: * @engine: a #GtkThemingEngine * * Returns the widget direction used for rendering. * * Returns: the widget direction * * Since: 3.0 * * Deprecated: 3.14 **/ GtkJunctionSides gtk_theming_engine_get_junction_sides (GtkThemingEngine *engine) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), 0); priv = engine->priv; return gtk_style_context_get_junction_sides (priv->context); } /** * gtk_theming_engine_get_color: * @engine: a #GtkThemingEngine * @state: state to retrieve the color for * @color: (out): return value for the foreground color * * Gets the foreground color for a given state. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_color (GtkThemingEngine *engine, GtkStateFlags state, GdkRGBA *color) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_color (priv->context, state, color); } /** * gtk_theming_engine_get_background_color: * @engine: a #GtkThemingEngine * @state: state to retrieve the color for * @color: (out): return value for the background color * * Gets the background color for a given state. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_background_color (GtkThemingEngine *engine, GtkStateFlags state, GdkRGBA *color) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_background_color (priv->context, state, color); } /** * gtk_theming_engine_get_border_color: * @engine: a #GtkThemingEngine * @state: state to retrieve the color for * @color: (out): return value for the border color * * Gets the border color for a given state. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_border_color (GtkThemingEngine *engine, GtkStateFlags state, GdkRGBA *color) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_border_color (priv->context, state, color); } /** * gtk_theming_engine_get_border: * @engine: a #GtkThemingEngine * @state: state to retrieve the border for * @border: (out): return value for the border settings * * Gets the border for a given state as a #GtkBorder. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_border (GtkThemingEngine *engine, GtkStateFlags state, GtkBorder *border) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_border (priv->context, state, border); } /** * gtk_theming_engine_get_padding: * @engine: a #GtkThemingEngine * @state: state to retrieve the padding for * @padding: (out): return value for the padding settings * * Gets the padding for a given state as a #GtkBorder. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_padding (GtkThemingEngine *engine, GtkStateFlags state, GtkBorder *padding) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_padding (priv->context, state, padding); } /** * gtk_theming_engine_get_margin: * @engine: a #GtkThemingEngine * @state: state to retrieve the border for * @margin: (out): return value for the margin settings * * Gets the margin for a given state as a #GtkBorder. * * Since: 3.0 * * Deprecated: 3.14 **/ void gtk_theming_engine_get_margin (GtkThemingEngine *engine, GtkStateFlags state, GtkBorder *margin) { GtkThemingEnginePrivate *priv; g_return_if_fail (GTK_IS_THEMING_ENGINE (engine)); priv = engine->priv; gtk_style_context_get_margin (priv->context, state, margin); } /** * gtk_theming_engine_get_font: * @engine: a #GtkThemingEngine * @state: state to retrieve the font for * * Returns the font description for a given state. * * Returns: (transfer none): the #PangoFontDescription for the given * state. This object is owned by GTK+ and should not be * freed. * * Since: 3.0 * * Deprecated: 3.8: Use gtk_theming_engine_get() **/ const PangoFontDescription * gtk_theming_engine_get_font (GtkThemingEngine *engine, GtkStateFlags state) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), NULL); G_GNUC_BEGIN_IGNORE_DEPRECATIONS; priv = engine->priv; return gtk_style_context_get_font (priv->context, state); G_GNUC_END_IGNORE_DEPRECATIONS; } /* GtkThemingModule */ static gboolean gtk_theming_module_load (GTypeModule *type_module) { GtkThemingModule *theming_module; GModule *module; gchar *name, *module_path; theming_module = GTK_THEMING_MODULE (type_module); name = theming_module->name; module_path = _gtk_find_module (name, "theming-engines"); if (!module_path) return FALSE; module = g_module_open (module_path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); g_free (module_path); if (!module) return FALSE; if (!g_module_symbol (module, "theme_init", (gpointer *) &theming_module->init) || !g_module_symbol (module, "theme_exit", (gpointer *) &theming_module->exit) || !g_module_symbol (module, "create_engine", (gpointer *) &theming_module->create_engine)) { g_module_close (module); return FALSE; } theming_module->module = module; theming_module->init (G_TYPE_MODULE (theming_module)); return TRUE; } static void gtk_theming_module_unload (GTypeModule *type_module) { GtkThemingModule *theming_module; theming_module = GTK_THEMING_MODULE (type_module); theming_module->exit (); g_module_close (theming_module->module); theming_module->module = NULL; theming_module->init = NULL; theming_module->exit = NULL; theming_module->create_engine = NULL; } static void gtk_theming_module_class_init (GtkThemingModuleClass *klass) { GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (klass); module_class->load = gtk_theming_module_load; module_class->unload = gtk_theming_module_unload; } static void gtk_theming_module_init (GtkThemingModule *module) { } /** * gtk_theming_engine_load: * @name: Theme engine name to load * * Loads and initializes a theming engine module from the * standard directories. * * Returns: (nullable) (transfer none): A theming engine, or %NULL if * the engine @name doesn’t exist. * * Deprecated: 3.14 **/ GtkThemingEngine * gtk_theming_engine_load (const gchar *name) { static GHashTable *engines = NULL; static GtkThemingEngine *default_engine; GtkThemingEngine *engine = NULL; if (name) { if (!engines) engines = g_hash_table_new (g_str_hash, g_str_equal); engine = g_hash_table_lookup (engines, name); if (!engine) { GtkThemingModule *module; module = g_object_new (GTK_TYPE_THEMING_MODULE, NULL); g_type_module_set_name (G_TYPE_MODULE (module), name); module->name = g_strdup (name); if (module && g_type_module_use (G_TYPE_MODULE (module))) { engine = (module->create_engine) (); if (engine) g_hash_table_insert (engines, module->name, engine); } } } else { if (G_UNLIKELY (!default_engine)) default_engine = g_object_new (GTK_TYPE_THEMING_ENGINE, NULL); engine = default_engine; } return engine; } /** * gtk_theming_engine_get_screen: * @engine: a #GtkThemingEngine * * Returns the #GdkScreen to which @engine currently rendering to. * * Returns: (nullable) (transfer none): a #GdkScreen, or %NULL. * * Deprecated: 3.14 **/ GdkScreen * gtk_theming_engine_get_screen (GtkThemingEngine *engine) { GtkThemingEnginePrivate *priv; g_return_val_if_fail (GTK_IS_THEMING_ENGINE (engine), NULL); priv = engine->priv; return gtk_style_context_get_screen (priv->context); } /* Paint method implementations */ static void gtk_theming_engine_render_check (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_check (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_option (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_option (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_arrow (GtkThemingEngine *engine, cairo_t *cr, gdouble angle, gdouble x, gdouble y, gdouble size) { gtk_render_arrow (engine->priv->context, cr, angle, x, y, size); } static void gtk_theming_engine_render_background (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_background (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_frame (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_frame (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_expander (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_expander (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_focus (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_focus (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_line (GtkThemingEngine *engine, cairo_t *cr, gdouble x0, gdouble y0, gdouble x1, gdouble y1) { gtk_render_line (engine->priv->context, cr, x0, y0, x1, y1); } static void gtk_theming_engine_render_layout (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, PangoLayout *layout) { gtk_render_layout (engine->priv->context, cr, x, y, layout); } static void gtk_theming_engine_render_slider (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkOrientation orientation) { gtk_render_slider (engine->priv->context, cr, x, y, width, height, orientation); } static void gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side, gdouble xy0_gap, gdouble xy1_gap) { gtk_render_frame_gap (engine->priv->context, cr, x, y, width, height, gap_side, xy0_gap, xy1_gap); } static void gtk_theming_engine_render_extension (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, GtkPositionType gap_side) { gtk_render_extension (engine->priv->context, cr, x, y, width, height, gap_side); } static void gtk_theming_engine_render_handle (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_handle (engine->priv->context, cr, x, y, width, height); } static void gtk_theming_engine_render_activity (GtkThemingEngine *engine, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { gtk_render_activity (engine->priv->context, cr, x, y, width, height); } static GdkPixbuf * gtk_theming_engine_render_icon_pixbuf (GtkThemingEngine *engine, const GtkIconSource *source, GtkIconSize size) { return gtk_render_icon_pixbuf (engine->priv->context, source, size); } static void gtk_theming_engine_render_icon (GtkThemingEngine *engine, cairo_t *cr, GdkPixbuf *pixbuf, gdouble x, gdouble y) { gtk_render_icon (engine->priv->context, cr, pixbuf, x, y); } static void gtk_theming_engine_render_icon_surface (GtkThemingEngine *engine, cairo_t *cr, cairo_surface_t *surface, gdouble x, gdouble y) { gtk_render_icon_surface (engine->priv->context, cr, surface, x, y); } G_GNUC_END_IGNORE_DEPRECATIONS