[librsvg: 1/9] node: panic in get_impl directly
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/9] node: panic in get_impl directly
- Date: Mon, 27 May 2019 14:23:10 +0000 (UTC)
commit 22521f83a459c0a4f2994a9a26b1878189f71710
Author: Paolo Borelli <pborelli gnome org>
Date: Sat May 25 18:23:37 2019 +0200
node: panic in get_impl directly
We are anyway calling unwrap() in every caller
rsvg_internals/src/filters/component_transfer.rs | 4 ++--
rsvg_internals/src/filters/context.rs | 4 ++--
rsvg_internals/src/filters/light/lighting.rs | 2 +-
rsvg_internals/src/gradient.rs | 2 +-
rsvg_internals/src/node.rs | 8 ++++++--
rsvg_internals/src/pattern.rs | 4 +---
6 files changed, 13 insertions(+), 11 deletions(-)
---
diff --git a/rsvg_internals/src/filters/component_transfer.rs
b/rsvg_internals/src/filters/component_transfer.rs
index bd4c6281..2b3ac234 100644
--- a/rsvg_internals/src/filters/component_transfer.rs
+++ b/rsvg_internals/src/filters/component_transfer.rs
@@ -293,7 +293,7 @@ impl Filter for ComponentTransfer {
let get_node = |channel| {
functions
.clone()
- .find(|c| c.get_impl::<FuncX>().unwrap().channel == channel)
+ .find(|c| c.get_impl::<FuncX>().channel == channel)
};
let func_r = get_node(Channel::R);
let func_g = get_node(Channel::G);
@@ -318,7 +318,7 @@ impl Filter for ComponentTransfer {
#[inline]
fn func_or_default<'a>(func: &'a Option<RsvgNode>, default: &'a FuncX) -> &'a FuncX {
func.as_ref()
- .map(|c| c.get_impl::<FuncX>().unwrap())
+ .map(|c| c.get_impl::<FuncX>())
.unwrap_or(default)
}
diff --git a/rsvg_internals/src/filters/context.rs b/rsvg_internals/src/filters/context.rs
index f2c28468..f6544e84 100644
--- a/rsvg_internals/src/filters/context.rs
+++ b/rsvg_internals/src/filters/context.rs
@@ -114,7 +114,7 @@ impl FilterContext {
height: 0.0,
});
- let filter = filter_node.get_impl::<NodeFilter>().unwrap();
+ let filter = filter_node.get_impl::<NodeFilter>();
let affine = match filter.filterunits.get() {
CoordUnits::UserSpaceOnUse => cr_affine,
@@ -305,7 +305,7 @@ impl FilterContext {
/// Pushes the viewport size based on the value of `primitiveUnits`.
pub fn get_view_params(&self, draw_ctx: &mut DrawingCtx) -> ViewParams {
- let filter = self.node.get_impl::<NodeFilter>().unwrap();
+ let filter = self.node.get_impl::<NodeFilter>();
// See comments in compute_effects_region() for how this works.
if filter.primitiveunits.get() == CoordUnits::ObjectBoundingBox {
diff --git a/rsvg_internals/src/filters/light/lighting.rs b/rsvg_internals/src/filters/light/lighting.rs
index 69e7c447..cd2f7b98 100644
--- a/rsvg_internals/src/filters/light/lighting.rs
+++ b/rsvg_internals/src/filters/light/lighting.rs
@@ -233,7 +233,7 @@ impl Filter for Lighting {
return Err(FilterError::ChildNodeInError);
}
- let light_source = light_source.get_impl::<LightSource>().unwrap();
+ let light_source = light_source.get_impl::<LightSource>();
let light_source = light_source.transform(ctx);
let mut input_surface = input.surface().clone();
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 043e865d..da60352c 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -535,7 +535,7 @@ impl PaintSource for NodeGradient {
draw_ctx: &mut DrawingCtx,
bbox: &BoundingBox,
) -> Result<Option<Self::Source>, RenderingError> {
- let node_gradient = node.get_impl::<NodeGradient>().unwrap();
+ let node_gradient = node.get_impl::<NodeGradient>();
let gradient = node_gradient.get_gradient_with_color_stops_from_node(node);
let mut result = gradient.clone();
let mut stack = NodeStack::new();
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 7a37a04a..b3e55ff8 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -500,8 +500,12 @@ impl RsvgNode {
}
}
- pub fn get_impl<T: NodeTrait>(&self) -> Option<&T> {
- self.borrow().get_impl()
+ pub fn get_impl<T: NodeTrait>(&self) -> &T {
+ if let Some(t) = (&self.borrow().node_impl).downcast_ref::<T>() {
+ t
+ } else {
+ panic!("could not downcast");
+ }
}
pub fn draw_children(
diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs
index cc55519e..bc07ece6 100644
--- a/rsvg_internals/src/pattern.rs
+++ b/rsvg_internals/src/pattern.rs
@@ -228,9 +228,7 @@ impl PaintSource for NodePattern {
draw_ctx: &mut DrawingCtx,
_bbox: &BoundingBox,
) -> Result<Option<Self::Source>, RenderingError> {
- let node_pattern = node.get_impl::<NodePattern>().unwrap();
- let pattern = &*node_pattern.pattern.borrow();
- let mut result = pattern.clone();
+ let mut result = node.get_impl::<NodePattern>().pattern.borrow().clone();
let mut stack = NodeStack::new();
while !result.is_resolved() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]