[librsvg] element: add Element::draw()
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] element: add Element::draw()
- Date: Sat, 4 Apr 2020 11:03:09 +0000 (UTC)
commit 2672f34df17e87b106103204ddbf294f2db93366
Author: Paolo Borelli <pborelli gnome org>
Date: Sat Apr 4 12:37:52 2020 +0200
element: add Element::draw()
This encapsulates the drawing logic specific to an element.
rsvg_internals/src/element.rs | 21 +++++++++++++++++++++
rsvg_internals/src/node.rs | 16 +---------------
2 files changed, 22 insertions(+), 15 deletions(-)
---
diff --git a/rsvg_internals/src/element.rs b/rsvg_internals/src/element.rs
index efffe4b8..1617225d 100644
--- a/rsvg_internals/src/element.rs
+++ b/rsvg_internals/src/element.rs
@@ -350,6 +350,27 @@ impl Element {
pub fn is_in_error(&self) -> bool {
self.result.is_err()
}
+
+ pub fn draw(
+ &self,
+ node: &Node,
+ acquired_nodes: &mut AcquiredNodes,
+ cascaded: &CascadedValues<'_>,
+ draw_ctx: &mut DrawingCtx,
+ clipping: bool,
+ ) -> Result<BoundingBox, RenderingError> {
+ if !self.is_in_error() {
+ draw_ctx.with_saved_transform(Some(self.transform), &mut |dc| {
+ self.element_impl
+ .draw(node, acquired_nodes, cascaded, dc, clipping)
+ })
+ } else {
+ rsvg_log!("(not rendering element {} because it is in error)", self);
+
+ // maybe we should actually return a RenderingError::ElementIsInError here?
+ Ok(draw_ctx.empty_bbox())
+ }
+ }
}
impl fmt::Display for Element {
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 54579fd5..856ac24d 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -283,21 +283,7 @@ impl NodeDraw for Node {
clipping: bool,
) -> Result<BoundingBox, RenderingError> {
match *self.borrow() {
- NodeData::Element(ref e) => {
- if !e.is_in_error() {
- let transform = e.get_transform();
- draw_ctx.with_saved_transform(Some(transform), &mut |dc| {
- e.get_element_trait()
- .draw(self, acquired_nodes, cascaded, dc, clipping)
- })
- } else {
- rsvg_log!("(not rendering element {} because it is in error)", self);
-
- // maybe we should actually return a RenderingError::NodeIsInError here?
- Ok(draw_ctx.empty_bbox())
- }
- }
-
+ NodeData::Element(ref e) => e.draw(self, acquired_nodes, cascaded, draw_ctx, clipping),
_ => Ok(draw_ctx.empty_bbox()),
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]