a button to repaint
This commit is contained in:
parent
6a11ebf440
commit
49cf653dba
41
images/gear.svg
Normal file
41
images/gear.svg
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100" viewBox="0 0 100 100">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="center">
|
||||||
|
<circle cx="50" cy="50" r="20"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g id="group0" transform="rotate(10 50 50)" fill="none">
|
||||||
|
<path id="shape0" fill="#DEDEDD" stroke="#ffffff" stroke-linecap="butt" stroke-linejoin="miter" d="
|
||||||
|
M 44 0 L 56 0
|
||||||
|
L 59.65 13.65
|
||||||
|
L 69.12 17.27
|
||||||
|
L 81.12 10.4 L 89.6 18.88
|
||||||
|
L 82.73 30.91
|
||||||
|
L 86.64 40.35
|
||||||
|
L 100 44 L 100 56
|
||||||
|
L 86.64 59.65
|
||||||
|
L 82.73 69.69
|
||||||
|
L 89.6 81.12 L 81.12 89.6
|
||||||
|
L 69.09 82.73
|
||||||
|
L 59.65 86.64
|
||||||
|
L 56 100 L 44 100
|
||||||
|
L 40.35 86.84
|
||||||
|
L 30.51 82.73
|
||||||
|
L 18.88 89.6 L 10.4 81.12
|
||||||
|
L 17.27 69.09
|
||||||
|
L 13.36 59.65
|
||||||
|
L 0 56 L 0 44
|
||||||
|
L 13.36 40.35
|
||||||
|
L 17.27 30.91
|
||||||
|
L 10.4 18.88 L 18.88 10.4
|
||||||
|
L 30.91 17.27
|
||||||
|
L 40.35 13.65z
|
||||||
|
M 50 30
|
||||||
|
A 20 20 0 1 0 70 50
|
||||||
|
A 20 20 0 0 0 50 30z
|
||||||
|
"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
17
images/paint.svg
Normal file
17
images/paint.svg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100">
|
||||||
|
<defs/>
|
||||||
|
<g id="layer0">
|
||||||
|
<path id="shape0" fill="#DEDEDD" stroke="#ffffff" stroke-linecap="butt" stroke-linejoin="miter" d="
|
||||||
|
M 0 100 L 0 70 L 30 100 z
|
||||||
|
"/>
|
||||||
|
<path id="shape1" fill="#DEDEDD" stroke="#ffffff" stroke-linecap="butt" stroke-linejoin="miter" d="
|
||||||
|
M 70 0 L 100 30 L 90 40 L 60 10 z
|
||||||
|
"/>
|
||||||
|
<path id="shape2" fill="#DEDEDD" stroke="#ffffff" stroke-linecap="butt" stroke-linejoin="miter" d="
|
||||||
|
M 55 15 L 5 65 L 35 95 L 85 45 z
|
||||||
|
"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 835 B |
30
main.js
30
main.js
@ -1,21 +1,33 @@
|
|||||||
import factory from "./painting/factory.js";
|
import factory from "./painting/factory.js";
|
||||||
import Canvas from "./painting/canvas.js";
|
import Canvas from "./painting/canvas.js";
|
||||||
import Shape from "./painting/shape.js";
|
import Shape from "./painting/shape.js";
|
||||||
|
import Button from "./ui/button.js";
|
||||||
|
|
||||||
document.body.innerHTML = "";
|
document.body.innerHTML = "";
|
||||||
|
|
||||||
Shape.setBounding(window.innerWidth, window.innerHeight);
|
Shape.setBounding(window.innerWidth, window.innerHeight);
|
||||||
let canvas = new Canvas(window.innerWidth, window.innerHeight);
|
let canvas = new Canvas(window.innerWidth, window.innerHeight);
|
||||||
|
|
||||||
|
let repaint = new Button("paint");
|
||||||
|
repaint.addHandler(canvas.clear.bind(canvas));
|
||||||
|
repaint.addHandler(paint);
|
||||||
|
repaint.setPosition(50, 50);
|
||||||
|
|
||||||
|
window.addEventListener("resize", onWindowResize, false);
|
||||||
|
|
||||||
document.body.appendChild(canvas.element);
|
document.body.appendChild(canvas.element);
|
||||||
|
document.body.appendChild(repaint.element);
|
||||||
|
|
||||||
let amount = Math.floor(Math.random() * 100 + 50);
|
function onWindowResize(e) {
|
||||||
|
|
||||||
for (let i = 0; i < amount; ++i) {
|
|
||||||
let shape = factory.createRandomShape();
|
|
||||||
canvas.draw(shape);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener("resize", function(e) {
|
|
||||||
Shape.setBounding(window.innerWidth, window.innerHeight);
|
Shape.setBounding(window.innerWidth, window.innerHeight);
|
||||||
canvas.resize(window.innerWidth, window.innerHeight);
|
canvas.resize(window.innerWidth, window.innerHeight);
|
||||||
}, false);
|
}
|
||||||
|
|
||||||
|
function paint() {
|
||||||
|
let amount = Math.floor(Math.random() * 100 + 50);
|
||||||
|
|
||||||
|
for (let i = 0; i < amount; ++i) {
|
||||||
|
let shape = factory.createRandomShape();
|
||||||
|
canvas.draw(shape);
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,12 @@ class Canvas {
|
|||||||
this.element.width = width;
|
this.element.width = width;
|
||||||
this.element.height = height;
|
this.element.height = height;
|
||||||
this._ctx = this.element.getContext("2d");
|
this._ctx = this.element.getContext("2d");
|
||||||
|
this._width = width;
|
||||||
|
this._height = height;
|
||||||
|
}
|
||||||
|
clear() {
|
||||||
|
this.resetStyle();
|
||||||
|
this._ctx.clearRect(0, 0, this._width, this._height);
|
||||||
}
|
}
|
||||||
setFillColor(color) {
|
setFillColor(color) {
|
||||||
this._ctx.fillStyle = color.rgba();
|
this._ctx.fillStyle = color.rgba();
|
||||||
@ -21,6 +27,8 @@ class Canvas {
|
|||||||
resize(width, height) {
|
resize(width, height) {
|
||||||
this.element.width = width;
|
this.element.width = width;
|
||||||
this.element.height = height;
|
this.element.height = height;
|
||||||
|
this._width = width;
|
||||||
|
this._height = height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
style.css
12
style.css
@ -2,3 +2,15 @@ body {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: aqua;
|
||||||
|
border: none;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
31
ui/button.js
Normal file
31
ui/button.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
class Button {
|
||||||
|
constructor(image) {
|
||||||
|
this.element = document.createElement("button");
|
||||||
|
this.element.style.backgroundImage = "url(images/" + image + ".svg)";
|
||||||
|
this._boundClick = this._onClick.bind(this);
|
||||||
|
this.element.addEventListener("click", this._boundClick, false);
|
||||||
|
this._handlers = [];
|
||||||
|
}
|
||||||
|
destructor() {
|
||||||
|
this.element.removeEventListener("click", this._boundClick);
|
||||||
|
delete this._boundClick;
|
||||||
|
delete this._handlers;
|
||||||
|
delete this.element;
|
||||||
|
}
|
||||||
|
addHandler(handler) {
|
||||||
|
this._handlers.push(handler);
|
||||||
|
}
|
||||||
|
setPosition(x, y) {
|
||||||
|
this.element.style.position = "absolute";
|
||||||
|
this.element.style.top = y + "px";
|
||||||
|
this.element.style.left = x + "px";
|
||||||
|
}
|
||||||
|
_onClick(e) {
|
||||||
|
for (let i = 0; i < this._handlers.length; ++i) {
|
||||||
|
this._handlers[i](e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Button;
|
Loading…
Reference in New Issue
Block a user