[librsvg: 4/5] node: turn overflow_hidden() in a method of the trait
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 4/5] node: turn overflow_hidden() in a method of the trait
- Date: Sat, 18 May 2019 14:55:15 +0000 (UTC)
commit a376c96cba64c02de9c0c9e7f50b27edd733ca4a
Author: Paolo Borelli <pborelli gnome org>
Date: Sat May 18 01:19:22 2019 +0200
node: turn overflow_hidden() in a method of the trait
Instead of a RsvgNode method called by trait implementation,
add a method to the trait and call it from the common code.
rsvg_internals/src/image.rs | 10 +++++-----
rsvg_internals/src/marker.rs | 10 +++++-----
rsvg_internals/src/node.rs | 16 +++++++++++-----
rsvg_internals/src/pattern.rs | 8 ++++----
rsvg_internals/src/structure.rs | 18 +++++++++---------
5 files changed, 34 insertions(+), 28 deletions(-)
---
diff --git a/rsvg_internals/src/image.rs b/rsvg_internals/src/image.rs
index 472a1dab..e351db5d 100644
--- a/rsvg_internals/src/image.rs
+++ b/rsvg_internals/src/image.rs
@@ -38,11 +38,7 @@ impl NodeImage {
}
impl NodeTrait for NodeImage {
- fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
- // SVG element has overflow:hidden
- // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet
- node.set_overflow_hidden();
-
+ fn set_atts(&self, _node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
match attr {
local_name!("x") => self.x.set(attr.parse(value)?),
@@ -72,6 +68,10 @@ impl NodeTrait for NodeImage {
Ok(())
}
+ fn overflow_hidden(&self) -> bool {
+ true
+ }
+
fn draw(
&self,
node: &RsvgNode,
diff --git a/rsvg_internals/src/marker.rs b/rsvg_internals/src/marker.rs
index 045233e0..0ae3c372 100644
--- a/rsvg_internals/src/marker.rs
+++ b/rsvg_internals/src/marker.rs
@@ -197,11 +197,7 @@ impl NodeMarker {
}
impl NodeTrait for NodeMarker {
- fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
- // marker element has overflow:hidden
- // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet
- node.set_overflow_hidden();
-
+ fn set_atts(&self, _node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
match attr {
local_name!("markerUnits") => self.units.set(attr.parse(value)?),
@@ -231,6 +227,10 @@ impl NodeTrait for NodeMarker {
Ok(())
}
+ fn overflow_hidden(&self) -> bool {
+ true
+ }
+
fn set_overridden_properties(&self, values: &mut SpecifiedValues) {
// markers are always displayed, even if <marker> or its ancestors are display:none
values.display = SpecifiedValue::Specified(Default::default());
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 6c35b9cc..babf6933 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -86,6 +86,11 @@ impl NodeData {
}
pub fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>, locale: &Locale) {
+ if self.node_impl.overflow_hidden() {
+ let mut specified_values = self.specified_values.borrow_mut();
+ specified_values.overflow = SpecifiedValue::Specified(Overflow::Hidden);
+ }
+
self.save_style_attribute(pbag);
if let Err(e) = self
@@ -328,6 +333,12 @@ pub trait NodeTrait: Downcast {
/// from defaults in the node's `SpecifiedValues`.
fn set_overridden_properties(&self, _values: &mut SpecifiedValues) {}
+ /// Whether this node has overflow:hidden.
+ /// https://www.w3.org/TR/SVG/styling.html#UAStyleSheet
+ fn overflow_hidden(&self) -> bool {
+ false
+ }
+
fn draw(
&self,
_node: &RsvgNode,
@@ -588,11 +599,6 @@ impl RsvgNode {
pub fn is_overflow(&self) -> bool {
self.borrow().specified_values.borrow().is_overflow()
}
-
- pub fn set_overflow_hidden(&self) {
- let mut specified_values = self.borrow().specified_values.borrow_mut();
- specified_values.overflow = SpecifiedValue::Specified(Overflow::Hidden);
- }
}
impl fmt::Display for RsvgNode {
diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs
index 323ceba1..cc55519e 100644
--- a/rsvg_internals/src/pattern.rs
+++ b/rsvg_internals/src/pattern.rs
@@ -171,10 +171,6 @@ impl NodePattern {
impl NodeTrait for NodePattern {
fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
- // pattern element has overflow:hidden
- // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet
- node.set_overflow_hidden();
-
let mut p = self.pattern.borrow_mut();
p.node = Some(node.downgrade());
@@ -217,6 +213,10 @@ impl NodeTrait for NodePattern {
Ok(())
}
+
+ fn overflow_hidden(&self) -> bool {
+ true
+ }
}
impl PaintSource for NodePattern {
diff --git a/rsvg_internals/src/structure.rs b/rsvg_internals/src/structure.rs
index 2df500c7..fd849872 100644
--- a/rsvg_internals/src/structure.rs
+++ b/rsvg_internals/src/structure.rs
@@ -203,10 +203,6 @@ impl NodeSvg {
impl NodeTrait for NodeSvg {
fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
- // SVG element has overflow:hidden
- // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet
- node.set_overflow_hidden();
-
// x & y attributes have no effect on outermost svg
// http://www.w3.org/TR/SVG/struct.html#SVGElement
let is_inner_svg = node.parent().is_some();
@@ -246,6 +242,10 @@ impl NodeTrait for NodeSvg {
Ok(())
}
+ fn overflow_hidden(&self) -> bool {
+ true
+ }
+
fn draw(
&self,
node: &RsvgNode,
@@ -469,11 +469,7 @@ impl NodeSymbol {
}
impl NodeTrait for NodeSymbol {
- fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
- // symbol element has overflow:hidden
- // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet
- node.set_overflow_hidden();
-
+ fn set_atts(&self, _node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
match attr {
local_name!("preserveAspectRatio") => {
@@ -488,4 +484,8 @@ impl NodeTrait for NodeSymbol {
Ok(())
}
+
+ fn overflow_hidden(&self) -> bool {
+ true
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]