Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import React, {PureComponent} from "react";
- import {
- View,
- Layer,
- Group,
- Circle,
- Ellipse,
- Rectangle,
- PointText,
- Tool,
- } from 'react-paper-bindings'
- interface Props {
- }
- interface State {
- imageSize: number,
- visible: boolean,
- mounted: boolean,
- }
- const ReactLogo = ({ rotation, x, y }) => {
- return (
- <Group name={'reactLogo'} rotation={rotation}>
- <Ellipse
- center={[x, y]}
- size={[70, 25]}
- strokeWidth={2.5}
- strokeColor={'#61DAFB'}
- />
- <Ellipse
- center={[x, y]}
- rotation={120}
- size={[70, 25]}
- strokeWidth={2.5}
- strokeColor={'#61DAFB'}
- />
- <Ellipse
- center={[x, y]}
- rotation={240}
- size={[70, 25]}
- strokeWidth={2.5}
- strokeColor={'#61DAFB'}
- />
- <Circle
- center={[x, y]}
- fillColor={'#61DAFB'}
- radius={7}
- />
- </Group>
- )
- };
- const Paper = ({ activeTool, width, height }) => {
- return (
- <View activeTool={activeTool} width={width} height={height}>
- <Layer>
- <Rectangle
- center={[width/2, height/2]}
- fillColor={'#222222'}
- opacity={0.8}
- size={[320, 120]}
- />
- <PointText
- content={'Paper.js'}
- fillColor={'white'}
- fontFamily={'Courier New'}
- fontSize={30}
- fontWeight={'bold'}
- justification={'center'}
- point={[(width/2)+40, (height/2)+10]}
- />
- <ReactLogo
- rotation={rotation}
- x={(width/2)-100}
- y={(height/2)}
- />
- </Layer>
- <Tool
- active={activeTool === 'move'}
- name={'move'}
- onMouseDown={props.moveToolMouseDown}
- onMouseDrag={props.moveToolMouseDrag}
- onMouseUp={props.moveToolMouseUp}
- />
- <Tool
- active={activeTool === 'pen'}
- name={'pen'}
- onMouseDown={props.penToolMouseDown}
- onMouseDrag={props.penToolMouseDrag}
- onMouseUp={props.penToolMouseUp}
- />
- <Tool
- active={activeTool === 'circle'}
- name={'circle'}
- onMouseDown={props.addCircle}
- />
- <Tool
- active={activeTool === 'rectangle'}
- name={'rectangle'}
- onMouseDown={props.addRectangle}
- />
- </View>
- )
- };
- export default class Annotation extends PureComponent<Props, State> {
- private _box: any;
- private _request: any;
- constructor(props: Props) {
- super(props)
- this.state = {
- imageSize: 720,
- visible: true,
- mounted: false,
- }
- this._box = null
- this._request = null
- }
- resizeWindow = () => {
- if (!this._request) {
- this._request = requestAnimationFrame(this.resizePaper)
- }
- }
- resizePaper = () => {
- this.forceUpdate()
- this._request = null
- }
- componentDidMount() {
- this.setState({ mounted: true })
- window.addEventListener('resize', this.resizeWindow)
- }
- componentWillUnmount() {
- if (this._request) {
- cancelAnimationFrame(this._request)
- this._request = null
- }
- window.removeEventListener('resize', this.resizeWindow)
- }
- render() {
- const box = this._box && this._box.getBoundingClientRect()
- let mounted = this.state.mounted
- return <div className="Annotation" ref={ref => this._box = ref}>
- {mounted &&
- <Paper activeTool={'pen'} width={box.width} height={box.height} />
- }
- </div>
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement