From d40c7d9f09d9b012837d6060a4c598b23b19646f Mon Sep 17 00:00:00 2001 From: Martin Ashby Date: Thu, 17 May 2018 18:18:11 +0100 Subject: Palette, tools, load & save working --- src/PaintArea.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/PaintArea.js (limited to 'src/PaintArea.js') diff --git a/src/PaintArea.js b/src/PaintArea.js new file mode 100644 index 0000000..1ffec83 --- /dev/null +++ b/src/PaintArea.js @@ -0,0 +1,74 @@ +import React, { Component } from 'react' + +/** + * Expects props: + * onTool = (x, y) => {} + * Callback for when a cell is clicked + * + * data = [[]] + * 3d array - rows, cells, RGB value for each cell + */ +export default class PaintArea extends Component { + constructor(props) { + super(props) + this.handleMouseMove = this.handleMouseMove.bind(this) + this._onMouseDown = this._onMouseDown.bind(this) + this._onMouseUp = this._onMouseUp.bind(this) + this.state = { + mouseDown: false + } + } + + _onMouseDown() { + this.setState({ mouseDown: true }) + } + + _onMouseUp() { + this.setState({ mouseDown: false }) + } + + componentWillMount() { + document.addEventListener('mousedown', this._onMouseDown) + document.addEventListener('mouseup', this._onMouseUp) + } + + componentWillUnmount() { + document.removeEventListener('mousedown', this._onMouseDown) + document.removeEventListener('mouseup', this._onMouseUp) + } + + handleMouseMove(x, y) { + if (this.state.mouseDown) { + this.props.onTool(x, y) + } + } + + render() { + let cells = this.props.data.map((row, iy) => { + let rowCells = row.map((cell, ix) => { + let r = cell[0] + let g = cell[1] + let b = cell[2] + return this.handleMouseMove(ix, iy)} + onClick={() => this.props.onTool(ix, iy)} + className="paintareacell" + style={{ + background: `rgb(${r},${g},${b})` + }} + key={(ix * 100000) + iy}/> + }) + return {rowCells} + }) + + return ( + + + {cells} + +
+ ) + } +} \ No newline at end of file -- cgit v1.2.3-ZIG