Files
react-native-svg/lib/fillFilter.js
Horcrux 3c56ad3dd7 refactor LinearGradient and RadialGradient
refactor LinearGradient and RadialGradient
and add fillOpacity support for LinearGradient and RadialGradient
2016-01-28 18:12:59 +08:00

68 lines
1.4 KiB
JavaScript

import rgba from './rgba';
import {
ART
} from 'react-native';
let {
LinearGradient,
RadialGradient
} = ART;
let fillPatterns = {};
let fillReg = /^url\(#(\w+?)\)$/;
function isGradient(obj) {
return obj instanceof LinearGradient || obj instanceof RadialGradient;
}
export default function (props) {
let {fill} = props;
if (fill) {
if (isGradient(fill)) {
return fill;
}
let fillOpacity = +props.fillOpacity;
if (isNaN(fillOpacity)) {
fillOpacity = 1;
}
// 尝试匹配 fill="url(#pattern)"
let matched = fill.match(fillReg);
if (matched) {
let patternName = `${matched[1]}:${props.svgId}`;
let pattern = fillPatterns[patternName];
if (pattern) {
if (pattern.length === 2) {
let dimensions = this.getBoundingBox();
return pattern(dimensions, fillOpacity);
} else {
return pattern(fillOpacity);
}
}
return null;
}
return rgba(props.fill, fillOpacity);
} else if (props.fill === undefined) {
return rgba('#000', fillOpacity);
} else {
return null;
}
}
function set(id, pattern) {
fillPatterns[id] = pattern;
}
function remove(id) {
delete fillPatterns[id];
}
export {
set,
remove
}