|
|
|
|
@ -7,7 +7,6 @@ import { SketchPicker } from "react-color";
@@ -7,7 +7,6 @@ import { SketchPicker } from "react-color";
|
|
|
|
|
import { moveOneLeft, moveAllLeft, moveOneRight, moveAllRight } from "./zindex"; |
|
|
|
|
import { roundRect } from "./roundRect"; |
|
|
|
|
import EditableText from "./components/EditableText"; |
|
|
|
|
import { getDateTime } from "./utils"; |
|
|
|
|
|
|
|
|
|
import "./styles.scss"; |
|
|
|
|
|
|
|
|
|
@ -655,6 +654,18 @@ function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {
@@ -655,6 +654,18 @@ function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {
|
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function getDateTime() { |
|
|
|
|
const date = new Date(); |
|
|
|
|
const year = date.getFullYear(); |
|
|
|
|
const month = date.getMonth() + 1; |
|
|
|
|
const day = date.getDate(); |
|
|
|
|
const hr = date.getHours(); |
|
|
|
|
const min = date.getMinutes(); |
|
|
|
|
const secs = date.getSeconds(); |
|
|
|
|
|
|
|
|
|
return `${year}${month}${day}${hr}${min}${secs}`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Casting second argument (DrawingSurface) to any,
|
|
|
|
|
// because it is requred by TS definitions and not required at runtime
|
|
|
|
|
const generator = rough.generator(null, null as any); |
|
|
|
|
@ -1211,9 +1222,21 @@ class App extends React.Component<{}, AppState> {
@@ -1211,9 +1222,21 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
</label> |
|
|
|
|
))} |
|
|
|
|
</div> |
|
|
|
|
<h4>Colors</h4> |
|
|
|
|
{someElementIsSelected() && ( |
|
|
|
|
<> |
|
|
|
|
<h4>Selected Shapes</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
<button onClick={this.deleteSelectedElements}>Delete</button> |
|
|
|
|
<button onClick={this.moveOneRight}>Bring forward</button> |
|
|
|
|
<button onClick={this.moveAllRight}>Bring to front</button> |
|
|
|
|
<button onClick={this.moveOneLeft}>Send backward</button> |
|
|
|
|
<button onClick={this.moveAllLeft}>Send to back</button> |
|
|
|
|
</div> |
|
|
|
|
</> |
|
|
|
|
)} |
|
|
|
|
<h4>Canvas</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
<h5>Canvas Background</h5> |
|
|
|
|
<h5>Canvas Background Color</h5> |
|
|
|
|
<div> |
|
|
|
|
<button |
|
|
|
|
className="swatch" |
|
|
|
|
@ -1228,13 +1251,14 @@ class App extends React.Component<{}, AppState> {
@@ -1228,13 +1251,14 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
: ColorPicker.CANVAS_BACKGROUND |
|
|
|
|
})) |
|
|
|
|
} |
|
|
|
|
></button> |
|
|
|
|
{this.state.currentColorPicker === ColorPicker.CANVAS_BACKGROUND ? ( |
|
|
|
|
/> |
|
|
|
|
{this.state.currentColorPicker === |
|
|
|
|
ColorPicker.CANVAS_BACKGROUND ? ( |
|
|
|
|
<div className="popover"> |
|
|
|
|
<div |
|
|
|
|
className="cover" |
|
|
|
|
onClick={() => this.setState({ currentColorPicker: null })} |
|
|
|
|
></div> |
|
|
|
|
/> |
|
|
|
|
<SketchPicker |
|
|
|
|
color={this.state.viewBackgroundColor} |
|
|
|
|
onChange={color => { |
|
|
|
|
@ -1252,7 +1276,7 @@ class App extends React.Component<{}, AppState> {
@@ -1252,7 +1276,7 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
<h5>Shape Stroke</h5> |
|
|
|
|
<h5>Shape Stroke Color</h5> |
|
|
|
|
<div> |
|
|
|
|
<button |
|
|
|
|
className="swatch" |
|
|
|
|
@ -1267,13 +1291,13 @@ class App extends React.Component<{}, AppState> {
@@ -1267,13 +1291,13 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
: ColorPicker.SHAPE_STROKE |
|
|
|
|
})) |
|
|
|
|
} |
|
|
|
|
></button> |
|
|
|
|
/> |
|
|
|
|
{this.state.currentColorPicker === ColorPicker.SHAPE_STROKE ? ( |
|
|
|
|
<div className="popover"> |
|
|
|
|
<div |
|
|
|
|
className="cover" |
|
|
|
|
onClick={() => this.setState({ currentColorPicker: null })} |
|
|
|
|
></div> |
|
|
|
|
/> |
|
|
|
|
<SketchPicker |
|
|
|
|
color={this.state.currentItemStrokeColor} |
|
|
|
|
onChange={color => { |
|
|
|
|
@ -1291,7 +1315,7 @@ class App extends React.Component<{}, AppState> {
@@ -1291,7 +1315,7 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
}} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
<h5>Shape Background</h5> |
|
|
|
|
<h5>Shape Background Color</h5> |
|
|
|
|
<div> |
|
|
|
|
<button |
|
|
|
|
className="swatch" |
|
|
|
|
@ -1306,13 +1330,14 @@ class App extends React.Component<{}, AppState> {
@@ -1306,13 +1330,14 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
: ColorPicker.SHAPE_BACKGROUND |
|
|
|
|
})) |
|
|
|
|
} |
|
|
|
|
></button> |
|
|
|
|
{this.state.currentColorPicker === ColorPicker.SHAPE_BACKGROUND ? ( |
|
|
|
|
/> |
|
|
|
|
{this.state.currentColorPicker === |
|
|
|
|
ColorPicker.SHAPE_BACKGROUND ? ( |
|
|
|
|
<div className="popover"> |
|
|
|
|
<div |
|
|
|
|
className="cover" |
|
|
|
|
onClick={() => this.setState({ currentColorPicker: null })} |
|
|
|
|
></div> |
|
|
|
|
/> |
|
|
|
|
<SketchPicker |
|
|
|
|
color={this.state.currentItemBackgroundColor} |
|
|
|
|
onChange={color => { |
|
|
|
|
@ -1330,9 +1355,6 @@ class App extends React.Component<{}, AppState> {
@@ -1330,9 +1355,6 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
}} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<h4>Canvas</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
<button |
|
|
|
|
onClick={this.clearCanvas} |
|
|
|
|
title="Clear the canvas & reset background color" |
|
|
|
|
@ -1342,6 +1364,14 @@ class App extends React.Component<{}, AppState> {
@@ -1342,6 +1364,14 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
</div> |
|
|
|
|
<h4>Export</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
<h5>Name</h5> |
|
|
|
|
{this.state.name && ( |
|
|
|
|
<EditableText |
|
|
|
|
value={this.state.name} |
|
|
|
|
onChange={(name: string) => this.updateProjectName(name)} |
|
|
|
|
/> |
|
|
|
|
)} |
|
|
|
|
<h5>Image</h5> |
|
|
|
|
<button |
|
|
|
|
onClick={() => { |
|
|
|
|
exportAsPNG(this.state); |
|
|
|
|
@ -1359,18 +1389,7 @@ class App extends React.Component<{}, AppState> {
@@ -1359,18 +1389,7 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
/> |
|
|
|
|
background |
|
|
|
|
</label> |
|
|
|
|
</div> |
|
|
|
|
<h4>Project name</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
{this.state.name && ( |
|
|
|
|
<EditableText |
|
|
|
|
value={this.state.name} |
|
|
|
|
onChange={(name: string) => this.updateProjectName(name)} |
|
|
|
|
/> |
|
|
|
|
)} |
|
|
|
|
</div> |
|
|
|
|
<h4>Save/Load</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
<h5>Scene</h5> |
|
|
|
|
<button |
|
|
|
|
onClick={() => { |
|
|
|
|
saveAsJSON(this.state.name); |
|
|
|
|
@ -1386,18 +1405,6 @@ class App extends React.Component<{}, AppState> {
@@ -1386,18 +1405,6 @@ class App extends React.Component<{}, AppState> {
|
|
|
|
|
Load file... |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
{someElementIsSelected() && ( |
|
|
|
|
<> |
|
|
|
|
<h4>Shape options</h4> |
|
|
|
|
<div className="panelColumn"> |
|
|
|
|
<button onClick={this.deleteSelectedElements}>Delete</button> |
|
|
|
|
<button onClick={this.moveOneRight}>Bring forward</button> |
|
|
|
|
<button onClick={this.moveAllRight}>Bring to front</button> |
|
|
|
|
<button onClick={this.moveOneLeft}>Send backward</button> |
|
|
|
|
<button onClick={this.moveAllLeft}>Send to back</button> |
|
|
|
|
</div> |
|
|
|
|
</> |
|
|
|
|
)} |
|
|
|
|
</div> |
|
|
|
|
<canvas |
|
|
|
|
id="canvas" |
|
|
|
|
|