pub struct Document {
tree: RefCell<Node<NodeData>>,
session: Session,
ids: HashMap<String, Node<NodeData>>,
resources: RefCell<Resources>,
load_options: Arc<LoadOptions>,
stylesheets: Vec<Stylesheet>,
needs_cascade: Cell<bool>,
}Expand description
A loaded SVG file and its derived data.
Fields§
§tree: RefCell<Node<NodeData>>Tree of nodes; the root is guaranteed to be an <svg> element.
This is inside a RefCell because when cascading lazily, we
need a mutable tree.
session: SessionMetadata about the SVG handle.
ids: HashMap<String, Node<NodeData>>Mapping from id attributes to nodes.
resources: RefCell<Resources>Othewr SVG documents and images referenced from this document.
This requires requires interior mutability because we load resources all over the place. Eventually we’ll be able to do this once, at loading time, and keep this immutable.
load_options: Arc<LoadOptions>Used to load referenced resources.
stylesheets: Vec<Stylesheet>Stylesheets defined in the document.
needs_cascade: Cell<bool>Whether there’s a pending cascade operation.
The document starts un-cascaded and with this flag turned on,
to avoid a double cascade if
crate::SvgHandle::set_stylesheet is called after loading
the document.
Implementations§
Source§impl Document
impl Document
Sourcepub fn load_from_stream(
session: Session,
load_options: Arc<LoadOptions>,
load_limiter: LoadingDepthLimiter,
stream: &InputStream,
cancellable: Option<&Cancellable>,
) -> Result<Document, LoadingError>
pub fn load_from_stream( session: Session, load_options: Arc<LoadOptions>, load_limiter: LoadingDepthLimiter, stream: &InputStream, cancellable: Option<&Cancellable>, ) -> Result<Document, LoadingError>
Constructs a Document by loading it from a stream.
Note that the document is not cascaded just after loading. Cascading is done lazily;
call Document::ensure_is_cascaded if you need a cascaded tree of elements.
Sourcepub fn root(&self) -> Node<NodeData>
pub fn root(&self) -> Node<NodeData>
Gets the root node. This is guaranteed to be an <svg> element.
Sourcefn lookup_node(
&self,
node_id: &NodeId,
cancellable: Option<&Cancellable>,
) -> Option<Node<NodeData>>
fn lookup_node( &self, node_id: &NodeId, cancellable: Option<&Cancellable>, ) -> Option<Node<NodeData>>
Looks up a node in this document or one of its resources by its id attribute.
Sourcepub fn lookup_internal_node(&self, id: &str) -> Option<Node<NodeData>>
pub fn lookup_internal_node(&self, id: &str) -> Option<Node<NodeData>>
Looks up a node in this document by its id attribute.
Sourcefn lookup_resource(
&self,
url: &str,
cancellable: Option<&Cancellable>,
) -> Result<Resource, LoadingError>
fn lookup_resource( &self, url: &str, cancellable: Option<&Cancellable>, ) -> Result<Resource, LoadingError>
Loads a resource by URL, or returns a pre-loaded one.
Sourcepub fn cascade(&self, extra: &[Stylesheet])
pub fn cascade(&self, extra: &[Stylesheet])
Runs the CSS cascade on the document tree
This uses the default UserAgent stylesheet, the document’s internal stylesheets, plus an extra set of stylesheets supplied by the caller.
pub fn get_intrinsic_dimensions(&self) -> IntrinsicDimensions
pub fn render_document( &self, cr: &Context, viewport: &Rectangle, options: &RenderingOptions, ) -> Result<(), InternalRenderingError>
pub fn render_layer( &self, cr: &Context, node: Node<NodeData>, viewport: &Rectangle, options: &RenderingOptions, ) -> Result<(), InternalRenderingError>
fn geometry_for_layer( &self, node: Node<NodeData>, viewport: Rect, options: &RenderingOptions, ) -> Result<(Rect, Rect), Box<InternalRenderingError>>
pub fn get_geometry_for_layer( &self, node: Node<NodeData>, viewport: &Rectangle, options: &RenderingOptions, ) -> Result<(Rectangle, Rectangle), InternalRenderingError>
fn get_bbox_for_element( &self, node: &Node<NodeData>, options: &RenderingOptions, ) -> Result<BoundingBox, InternalRenderingError>
Sourcepub fn get_geometry_for_element(
&self,
node: Node<NodeData>,
options: &RenderingOptions,
) -> Result<(Rectangle, Rectangle), InternalRenderingError>
pub fn get_geometry_for_element( &self, node: Node<NodeData>, options: &RenderingOptions, ) -> Result<(Rectangle, Rectangle), InternalRenderingError>
Returns (ink_rect, logical_rect)
pub fn render_element( &self, cr: &Context, node: Node<NodeData>, element_viewport: &Rectangle, options: &RenderingOptions, ) -> Result<(), InternalRenderingError>
Sourcefn draw_tree(
&self,
drawing_mode: DrawingMode,
cr: &Context,
viewport_rect: Rect,
config: RenderingConfiguration,
) -> Result<BoundingBox, Box<InternalRenderingError>>
fn draw_tree( &self, drawing_mode: DrawingMode, cr: &Context, viewport_rect: Rect, config: RenderingConfiguration, ) -> Result<BoundingBox, Box<InternalRenderingError>>
Wrapper for draw_tree. This just ensures that the document
is cascaded before rendering.
fn ensure_is_cascaded(&self)
Auto Trait Implementations§
impl !Freeze for Document
impl !RefUnwindSafe for Document
impl !Send for Document
impl !Sync for Document
impl Unpin for Document
impl UnsafeUnpin for Document
impl !UnwindSafe for Document
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.