Class
GtkSvg
unstable since: 4.22
Description [src]
final class Gtk.Svg : GObject.Object
implements Gdk.Paintable, Gtk.SymbolicPaintable {
/* No available fields */
}
A paintable implementation that renders SVG, with animations.
GtkSvg objects are created by parsing a subset of SVG,
including SVG animations.
GtkSvg fills or strokes paths with symbolic or fixed colors.
It can have multiple states, and paths can be included in a subset
of the states. The special ‘empty’ state is always available.
States can have animations, and the transition between different
states can also be animated.
To show a static SVG image, it is enough to load the the SVG and use it like any other paintable.
To play an SVG animation, use gtk_svg_set_frame_clock()
to connect the paintable to a frame clock, and call
gtk_svg_play() after loading the SVG. The animation can
be paused using gtk_svg_pause().
To find out what states a GtkSvg has, use gtk_svg_get_n_states().
To set the current state, use gtk_svg_set_state().
Error handling
Loading an SVG into GtkSvg will always produce a (possibly empty)
paintable. GTK will drop things that it can’t handle and try to make
sense of the rest.
To track errors during parsing or rendering, connect to the
GtkSvg::error signal.
For parsing errors in the GTK_SVG_ERROR domain, the functions
gtk_svg_error_get_start(), gtk_svg_error_get_end(),
gtk_svg_error_get_element() and gtk_svg_error_get_attribute()
can be used to obtain information about where the error occurred.
The supported subset of SVG
The paintable supports much of SVG 2, with some exceptions.
Among the graphical elements, <textPath> and <foreignObject>
are not supported.
Among the structural elements, <a> and <view> are not supported.
In the <filter> element, the following primitives are not
supported: feConvolveMatrix, feDiffuseLighting,
feMorphology, feSpecularLighting and feTurbulence.
Support for the mask attribute is limited to just a url
referring to the <mask> element by ID.
In animation elements, the parsing of begin and end attributes
is limited, and the min and max attributes are not supported.
Lastly, there is only minimal CSS support (the style attribute,
but not <style>), and no interactivity.
SVG Extensions
The paintable supports a number of custom attributes that offer a convenient way to define states, transitions and animations. For example,
<circle cx='5' cy='5' r='5'
gpa:states='0 1'
gpa:animation-type='automatic'
gpa:animation-direction='segment'
gpa:animation-duration='600ms'/>
defines the circle to be shown in states 0 and 1, and animates a segment of the circle.
Note that the generated animations are implemented using standard
SVG attributes (visibility, stroke-dasharray,stroke-dashoffset,pathLengthandfilter`). Setting these attributes in your SVG
is therefore going to interfere with generated animations.
To connect general SVG animations to the states of the paintable,
use the custom gpa:states(...) condition in the begin and end
attributes of SVG animation elements. For example,
<animate href='path1'
attributeName='fill'
begin='gpa:states(0).begin'
dur='300ms'
fill='freeze'
from='black'
to='magenta'/>
will make the fill color of path1 transition from black to magenta when the renderer enters state 0.
The gpa:states(...) condition triggers for upcoming state changes
as well, to support fade-out transitions. For example,
<animate href='path1'
attributeName='opacity'
begin='gpa:states(0).end -300ms'
dur='300ms'
fill='freeze'
from='1'
to='0'/>
will start a fade-out of path1 300ms before state 0 ends.
In addition to the gpa:fill and gpa:stroke attributes, symbolic
colors can also be specified as a custom paint server reference,
like this: url(gpa:#warning). This works in fill and stroke
attributes, but also when specifying colors in SVG animation
attributes like to or values.
Note that the SVG syntax allows for a fallback RGB color to be specified after the url, for compatibility with other SVG consumers:
fill='url(gpa:#warning) orange'
In contrast to SVG 1.1 and 2.0, we allow the transform attribute
to be animated with <animate>.
Available since: 4.22
Constructors
gtk_svg_new_from_resource
Parses the SVG data in the resource and creates a paintable.
unstable since: 4.22
Instance methods
gtk_svg_write_to_file
Serializes the paintable, and saves the result to a file.
unstable since: 4.22
Methods inherited from GdkPaintable (9)
gdk_paintable_compute_concrete_size
Compute a concrete size for the GdkPaintable.
gdk_paintable_get_current_image
Gets an immutable paintable for the current contents displayed by paintable.
gdk_paintable_get_flags
Get flags for the paintable.
gdk_paintable_get_intrinsic_aspect_ratio
Gets the preferred aspect ratio the paintable would like to be displayed at.
gdk_paintable_get_intrinsic_height
Gets the preferred height the paintable would like to be displayed at.
gdk_paintable_get_intrinsic_width
Gets the preferred width the paintable would like to be displayed at.
gdk_paintable_invalidate_contents
Called by implementations of GdkPaintable to invalidate their contents.
gdk_paintable_invalidate_size
Called by implementations of GdkPaintable to invalidate their size.
gdk_paintable_snapshot
Snapshots the given paintable with the given width and height.
Methods inherited from GtkSymbolicPaintable (2)
gtk_symbolic_paintable_snapshot_symbolic
Snapshots the paintable with the given colors.
since: 4.6
gtk_symbolic_paintable_snapshot_with_weight
Snapshots the paintable with the given colors and weight.
unstable since: 4.22
Properties
Gtk.Svg:weight
If not set to -1, this value overrides the weight used when rendering the paintable.
unstable since: 4.22
Signals
Signals inherited from GObject (1)
GObject::notify
The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.
Signals inherited from GdkPaintable (2)
GdkPaintable::invalidate-contents
Emitted when the contents of the paintable change.
GdkPaintable::invalidate-size
Emitted when the intrinsic size of the paintable changes.