[librsvg] NodeStop: validate "offset" using a validation function
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] NodeStop: validate "offset" using a validation function
- Date: Tue, 5 Sep 2017 15:05:42 +0000 (UTC)
commit f46c92493a95c6a223fef138e16400cfe9756a00
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Sep 5 09:21:17 2017 -0500
NodeStop: validate "offset" using a validation function
rust/src/stop.rs | 45 ++++++++++++++++++++++++++-------------------
1 files changed, 26 insertions(+), 19 deletions(-)
---
diff --git a/rust/src/stop.rs b/rust/src/stop.rs
index fd51511..3d61f2f 100644
--- a/rust/src/stop.rs
+++ b/rust/src/stop.rs
@@ -12,6 +12,7 @@ use handle::RsvgHandle;
use length::*;
use node::*;
use opacity::*;
+use parsers::Parse;
use property_bag;
use property_bag::*;
use state::RsvgState;
@@ -38,27 +39,33 @@ impl NodeStop {
}
}
-impl NodeTrait for NodeStop {
- fn set_atts (&self, node: &RsvgNode, handle: *const RsvgHandle, pbag: *const RsvgPropertyBag) ->
NodeResult {
- let offset_length: RsvgLength = property_bag::parse_or_default (pbag, "offset", LengthDir::Both,
None)?;
- match offset_length.unit {
- LengthUnit::Default |
- LengthUnit::Percent => {
- let mut offset = offset_length.length;
-
- if offset < 0.0 {
- offset = 0.0;
- } else if offset > 1.0 {
- offset = 1.0;
- }
+fn validate_offset(length: RsvgLength) -> Result<RsvgLength, AttributeError> {
+ match length.unit {
+ LengthUnit::Default |
+ LengthUnit::Percent => {
+ let mut offset = length.length;
- self.offset.set (offset);
- },
-
- _ => {
- return Err (NodeError::value_error ("offset", "stop offset must be in default or percent
units"));
+ if offset < 0.0 {
+ offset = 0.0;
+ } else if offset > 1.0 {
+ offset = 1.0;
}
+
+ Ok(RsvgLength::new(offset, LengthUnit::Default, LengthDir::Both))
+ },
+
+ _ => {
+ Err (AttributeError::Value ("stop offset must be in default or percent units".to_string()))
}
+ }
+}
+
+impl NodeTrait for NodeStop {
+ fn set_atts (&self, node: &RsvgNode, handle: *const RsvgHandle, pbag: *const RsvgPropertyBag) ->
NodeResult {
+ let length = property_bag::parse_or_default (pbag, "offset", LengthDir::Both,
+ Some(validate_offset))?;
+ assert! (length.unit == LengthUnit::Default || length.unit == LengthUnit::Percent);
+ self.offset.set (length.length);
let state = node.get_state ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]