diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..7d81490b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1b87fb32 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +.idea/ diff --git a/Circle.js b/Circle.js new file mode 100644 index 00000000..e48ba40e --- /dev/null +++ b/Circle.js @@ -0,0 +1,39 @@ +import React, { + Component, + PropTypes +} from 'react-native'; +import { + Surface, + Shape +} from 'ReactNativeART'; +import fillFilter from './lib/fillFilter'; + +let propType = PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired; +class Circle extends Component{ + static displayName = 'Polygon'; + static propTypes = { + cx: propType, + cy: propType, + r: propType + }; + render() { + let {cx, cy, r} = this.props; + let d = ` + M ${cx} ${cy} + m -${r}, 0 + a ${r}, ${r} 0 1, 0 ${r * 2}, 0 + a ${r}, ${r} 0 1, 0 ${-r * 2}, 0 + Z + `; + return ; + } +} + +export default Circle; diff --git a/Ellipse.js b/Ellipse.js new file mode 100644 index 00000000..dc73a921 --- /dev/null +++ b/Ellipse.js @@ -0,0 +1,40 @@ +import React, { + Component, + PropTypes +} from 'react-native'; +import { + Surface, + Shape +} from 'ReactNativeART'; +import fillFilter from './lib/fillFilter'; + +let propType = PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired; +class Ellipse extends Component{ + static displayName = 'Polygon'; + static propTypes = { + cx: propType, + cy: propType, + rx: propType, + ry: propType + }; + render() { + let {cx, cy, rx, ry} = this.props; + let d = ` + M ${cx - rx} ${cy} + a ${rx}, ${ry} 0 1, 0 ${rx * 2}, 0 + a ${rx}, ${ry} 0 1, 0 ${-rx * 2}, 0 + Z + `; + return ; + } +} + +export default Ellipse; diff --git a/Line.js b/Line.js new file mode 100644 index 00000000..30a55e4d --- /dev/null +++ b/Line.js @@ -0,0 +1,37 @@ +import React, { + Component, + PropTypes +} from 'react-native'; +import { + Surface, + Shape, + Group +} from 'ReactNativeART'; + + +let propType = PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired; + +class Line extends Component{ + static displayName = 'Line'; + static propTypes = { + x1: propType, + x2: propType, + y1: propType, + y2: propType + }; + render() { + let {x1,y1,x2,y2} = this.props; + let d = `M${x1},${y1}L${x2},${y2}Z`; + return ; + } +} + +export default Line; diff --git a/Polygon.js b/Polygon.js new file mode 100644 index 00000000..0942915f --- /dev/null +++ b/Polygon.js @@ -0,0 +1,28 @@ +import React, { + Component, + PropTypes +} from 'react-native'; +import { + Surface, + Shape, + Group +} from 'ReactNativeART'; +import fillFilter from './lib/fillFilter'; + +class Polygon extends Component{ + static displayName = 'Polygon'; + static propTypes = { + points: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired + }; + render() { + let props = this.props; + let d = 'M' + props.points.trim().replace(/\s+/g, 'L') + 'z'; + return ; + } +} +export default Polygon; diff --git a/Polyline.js b/Polyline.js new file mode 100644 index 00000000..d6e35622 --- /dev/null +++ b/Polyline.js @@ -0,0 +1,27 @@ +import React, { + Component, + PropTypes +} from 'react-native'; +import { + Surface, + Shape +} from 'ReactNativeART'; + + +class Polyline extends Component{ + static displayName = 'Polyline'; + static propTypes = { + points: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired + }; + render() { + let props = this.props; + let d = 'M' + props.points.trim().replace(/\s+/g, 'L'); + return ; + } +} +export default Polyline; diff --git a/README.md b/README.md new file mode 100644 index 00000000..3ac7bb1e --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +### react-native-art-svg + diff --git a/Rectangle.js b/Rectangle.js new file mode 100644 index 00000000..e69de29b diff --git a/Svg.js b/Svg.js new file mode 100644 index 00000000..59938f78 --- /dev/null +++ b/Svg.js @@ -0,0 +1,21 @@ +import Circle from './Circle'; +import Ellipse from './Ellipse'; +import Polygon from './Polygon'; +import Polyline from './Polyline'; +import { + Surface, + Shape, + Group +} from 'ReactNativeART'; + +export { + Surface as Svg, + Circle, + Ellipse, + Group, + Shape as Path, + Polygon, + Polyline +}; + +export default Surface; diff --git a/lib/fillFilter.js b/lib/fillFilter.js new file mode 100644 index 00000000..0f948796 --- /dev/null +++ b/lib/fillFilter.js @@ -0,0 +1,8 @@ +let noneFill = ['transparent', 'none']; +export default function (props) { + let fill = props.fill; + if (noneFill.indexOf('fill') !== -1) { + return null; + } + return fill; +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..99d09df8 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "name": "react-native-art-svg", + "description": "react native svg library based on `ART`", + "repository": { + "type": "git", + "url": "git@github.com:magicismight/react-native-art-svg.git" + }, + "main": "./Svg.js", + "keywords": [ + "react-component", + "react-native", + "ios", + "android", + "svg", + "art" + ] +}