mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-20 05:55:10 +00:00
fix gradients stops in a right order
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import Color from 'color';
|
||||
import _ from 'lodash';
|
||||
|
||||
function insertColorIntoArray(color, targetArray, atIndex) {
|
||||
var c = new Color(color).rgbaArray();
|
||||
@@ -8,30 +9,37 @@ function insertColorIntoArray(color, targetArray, atIndex) {
|
||||
targetArray[atIndex + 3] = c[3];
|
||||
}
|
||||
|
||||
function insertColorsIntoArray(stops, targetArray, atIndex) {
|
||||
var i = 0;
|
||||
function insertColorsIntoArray(stops, targetArray, atIndex, reverse) {
|
||||
let i = 0;
|
||||
|
||||
if ('length' in stops) {
|
||||
while (i < stops.length) {
|
||||
insertColorIntoArray(stops[i], targetArray, atIndex + i * 4);
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
for (var offset in stops) {
|
||||
insertColorIntoArray(stops[offset], targetArray, atIndex + i * 4);
|
||||
i++;
|
||||
let sorted = _.sortBy(_.map(stops, (value, key) => ({key, value})), 'key');
|
||||
if (reverse) {
|
||||
sorted.reverse();
|
||||
}
|
||||
|
||||
sorted.forEach(({value:stop}) => {
|
||||
insertColorIntoArray(stop, targetArray, atIndex + i * 4);
|
||||
i++;
|
||||
});
|
||||
}
|
||||
return atIndex + i * 4;
|
||||
}
|
||||
|
||||
function insertColorStopsIntoArray(stops, targetArray, atIndex) {
|
||||
var lastIndex = insertColorsIntoArray(stops, targetArray, atIndex);
|
||||
let lastIndex = insertColorsIntoArray(stops, targetArray, atIndex, false);
|
||||
insertOffsetsIntoArray(stops, targetArray, lastIndex, 1, false);
|
||||
}
|
||||
|
||||
function insertOffsetsIntoArray(stops, targetArray, atIndex, multi, reverse) {
|
||||
var offsetNumber;
|
||||
var i = 0;
|
||||
let offsetNumber;
|
||||
let i = 0;
|
||||
let arr = [];
|
||||
if ('length' in stops) {
|
||||
while (i < stops.length) {
|
||||
offsetNumber = i / (stops.length - 1) * multi;
|
||||
@@ -39,18 +47,20 @@ function insertOffsetsIntoArray(stops, targetArray, atIndex, multi, reverse) {
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
for (var offsetString in stops) {
|
||||
_.forEach(stops, (stop, offsetString) => {
|
||||
offsetNumber = (+offsetString) * multi;
|
||||
targetArray[atIndex + i] = reverse ? 1 - offsetNumber : offsetNumber;
|
||||
arr.push(reverse ? 1 - offsetNumber : offsetNumber);
|
||||
i++;
|
||||
}
|
||||
});
|
||||
arr.sort();
|
||||
targetArray.splice(atIndex, 0, ...arr);
|
||||
}
|
||||
return atIndex + i;
|
||||
}
|
||||
|
||||
function insertDoubleColorStopsIntoArray(stops, targetArray, atIndex) {
|
||||
var lastIndex = insertColorsIntoArray(stops, targetArray, atIndex);
|
||||
lastIndex = insertColorsIntoArray(stops, targetArray, lastIndex);
|
||||
let lastIndex = insertColorsIntoArray(stops, targetArray, atIndex, false);
|
||||
lastIndex = insertColorsIntoArray(stops, targetArray, lastIndex, true);
|
||||
lastIndex = insertOffsetsIntoArray(stops, targetArray, lastIndex, 0.5, false);
|
||||
insertOffsetsIntoArray(stops, targetArray, lastIndex, 0.5, true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user