[librsvg: 4/6] use: implement Default and simplify get_rect
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 4/6] use: implement Default and simplify get_rect
- Date: Tue, 22 Dec 2020 17:39:49 +0000 (UTC)
commit d2de1904188ff1747ff488cc4f5cd7535127da17
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Dec 20 12:07:59 2020 +0100
use: implement Default and simplify get_rect
src/drawing_ctx.rs | 8 ++------
src/structure.rs | 39 +++++++++++++++++++++------------------
2 files changed, 23 insertions(+), 24 deletions(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 1c7f89f0..33b2d129 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -1609,7 +1609,7 @@ impl DrawingCtx {
node: &Node,
acquired_nodes: &mut AcquiredNodes<'_>,
cascaded: &CascadedValues<'_>,
- link: Option<&NodeId>,
+ link: &NodeId,
clipping: bool,
) -> Result<BoundingBox, RenderingError> {
// <use> is an element that is used directly, unlike
@@ -1630,11 +1630,7 @@ impl DrawingCtx {
_ => unreachable!(),
};
- if link.is_none() {
- return Ok(self.empty_bbox());
- }
-
- let acquired = match acquired_nodes.acquire(link.unwrap()) {
+ let acquired = match acquired_nodes.acquire(link) {
Ok(acquired) => acquired,
Err(AcquireError::CircularReference(node)) => {
diff --git a/src/structure.rs b/src/structure.rs
index 6706f220..afa3efee 100644
--- a/src/structure.rs
+++ b/src/structure.rs
@@ -241,38 +241,37 @@ impl Draw for Svg {
}
}
-#[derive(Default)]
pub struct Use {
link: Option<NodeId>,
x: Length<Horizontal>,
y: Length<Vertical>,
- width: Option<ULength<Horizontal>>,
- height: Option<ULength<Vertical>>,
+ width: ULength<Horizontal>,
+ height: ULength<Vertical>,
}
impl Use {
pub fn get_rect(&self, values: &ComputedValues, params: &ViewParams) -> Rect {
let x = self.x.normalize(values, ¶ms);
let y = self.y.normalize(values, ¶ms);
-
- // If attributes ‘width’ and/or ‘height’ are not specified,
- // [...] use values of '100%' for these attributes.
- // From https://www.w3.org/TR/SVG/struct.html#UseElement in
- // "If the ‘use’ element references a ‘symbol’ element"
-
- let w = self
- .width
- .unwrap_or_else(|| ULength::<Horizontal>::parse_str("100%").unwrap())
- .normalize(values, ¶ms);
- let h = self
- .height
- .unwrap_or_else(|| ULength::<Vertical>::parse_str("100%").unwrap())
- .normalize(values, ¶ms);
+ let w = self.width.normalize(values, ¶ms);
+ let h = self.height.normalize(values, ¶ms);
Rect::new(x, y, x + w, y + h)
}
}
+impl Default for Use {
+ fn default() -> Use {
+ Use {
+ link: None,
+ x: Default::default(),
+ y: Default::default(),
+ width: ULength::<Horizontal>::parse_str("100%").unwrap(),
+ height: ULength::<Vertical>::parse_str("100%").unwrap(),
+ }
+ }
+}
+
impl SetAttributes for Use {
fn set_attributes(&mut self, attrs: &Attributes) -> ElementResult {
for (attr, value) in attrs.iter() {
@@ -303,7 +302,11 @@ impl Draw for Use {
draw_ctx: &mut DrawingCtx,
clipping: bool,
) -> Result<BoundingBox, RenderingError> {
- draw_ctx.draw_from_use_node(node, acquired_nodes, cascaded, self.link.as_ref(), clipping)
+ if let Some(link) = self.link.as_ref() {
+ draw_ctx.draw_from_use_node(node, acquired_nodes, cascaded, link, clipping)
+ } else {
+ Ok(draw_ctx.empty_bbox())
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]