Struct rsvg::CairoRenderer
source · pub struct CairoRenderer<'a> { /* private fields */ }
Expand description
Can render an SvgHandle
to a Cairo context.
Implementations§
source§impl<'a> CairoRenderer<'a>
impl<'a> CairoRenderer<'a>
sourcepub fn new(handle: &'a SvgHandle) -> Self
pub fn new(handle: &'a SvgHandle) -> Self
Creates a CairoRenderer
for the specified SvgHandle
.
The default dots-per-inch (DPI) value is set to 96; you can change it
with the with_dpi
method.
sourcepub fn with_dpi(self, dpi_x: f64, dpi_y: f64) -> Self
pub fn with_dpi(self, dpi_x: f64, dpi_y: f64) -> Self
Configures the dots-per-inch for resolving physical lengths.
If an SVG document has physical units like 5cm
, they must be resolved
to pixel-based values. The default pixel density is 96 DPI in
both dimensions.
sourcepub fn with_language(self, language: &Language) -> Self
pub fn with_language(self, language: &Language) -> Self
Configures the set of languages used for rendering.
SVG documents can use the <switch>
element, whose children have a
systemLanguage
attribute; only the first child which has a systemLanguage
that
matches the preferred languages will be rendered.
This function sets the preferred languages. The default is
Language::FromEnvironment
, which means that the set of preferred languages will
be obtained from the program’s environment. To set an explicit list of languages,
you can use Language::AcceptLanguage
instead.
sourcepub fn with_cancellable<C: IsA<Cancellable>>(self, cancellable: &C) -> Self
pub fn with_cancellable<C: IsA<Cancellable>>(self, cancellable: &C) -> Self
Sets a cancellable to be able to interrupt rendering.
The rendering functions like render_document
will normally render the whole
SVG document tree. However, they can be interrupted if you set a cancellable
object with this method. To interrupt rendering, you can call
[gio::CancellableExt::cancel()
] from a different thread than where the rendering
is happening.
Since rendering happens as a side-effect on the Cairo context (cr
) that is
passed to the rendering functions, it may be that the cr
’s target surface is in
an undefined state if the rendering is cancelled. The surface may have not yet
been painted on, or it may contain a partially-rendered document. For this
reason, if your application does not want to leave the target surface in an
inconsistent state, you may prefer to use a temporary surface for rendering, which
can be discarded if your code cancels the rendering.
sourcepub fn intrinsic_dimensions(&self) -> IntrinsicDimensions
pub fn intrinsic_dimensions(&self) -> IntrinsicDimensions
Queries the width
, height
, and viewBox
attributes in an SVG document.
If you are calling this function to compute a scaling factor to render the SVG,
consider simply using render_document
instead; it will do the scaling
computations automatically.
See also intrinsic_size_in_pixels
, which does the conversion to pixels if
possible.
sourcepub fn intrinsic_size_in_pixels(&self) -> Option<(f64, f64)>
pub fn intrinsic_size_in_pixels(&self) -> Option<(f64, f64)>
Converts the SVG document’s intrinsic dimensions to pixels, if possible.
Returns Some(width, height)
in pixel units if the SVG document has width
and
height
attributes with physical dimensions (CSS pixels, cm, in, etc.) or
font-based dimensions (em, ex).
Note that the dimensions are floating-point numbers, so your application can know
the exact size of an SVG document. To get integer dimensions, you should use
f64::ceil()
to round up to the nearest integer (just using f64::round()
,
may may chop off pixels with fractional coverage).
If the SVG document has percentage-based width
and height
attributes, or if
either of those attributes are not present, returns None
. Dimensions of that
kind require more information to be resolved to pixels; for example, the calling
application can use a viewport size to scale percentage-based dimensions.
sourcepub fn render_document(
&self,
cr: &Context,
viewport: &Rectangle,
) -> Result<(), RenderingError>
pub fn render_document( &self, cr: &Context, viewport: &Rectangle, ) -> Result<(), RenderingError>
Renders the whole SVG document fitted to a viewport
The viewport
gives the position and size at which the whole SVG
document will be rendered.
The cr
must be in a cairo::Status::Success
state, or this function
will not render anything, and instead will return
RenderingError::Cairo
with the cr
’s current error state.
sourcepub fn geometry_for_layer(
&self,
id: Option<&str>,
viewport: &Rectangle,
) -> Result<(Rectangle, Rectangle), RenderingError>
pub fn geometry_for_layer( &self, id: Option<&str>, viewport: &Rectangle, ) -> Result<(Rectangle, Rectangle), RenderingError>
Computes the (ink_rect, logical_rect) of an SVG element, as if the SVG were rendered to a specific viewport.
Element IDs should look like an URL fragment identifier; for
example, pass Some("#foo")
to get the geometry of the
element that has an id="foo"
attribute.
The “ink rectangle” is the bounding box that would be painted for fully- stroked and filled elements.
The “logical rectangle” just takes into account the unstroked paths and text outlines.
Note that these bounds are not minimum bounds; for example, clipping paths are not taken into account.
You can pass None
for the id
if you want to measure all
the elements in the SVG, i.e. to measure everything from the
root element.
This operation is not constant-time, as it involves going through all the child elements.
FIXME: example
sourcepub fn render_layer(
&self,
cr: &Context,
id: Option<&str>,
viewport: &Rectangle,
) -> Result<(), RenderingError>
pub fn render_layer( &self, cr: &Context, id: Option<&str>, viewport: &Rectangle, ) -> Result<(), RenderingError>
Renders a single SVG element in the same place as for a whole SVG document
This is equivalent to render_document
, but renders only a single element and its
children, as if they composed an individual layer in the SVG. The element is
rendered with the same transformation matrix as it has within the whole SVG
document. Applications can use this to re-render a single element and repaint it
on top of a previously-rendered document, for example.
Note that the id
must be a plain fragment identifier like #foo
, with
a leading #
character.
The viewport
gives the position and size at which the whole SVG
document would be rendered. This function will effectively place the
whole SVG within that viewport, but only render the element given by
id
.
The cr
must be in a cairo::Status::Success
state, or this function
will not render anything, and instead will return
RenderingError::Cairo
with the cr
’s current error state.
sourcepub fn geometry_for_element(
&self,
id: Option<&str>,
) -> Result<(Rectangle, Rectangle), RenderingError>
pub fn geometry_for_element( &self, id: Option<&str>, ) -> Result<(Rectangle, Rectangle), RenderingError>
Computes the (ink_rect, logical_rect) of a single SVG element
While geometry_for_layer
computes the geometry of an SVG element subtree with
its transformation matrix, this other function will compute the element’s geometry
as if it were being rendered under an identity transformation by itself. That is,
the resulting geometry is as if the element got extracted by itself from the SVG.
This function is the counterpart to render_element
.
Element IDs should look like an URL fragment identifier; for
example, pass Some("#foo")
to get the geometry of the
element that has an id="foo"
attribute.
The “ink rectangle” is the bounding box that would be painted for fully- stroked and filled elements.
The “logical rectangle” just takes into account the unstroked paths and text outlines.
Note that these bounds are not minimum bounds; for example, clipping paths are not taken into account.
You can pass None
for the id
if you want to measure all
the elements in the SVG, i.e. to measure everything from the
root element.
This operation is not constant-time, as it involves going through all the child elements.
FIXME: example
sourcepub fn render_element(
&self,
cr: &Context,
id: Option<&str>,
element_viewport: &Rectangle,
) -> Result<(), RenderingError>
pub fn render_element( &self, cr: &Context, id: Option<&str>, element_viewport: &Rectangle, ) -> Result<(), RenderingError>
Renders a single SVG element to a given viewport
This function can be used to extract individual element subtrees and render them,
scaled to a given element_viewport
. This is useful for applications which have
reusable objects in an SVG and want to render them individually; for example, an
SVG full of icons that are meant to be be rendered independently of each other.
Note that the id
must be a plain fragment identifier like #foo
, with
a leading #
character.
The element_viewport
gives the position and size at which the named element will
be rendered. FIXME: mention proportional scaling.
The cr
must be in a cairo::Status::Success
state, or this function
will not render anything, and instead will return
RenderingError::Cairo
with the cr
’s current error state.
Auto Trait Implementations§
impl<'a> Freeze for CairoRenderer<'a>
impl<'a> !RefUnwindSafe for CairoRenderer<'a>
impl<'a> !Send for CairoRenderer<'a>
impl<'a> !Sync for CairoRenderer<'a>
impl<'a> Unpin for CairoRenderer<'a>
impl<'a> !UnwindSafe for CairoRenderer<'a>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.