[librsvg] NodeTRef: use a Fragment for the link, not a String
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] NodeTRef: use a Fragment for the link, not a String
- Date: Fri, 30 Nov 2018 00:32:16 +0000 (UTC)
commit 537a4f2b5f64b09a57921f59d7848ebfa942b4cd
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Nov 29 18:24:40 2018 -0600
NodeTRef: use a Fragment for the link, not a String
rsvg_internals/src/text.rs | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
---
diff --git a/rsvg_internals/src/text.rs b/rsvg_internals/src/text.rs
index 80197017..e3fa4335 100644
--- a/rsvg_internals/src/text.rs
+++ b/rsvg_internals/src/text.rs
@@ -2,8 +2,9 @@ use pango::{self, ContextExt, LayoutExt};
use std::cell::{Cell, RefCell};
use attributes::Attribute;
+use defs::Fragment;
use drawing_ctx::DrawingCtx;
-use error::RenderingError;
+use error::{AttributeResultExt, RenderingError};
use font_props::FontWeightSpec;
use handle::RsvgHandle;
use length::*;
@@ -228,7 +229,7 @@ impl NodeTrait for NodeText {
}
pub struct NodeTRef {
- link: RefCell<Option<String>>,
+ link: RefCell<Option<Fragment>>,
}
impl NodeTRef {
@@ -245,22 +246,22 @@ impl NodeTRef {
draw_ctx: &mut DrawingCtx<'_>,
length: &mut f64,
) -> bool {
- let l = self.link.borrow();
+ let link = self.link.borrow();
- if l.is_none() {
+ if link.is_none() {
return false;
}
- let url = l.as_ref().unwrap();
+ let link = link.as_ref().unwrap();
- let done = if let Some(acquired) = draw_ctx.get_acquired_href(url) {
+ let done = if let Some(acquired) = draw_ctx.get_acquired_node(link) {
let c = acquired.get();
measure_children(&c, cascaded, draw_ctx, length, true)
} else {
rsvg_log!(
"element {} references a nonexistent text source \"{}\"",
node.get_human_readable_name(),
- url,
+ link,
);
false
};
@@ -277,22 +278,22 @@ impl NodeTRef {
y: &mut f64,
clipping: bool,
) -> Result<(), RenderingError> {
- let l = self.link.borrow();
+ let link = self.link.borrow();
- if l.is_none() {
+ if link.is_none() {
return Ok(());
}
- let url = l.as_ref().unwrap();
+ let link = link.as_ref().unwrap();
- if let Some(acquired) = draw_ctx.get_acquired_href(url) {
+ if let Some(acquired) = draw_ctx.get_acquired_node(link) {
let c = acquired.get();
render_children(&c, cascaded, draw_ctx, x, y, true, clipping)?;
} else {
rsvg_log!(
"element {} references a nonexistent text source \"{}\"",
node.get_human_readable_name(),
- url,
+ link,
);
}
@@ -304,7 +305,10 @@ impl NodeTrait for NodeTRef {
fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult {
for (_key, attr, value) in pbag.iter() {
match attr {
- Attribute::XlinkHref => *self.link.borrow_mut() = Some(value.to_owned()),
+ Attribute::XlinkHref => {
+ *self.link.borrow_mut() =
+ Some(Fragment::parse(value).attribute(Attribute::XlinkHref)?)
+ }
_ => (),
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]