Fix global items colors

This commit is contained in:
Faustino Kialungila 2020-01-03 15:25:52 +01:00
parent db386b8400
commit c224bc4c8f

View File

@ -105,7 +105,15 @@ function hitTest(element: ExcaliburElement, x: number, y: number): boolean {
}
}
function newElement(type: string, x: number, y: number, width = 0, height = 0) {
function newElement(
type: string,
x: number,
y: number,
strokeColor: string,
backgroundColor: string,
width = 0,
height = 0
) {
const element = {
type: type,
x: x,
@ -113,6 +121,8 @@ function newElement(type: string, x: number, y: number, width = 0, height = 0) {
width: width,
height: height,
isSelected: false,
strokeColor: strokeColor,
backgroundColor: backgroundColor,
draw(rc: RoughCanvas, context: CanvasRenderingContext2D) {}
};
return element;
@ -122,11 +132,11 @@ function renderScene(
rc: RoughCanvas,
context: CanvasRenderingContext2D,
// null indicates transparent bg
viewBgColor: string | null
viewBackgroundColor: string | null
) {
const fillStyle = context.fillStyle;
if (typeof viewBgColor === "string") {
context.fillStyle = viewBgColor;
if (typeof viewBackgroundColor === "string") {
context.fillStyle = viewBackgroundColor;
context.fillRect(-0.5, -0.5, canvas.width, canvas.height);
} else {
context.clearRect(-0.5, -0.5, canvas.width, canvas.height);
@ -159,12 +169,12 @@ function exportAsPNG({
exportBackground,
exportVisibleOnly,
exportPadding = 10,
viewBgColor
viewBackgroundColor
}: {
exportBackground: boolean;
exportVisibleOnly: boolean;
exportPadding?: number;
viewBgColor: string;
viewBackgroundColor: string;
}) {
if (!elements.length) return window.alert("Cannot export empty canvas.");
@ -228,7 +238,7 @@ function exportAsPNG({
// reset transparent bg back to original
if (!exportBackground) {
renderScene(rc, context, viewBgColor);
renderScene(rc, context, viewBackgroundColor);
}
// create a temporary <a> elem which we'll use to download the image
@ -283,11 +293,7 @@ function getArrowPoints(element: ExcaliburElement) {
return [x1, y1, x2, y2, x3, y3, x4, y4];
}
function generateDraw(
element: ExcaliburElement,
itemStrokeColor: string,
itemBackgroundColorColor: string
) {
function generateDraw(element: ExcaliburElement) {
if (element.type === "selection") {
element.draw = (rc, context) => {
const fillStyle = context.fillStyle;
@ -297,8 +303,8 @@ function generateDraw(
};
} else if (element.type === "rectangle") {
const shape = generator.rectangle(0, 0, element.width, element.height, {
stroke: itemStrokeColor,
fill: itemBackgroundColorColor
stroke: element.strokeColor,
fill: element.backgroundColor
});
element.draw = (rc, context) => {
context.translate(element.x, element.y);
@ -311,7 +317,7 @@ function generateDraw(
element.height / 2,
element.width,
element.height,
{ stroke: itemStrokeColor, fill: itemBackgroundColorColor }
{ stroke: element.strokeColor, fill: element.backgroundColor }
);
element.draw = (rc, context) => {
context.translate(element.x, element.y);
@ -322,11 +328,11 @@ function generateDraw(
const [x1, y1, x2, y2, x3, y3, x4, y4] = getArrowPoints(element);
const shapes = [
// \
generator.line(x3, y3, x2, y2, { stroke: itemStrokeColor }),
generator.line(x3, y3, x2, y2, { stroke: element.strokeColor }),
// -----
generator.line(x1, y1, x2, y2, { stroke: itemStrokeColor }),
generator.line(x1, y1, x2, y2, { stroke: element.strokeColor }),
// /
generator.line(x4, y4, x2, y2, { stroke: itemStrokeColor })
generator.line(x4, y4, x2, y2, { stroke: element.strokeColor })
];
element.draw = (rc, context) => {
@ -407,9 +413,9 @@ type AppState = {
exportBackground: boolean;
exportVisibleOnly: boolean;
exportPadding: number;
itemStrokeColor: string;
itemBackgroundColor: string;
viewBgColor: string;
currentItemStrokeColor: string;
currentItemBackgroundColor: string;
viewBackgroundColor: string;
};
class App extends React.Component<{}, AppState> {
@ -427,9 +433,9 @@ class App extends React.Component<{}, AppState> {
exportBackground: false,
exportVisibleOnly: true,
exportPadding: 10,
itemStrokeColor: "#000000",
itemBackgroundColor: "#ffffff",
viewBgColor: "#ffffff"
currentItemStrokeColor: "#000000",
currentItemBackgroundColor: "#ffffff",
viewBackgroundColor: "#ffffff"
};
private onKeyDown = (event: KeyboardEvent) => {
@ -528,11 +534,7 @@ class App extends React.Component<{}, AppState> {
parsedElements.forEach(parsedElement => {
parsedElement.x += 10;
parsedElement.y += 10;
generateDraw(
parsedElement,
this.state.itemStrokeColor,
this.state.itemBackgroundColor
);
generateDraw(parsedElement);
elements.push(parsedElement);
});
this.forceUpdate();
@ -556,7 +558,13 @@ class App extends React.Component<{}, AppState> {
onMouseDown={e => {
const x = e.clientX - (e.target as HTMLElement).offsetLeft;
const y = e.clientY - (e.target as HTMLElement).offsetTop;
const element = newElement(this.state.elementType, x, y);
const element = newElement(
this.state.elementType,
x,
y,
this.state.currentItemStrokeColor,
this.state.currentItemBackgroundColor
);
let isDraggingElements = false;
const cursorStyle = document.documentElement.style.cursor;
if (this.state.elementType === "selection") {
@ -613,11 +621,7 @@ class App extends React.Component<{}, AppState> {
element.height = height;
}
generateDraw(
element,
this.state.itemStrokeColor,
this.state.itemBackgroundColor
);
generateDraw(element);
elements.push(element);
if (this.state.elementType === "text") {
this.setState({
@ -664,11 +668,7 @@ class App extends React.Component<{}, AppState> {
// Make a perfect square or circle when shift is enabled
draggingElement.height = e.shiftKey ? width : height;
generateDraw(
draggingElement,
this.state.itemStrokeColor,
this.state.itemBackgroundColor
);
generateDraw(draggingElement);
if (this.state.elementType === "selection") {
setSelection(draggingElement);
@ -718,9 +718,9 @@ class App extends React.Component<{}, AppState> {
<label>
<input
type="color"
value={this.state.viewBgColor}
value={this.state.viewBackgroundColor}
onChange={e => {
this.setState({ viewBgColor: e.target.value });
this.setState({ viewBackgroundColor: e.target.value });
}}
/>
Background
@ -728,9 +728,9 @@ class App extends React.Component<{}, AppState> {
<label>
<input
type="color"
value={this.state.itemStrokeColor}
value={this.state.currentItemStrokeColor}
onChange={e => {
this.setState({ itemStrokeColor: e.target.value });
this.setState({ currentItemStrokeColor: e.target.value });
}}
/>
Shape Stroke
@ -738,9 +738,9 @@ class App extends React.Component<{}, AppState> {
<label>
<input
type="color"
value={this.state.itemBackgroundColor}
value={this.state.currentItemBackgroundColor}
onChange={e => {
this.setState({ itemBackgroundColor: e.target.value });
this.setState({ currentItemBackgroundColor: e.target.value });
}}
/>
Shape Background
@ -754,7 +754,7 @@ class App extends React.Component<{}, AppState> {
exportBackground: this.state.exportBackground,
exportVisibleOnly: this.state.exportVisibleOnly,
exportPadding: this.state.exportPadding,
viewBgColor: this.state.viewBgColor
viewBackgroundColor: this.state.viewBackgroundColor
});
}}
>
@ -796,7 +796,7 @@ class App extends React.Component<{}, AppState> {
}
componentDidUpdate() {
renderScene(rc, context, this.state.viewBgColor);
renderScene(rc, context, this.state.viewBackgroundColor);
}
}