summaryrefslogtreecommitdiff
path: root/usvg/src
diff options
context:
space:
mode:
authorRazrFalcon <razrfalcon@gmail.com>2018-12-28 20:14:58 +0200
committerRazrFalcon <razrfalcon@gmail.com>2018-12-28 20:14:58 +0200
commit69351245443d05732af9526a8f1c087048ffa8a5 (patch)
treebebb6a952ae9cc7ad896dbc4b6f0d85594ce5d94 /usvg/src
parente6efe1025e9faf4c67f6ea829858d38e8fe6ee9b (diff)
Fixed 'offset' attribute resolving inside the 'stop' element.
Diffstat (limited to 'usvg/src')
-rw-r--r--usvg/src/preproc/fix_gradient_stops.rs63
1 files changed, 29 insertions, 34 deletions
diff --git a/usvg/src/preproc/fix_gradient_stops.rs b/usvg/src/preproc/fix_gradient_stops.rs
index a5a347f..bc0f0ae 100644
--- a/usvg/src/preproc/fix_gradient_stops.rs
+++ b/usvg/src/preproc/fix_gradient_stops.rs
@@ -81,6 +81,35 @@ fn _fix_gradient_stops(grad: &Node, stops: &mut Vec<Node>, doc: &mut Document) {
}
}
+ // Remove zeros.
+ //
+ // From:
+ // offset="0.0"
+ // offset="0.0"
+ // offset="0.7"
+ //
+ // To:
+ // offset="0.0"
+ // offset="0.00000001"
+ // offset="0.7"
+ {
+ stops.clear();
+ for stop in grad.children() {
+ stops.push(stop);
+ }
+
+ while stops.len() >= 2 {
+ let offset1 = stops[0].attributes().get_number_or(AId::Offset, 0.0);
+ let offset2 = stops[1].attributes().get_number_or(AId::Offset, 0.0);
+
+ if offset1.is_fuzzy_zero() && offset2.is_fuzzy_zero() {
+ stops[1].set_attribute((AId::Offset, offset1 + f64::EPSILON));
+ } else {
+ break;
+ }
+ }
+ }
+
// Shift equal offsets.
//
// From:
@@ -97,11 +126,6 @@ fn _fix_gradient_stops(grad: &Node, stops: &mut Vec<Node>, doc: &mut Document) {
for mut stop in grad.children() {
let mut offset = stop.attributes().get_number_or(AId::Offset, 0.0);
- if offset.is_fuzzy_zero() {
- prev_offset = 0.0;
- continue;
- }
-
// Next offset must be smaller then previous.
if offset < prev_offset || offset.fuzzy_eq(&prev_offset) {
if let Some(mut prev_stop) = stop.previous_sibling() {
@@ -117,33 +141,4 @@ fn _fix_gradient_stops(grad: &Node, stops: &mut Vec<Node>, doc: &mut Document) {
prev_offset = offset;
}
}
-
- // Remove zeros.
- //
- // From:
- // offset="0.0"
- // offset="0.0"
- // offset="0.7"
- //
- // To:
- // offset="0.0"
- // offset="0.00000001"
- // offset="0.7"
- {
- stops.clear();
- for stop in grad.children() {
- stops.push(stop);
- }
-
- while stops.len() >= 2 {
- let offset1 = stops[0].attributes().get_number_or(AId::Offset, 0.0);
- let offset2 = stops[1].attributes().get_number_or(AId::Offset, 0.0);
-
- if offset1.is_fuzzy_zero() && offset2.is_fuzzy_zero() {
- stops[1].set_attribute((AId::Offset, offset1 + f64::EPSILON));
- } else {
- break;
- }
- }
- }
}