/* * Copyright © 2025 Red Hat, Inc * * 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.1 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 . * * SPDX-License-Identifier: LGPL-2.1-or-later * * Authors: Matthias Clasen */ #pragma once #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) #error "Only can be included directly." #endif #include #include #include #include G_BEGIN_DECLS #define GTK_TYPE_SVG (gtk_svg_get_type ()) GDK_AVAILABLE_IN_4_22 G_DECLARE_FINAL_TYPE (GtkSvg, gtk_svg, GTK, SVG, GObject) GDK_AVAILABLE_IN_4_22 GtkSvg * gtk_svg_new (void); GDK_AVAILABLE_IN_4_22 GtkSvg * gtk_svg_new_from_bytes (GBytes *bytes); GDK_AVAILABLE_IN_4_22 GtkSvg * gtk_svg_new_from_resource (const char *path); GDK_AVAILABLE_IN_4_22 void gtk_svg_load_from_bytes (GtkSvg *self, GBytes *bytes); GDK_AVAILABLE_IN_4_22 void gtk_svg_load_from_resource (GtkSvg *self, const char *path); GDK_AVAILABLE_IN_4_22 GBytes * gtk_svg_serialize (GtkSvg *self); GDK_AVAILABLE_IN_4_22 gboolean gtk_svg_write_to_file (GtkSvg *self, const char *filename, GError **error); GDK_AVAILABLE_IN_4_22 void gtk_svg_set_weight (GtkSvg *self, double weight); GDK_AVAILABLE_IN_4_22 double gtk_svg_get_weight (GtkSvg *self); GDK_AVAILABLE_IN_4_22 void gtk_svg_set_state (GtkSvg *self, unsigned int state); GDK_AVAILABLE_IN_4_22 unsigned int gtk_svg_get_state (GtkSvg *self); GDK_AVAILABLE_IN_4_22 const char ** gtk_svg_get_state_names (GtkSvg *self, unsigned int *length); GDK_AVAILABLE_IN_4_22 void gtk_svg_set_frame_clock (GtkSvg *self, GdkFrameClock *clock); GDK_AVAILABLE_IN_4_22 void gtk_svg_play (GtkSvg *self); GDK_AVAILABLE_IN_4_22 void gtk_svg_pause (GtkSvg *self); /** * GtkSvgFeatures: * @GTK_SVG_ANIMATIONS: Whether to run animations. If disabled, * state changes are applied without transitions * @GTK_SVG_SYSTEM_RESOURCES: Whether to use system resources, * such as fonts. If disabled, only embedded fonts are used * @GTK_SVG_EXTERNAL_RESOURCES: Whether to load external * resources, such as images. If disabled, only embedded * images are loaded * @GTK_SVG_EXTENSIONS: Whether to allow gpa extensions, such * as states and transitions * @GTK_SVG_TRADITIONAL_SYMBOLIC: This feature is meant for * compatibility with old symbolic icons. If this is enabled, * fill and stroke attributes are ignored. The used colors * are derived from symbolic style classes if present, and * the default fill color is the symbolic foreground color. * * Features of the SVG renderer that can be enabled or disabled. * * By default, all features except `GTK_SVG_TRADITIONAL_SYMBOLIC` * are enabled. * * New values may be added in the future. * * Since: 4.22 */ typedef enum { GTK_SVG_ANIMATIONS = 1 << 0, GTK_SVG_SYSTEM_RESOURCES = 1 << 1, GTK_SVG_EXTERNAL_RESOURCES = 1 << 2, GTK_SVG_EXTENSIONS = 1 << 3, GTK_SVG_TRADITIONAL_SYMBOLIC = 1 << 4, } GtkSvgFeatures; /** * GTK_SVG_DEFAULT_FEATURES: * * The `GtkSvgFeatures` that are enabled by default. * * Since: 4.22 */ #define GTK_SVG_DEFAULT_FEATURES \ (GTK_SVG_ANIMATIONS | \ GTK_SVG_SYSTEM_RESOURCES | \ GTK_SVG_EXTERNAL_RESOURCES | \ GTK_SVG_EXTENSIONS) GDK_AVAILABLE_IN_4_22 void gtk_svg_set_features (GtkSvg *self, GtkSvgFeatures features); GDK_AVAILABLE_IN_4_22 GtkSvgFeatures gtk_svg_get_features (GtkSvg *self); typedef enum { GTK_SVG_ERROR_INVALID_SYNTAX, GTK_SVG_ERROR_INVALID_ELEMENT, GTK_SVG_ERROR_INVALID_ATTRIBUTE, GTK_SVG_ERROR_MISSING_ATTRIBUTE, GTK_SVG_ERROR_INVALID_REFERENCE, GTK_SVG_ERROR_FAILED_UPDATE, GTK_SVG_ERROR_FAILED_RENDERING, GTK_SVG_ERROR_IGNORED_ELEMENT, GTK_SVG_ERROR_LIMITS_EXCEEDED, GTK_SVG_ERROR_NOT_IMPLEMENTED, } GtkSvgError; typedef struct { size_t bytes; size_t lines; size_t line_chars; } GtkSvgLocation; #define GTK_SVG_ERROR (gtk_svg_error_quark ()) GDK_AVAILABLE_IN_4_22 GQuark gtk_svg_error_quark (void); GDK_AVAILABLE_IN_4_22 const char * gtk_svg_error_get_element (const GError *error); GDK_AVAILABLE_IN_4_22 const char * gtk_svg_error_get_attribute (const GError *error); GDK_AVAILABLE_IN_4_22 const GtkSvgLocation * gtk_svg_error_get_start (const GError *error); GDK_AVAILABLE_IN_4_22 const GtkSvgLocation * gtk_svg_error_get_end (const GError *error); G_END_DECLS