[librsvg: 1/3] gradient: move Stop node in gradient.rs
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/3] gradient: move Stop node in gradient.rs
- Date: Fri, 14 Jun 2019 15:43:23 +0000 (UTC)
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]