canvas-react-easy 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,14 +8,15 @@ import { TextTool } from "../tools/Text";
8
8
  import { ImageTool } from "../tools/ImageTool";
9
9
  const Tools = () => {
10
10
  const selectTool = (ToolClass) => {
11
- var _a;
12
- const canvas = CanvasState.canvas;
13
- if (!canvas)
11
+ var _a, _b;
12
+ if (!CanvasState.canvas)
14
13
  return;
15
- // Очищаем события старого инструмента
14
+ // очищаем старый инструмент
16
15
  (_a = toolState.tool) === null || _a === void 0 ? void 0 : _a.clearEvents();
17
- // Устанавливаем новый инструмент
18
- toolState.setTool(new ToolClass(canvas));
16
+ // создаём новый инструмент и подключаем слушатели
17
+ const tool = new ToolClass(CanvasState.canvas);
18
+ (_b = tool.listen) === null || _b === void 0 ? void 0 : _b.call(tool); // если инструмент имеет метод listen
19
+ toolState.setTool(tool);
19
20
  };
20
21
  return (_jsxs("div", { style: { marginBottom: "10px" }, children: [_jsx("button", { onClick: () => selectTool(Brush), children: "\u041A\u0438\u0441\u0442\u044C" }), _jsx("button", { onClick: () => selectTool(Rectangle), children: "\u041F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A" }), _jsx("button", { onClick: () => selectTool(Circle), children: "\u041A\u0440\u0443\u0433" }), _jsx("button", { onClick: () => selectTool(TextTool), children: "\u0422\u0435\u043A\u0441\u0442" }), _jsx("button", { onClick: () => selectTool(ImageTool), children: "\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435" })] }));
21
22
  };
@@ -14,7 +14,22 @@ export class ImageTool extends Tool {
14
14
  this.listen();
15
15
  }
16
16
  listen() {
17
- this.canvas.onclick = this.onClickHandler.bind(this);
17
+ const handler = (e) => {
18
+ const canvas = e.target;
19
+ const x = e.pageX - canvas.offsetLeft;
20
+ const y = e.pageY - canvas.offsetTop;
21
+ const url = prompt("Введите ссылку на изображение");
22
+ if (!url)
23
+ return;
24
+ const img = new Image();
25
+ img.src = url;
26
+ img.onload = () => {
27
+ this.ctx.drawImage(img, x, y);
28
+ };
29
+ // удаляем обработчик после первого использования
30
+ canvas.removeEventListener("mousedown", handler);
31
+ };
32
+ this.canvas.addEventListener("mousedown", handler);
18
33
  }
19
34
  onClickHandler(e) {
20
35
  return __awaiter(this, void 0, void 0, function* () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas-react-easy",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "license": "MIT",
@@ -10,15 +10,17 @@ import { ImageTool } from "../tools/ImageTool";
10
10
  const Tools = () => {
11
11
 
12
12
  const selectTool = (ToolClass: any) => {
13
- const canvas = CanvasState.canvas;
14
- if (!canvas) return;
13
+ if (!CanvasState.canvas) return;
15
14
 
16
- // Очищаем события старого инструмента
15
+ // очищаем старый инструмент
17
16
  toolState.tool?.clearEvents();
18
17
 
19
- // Устанавливаем новый инструмент
20
- toolState.setTool(new ToolClass(canvas));
21
- };
18
+ // создаём новый инструмент и подключаем слушатели
19
+ const tool = new ToolClass(CanvasState.canvas);
20
+ tool.listen?.(); // если инструмент имеет метод listen
21
+ toolState.setTool(tool);
22
+ };
23
+
22
24
 
23
25
  return (
24
26
  <div style={{ marginBottom: "10px" }}>
@@ -7,8 +7,26 @@ export class ImageTool extends Tool {
7
7
  }
8
8
 
9
9
  listen() {
10
- this.canvas.onclick = this.onClickHandler.bind(this);
11
- }
10
+ const handler = (e: MouseEvent) => {
11
+ const canvas = e.target as HTMLCanvasElement;
12
+ const x = e.pageX - canvas.offsetLeft;
13
+ const y = e.pageY - canvas.offsetTop;
14
+
15
+ const url = prompt("Введите ссылку на изображение");
16
+ if (!url) return;
17
+
18
+ const img = new Image();
19
+ img.src = url;
20
+ img.onload = () => {
21
+ this.ctx.drawImage(img, x, y);
22
+ };
23
+
24
+ // удаляем обработчик после первого использования
25
+ canvas.removeEventListener("mousedown", handler);
26
+ };
27
+
28
+ this.canvas.addEventListener("mousedown", handler);
29
+ }
12
30
 
13
31
  async onClickHandler(e: MouseEvent) {
14
32
  const target = e.target as HTMLCanvasElement;