[librsvg: 1/3] gradient: move Stop node in gradient.rs



commit d8f04dc15e1780d8016267b1935c0ab162ec2b37
Author: Paolo Borelli <pborelli gnome org>
Date:   Wed Jun 12 15:21:19 2019 +0200

    gradient: move Stop node in gradient.rs
    
    stop.rs was just a bunch of lines and we already follow the
    convention of havig closely related node in the same file.

 Makefile.am                       |  1 -
 po/POTFILES.in                    |  1 -
 rsvg_internals/src/create_node.rs |  4 ++--
 rsvg_internals/src/gradient.rs    | 41 ++++++++++++++++++++++++++++++++--
 rsvg_internals/src/lib.rs         |  1 -
 rsvg_internals/src/stop.rs        | 47 ---------------------------------------
 6 files changed, 41 insertions(+), 54 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 046c7f17..690830a3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -99,7 +99,6 @@ RUST_SRC =                                                    \
        rsvg_internals/src/surface_utils/shared_surface.rs      \
        rsvg_internals/src/space.rs                             \
        rsvg_internals/src/srgb.rs                              \
-       rsvg_internals/src/stop.rs                              \
        rsvg_internals/src/structure.rs                         \
        rsvg_internals/src/style.rs                             \
        rsvg_internals/src/svg.rs                               \
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 2365aee6..cdba57dc 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -76,7 +76,6 @@ rsvg_internals/src/shapes.rs
 rsvg_internals/src/space.rs
 rsvg_internals/src/srgb.rs
 rsvg_internals/src/state.rs
-rsvg_internals/src/stop.rs
 rsvg_internals/src/structure.rs
 rsvg_internals/src/style.rs
 rsvg_internals/src/surface_utils/iterators.rs
diff --git a/rsvg_internals/src/create_node.rs b/rsvg_internals/src/create_node.rs
index b6deb6dc..71d2968d 100644
--- a/rsvg_internals/src/create_node.rs
+++ b/rsvg_internals/src/create_node.rs
@@ -21,7 +21,8 @@ use crate::filters::{
     tile::Tile,
     turbulence::Turbulence,
 };
-use crate::gradient::NodeGradient;
+
+use crate::gradient::{NodeGradient, NodeStop};
 use crate::image::NodeImage;
 use crate::link::NodeLink;
 use crate::marker::NodeMarker;
@@ -30,7 +31,6 @@ use crate::node::*;
 use crate::pattern::NodePattern;
 use crate::property_bag::PropertyBag;
 use crate::shapes::{NodeCircle, NodeEllipse, NodeLine, NodePath, NodePoly, NodeRect};
-use crate::stop::NodeStop;
 use crate::structure::{NodeGroup, NodeNonRendering, NodeSvg, NodeSwitch, NodeSymbol, NodeUse};
 use crate::style::NodeStyle;
 use crate::text::{NodeTRef, NodeTSpan, NodeText};
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 99cc521f..e0f2305d 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -2,7 +2,7 @@ use cairo::{self, MatrixTrait};
 use cssparser::{self, CowRcStr, Parser, Token};
 use markup5ever::local_name;
 
-use std::cell::RefCell;
+use std::cell::{Cell, RefCell};
 
 use crate::allowed_url::Fragment;
 use crate::bbox::*;
@@ -17,7 +17,6 @@ use crate::properties::ComputedValues;
 use crate::property_bag::PropertyBag;
 use crate::property_defs::StopColor;
 use crate::rect::RectangleExt;
-use crate::stop::*;
 use crate::unit_interval::UnitInterval;
 
 #[derive(Copy, Clone)]
@@ -518,6 +517,44 @@ fn fix_focus_point(fx: f64, fy: f64, cx: f64, cy: f64, radius: f64) -> (f64, f64
     (cx + dx, cy + dy)
 }
 
+#[derive(Default)]
+pub struct NodeStop {
+    offset: Cell<UnitInterval>,
+}
+
+impl NodeStop {
+    pub fn get_offset(&self) -> UnitInterval {
+        self.offset.get()
+    }
+}
+
+fn validate_offset(length: LengthBoth) -> Result<LengthBoth, ValueErrorKind> {
+    match length.unit() {
+        LengthUnit::Px | LengthUnit::Percent => Ok(length),
+        _ => Err(ValueErrorKind::Value(
+            "stop offset must be in default or percent units".to_string(),
+        )),
+    }
+}
+
+impl NodeTrait for NodeStop {
+    fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
+        for (attr, value) in pbag.iter() {
+            match attr {
+                local_name!("offset") => {
+                    self.offset.set(
+                        attr.parse_and_validate(value, validate_offset)
+                            .map(|l| UnitInterval::clamp(l.length()))?,
+                    );
+                }
+                _ => (),
+            }
+        }
+
+        Ok(())
+    }
+}
+
 impl PaintSource for NodeGradient {
     type Source = Gradient;
 
diff --git a/rsvg_internals/src/lib.rs b/rsvg_internals/src/lib.rs
index dd0e4e56..a504c15a 100644
--- a/rsvg_internals/src/lib.rs
+++ b/rsvg_internals/src/lib.rs
@@ -116,7 +116,6 @@ pub mod rect;
 mod shapes;
 mod space;
 pub mod srgb;
-mod stop;
 mod structure;
 mod style;
 pub mod surface_utils;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]