[librsvg] filters/image.rs: Pass the Href to the worker functions, not a string
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] filters/image.rs: Pass the Href to the worker functions, not a string
- Date: Thu, 29 Nov 2018 18:05:29 +0000 (UTC)
commit 26c3b08632d9ec4de2e1f84845fb780619eaef7a
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Nov 28 13:29:40 2018 -0600
filters/image.rs: Pass the Href to the worker functions, not a string
rsvg_internals/src/filters/image.rs | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
---
diff --git a/rsvg_internals/src/filters/image.rs b/rsvg_internals/src/filters/image.rs
index 311e852d..f6a28d69 100644
--- a/rsvg_internals/src/filters/image.rs
+++ b/rsvg_internals/src/filters/image.rs
@@ -48,13 +48,15 @@ impl Image {
ctx: &FilterContext,
draw_ctx: &mut DrawingCtx<'_>,
bounds: IRect,
- href: &str,
+ href: &Href,
) -> Result<ImageSurface, FilterError> {
- // TODO: Port more of this to Rust.
- // Currently this is essentially a direct port of the C function.
- let acquired_drawable = draw_ctx
- .get_acquired_node(href)
- .ok_or(FilterError::InvalidInput)?;
+ let url = match *href {
+ Href::FragmentId(ref f) => format!("#{}", f),
+ Href::UriWithFragmentId(ref u, ref f) => format!("{}#{}", u, f),
+ _ => unreachable!(),
+ };
+
+ let acquired_drawable = draw_ctx.get_acquired_node(&url).ok_or(FilterError::InvalidInput)?;
let drawable = acquired_drawable.get();
let surface = ImageSurface::create(
@@ -114,10 +116,16 @@ impl Image {
ctx: &FilterContext,
draw_ctx: &mut DrawingCtx<'_>,
bounds_builder: BoundsBuilder<'_>,
- uri: &str,
+ href: &Href,
) -> Result<ImageSurface, FilterError> {
+ let url = if let Href::PlainUri(ref url) = *href {
+ url
+ } else {
+ unreachable!();
+ };
+
// FIXME: translate the error better here
- let surface = handle::image_surface_new_from_href(self.handle.get() as *mut _, uri)
+ let surface = handle::image_surface_new_from_href(self.handle.get() as *mut _, url)
.map_err(|_| FilterError::InvalidInput)?;
let output_surface = ImageSurface::create(
@@ -213,10 +221,10 @@ impl Filter for Image {
let href = Href::parse(href_str).map_err(|_| FilterError::InvalidInput)?;
let output_surface = match href {
- Href::PlainUri(ref uri) => {
- self.render_external_image(ctx, draw_ctx, bounds_builder, uri)?
+ Href::PlainUri(_) => {
+ self.render_external_image(ctx, draw_ctx, bounds_builder, &href)?
}
- _ => self.render_node(ctx, draw_ctx, bounds, href_str)?,
+ _ => self.render_node(ctx, draw_ctx, bounds, &href)?,
};
Ok(FilterResult {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]