Spaces:
Running
Running
fix
Browse files- app.py +2 -2
- js/interactive_grid.js +22 -55
app.py
CHANGED
@@ -290,14 +290,14 @@ with gr.Blocks() as demo:
|
|
290 |
fn=None,
|
291 |
inputs=[image_bef],
|
292 |
outputs=[],
|
293 |
-
_js="(image_bef) => {
|
294 |
)
|
295 |
|
296 |
image_aft.change(
|
297 |
fn=None,
|
298 |
inputs=[image_aft],
|
299 |
outputs=[],
|
300 |
-
_js="(image_aft) => {
|
301 |
)
|
302 |
|
303 |
|
|
|
290 |
fn=None,
|
291 |
inputs=[image_bef],
|
292 |
outputs=[],
|
293 |
+
_js="(image_bef) => { importBackgroundBefore(image_bef); initializeEditorBefore(); return []; }",
|
294 |
)
|
295 |
|
296 |
image_aft.change(
|
297 |
fn=None,
|
298 |
inputs=[image_aft],
|
299 |
outputs=[],
|
300 |
+
_js="(image_aft) => { importBackgroundAfter(image_aft); initializeEditorAfter(); return []; }",
|
301 |
)
|
302 |
|
303 |
|
js/interactive_grid.js
CHANGED
@@ -80,34 +80,17 @@ function drawGridBefore() {
|
|
80 |
ctx_bef.clearRect(0, 0, canvas_before.width, canvas_before.height);
|
81 |
drawBackgroundBefore();
|
82 |
|
83 |
-
const canvasWidth = canvas_before.width;
|
84 |
-
const canvasHeight = canvas_before.height;
|
85 |
-
|
86 |
-
const bgWidth = canvasBg_bef.width;
|
87 |
-
const bgHeight = canvasBg_bef.height;
|
88 |
-
|
89 |
-
const scaleX = canvasWidth / bgWidth;
|
90 |
-
const scaleY = canvasHeight / bgHeight;
|
91 |
-
|
92 |
-
const scale = Math.min(scaleX, scaleY);
|
93 |
-
|
94 |
-
const newWidth = bgWidth * scale;
|
95 |
-
const newHeight = bgHeight * scale;
|
96 |
-
|
97 |
-
const xOffset = (canvasWidth - newWidth) / 2;
|
98 |
-
const yOffset = (canvasHeight - newHeight) / 2;
|
99 |
-
|
100 |
for (let row = 0; row < gridSize; row++) {
|
101 |
for (let col = 0; col < gridSize; col++) {
|
102 |
ctx_bef.beginPath();
|
103 |
-
ctx_bef.rect(
|
104 |
ctx_bef.strokeStyle = 'black';
|
105 |
ctx_bef.lineWidth = 1;
|
106 |
ctx_bef.stroke();
|
107 |
|
108 |
if (grid_bef[row][col]) {
|
109 |
ctx_bef.fillStyle = 'rgba(0, 255, 0, 0.5)';
|
110 |
-
ctx_bef.fillRect(
|
111 |
}
|
112 |
}
|
113 |
}
|
@@ -143,9 +126,7 @@ function initializeEditorBefore() {
|
|
143 |
}
|
144 |
isInitialized_bef = true;
|
145 |
|
146 |
-
image_bef = document.getElementById('image-before');
|
147 |
-
canvas_before = document.getElementById('before');
|
148 |
-
ctx_bef = canvas_before.getContext('2d');
|
149 |
|
150 |
// Add click event listener to canvas
|
151 |
canvas_before.addEventListener('mousedown', handleMouseDown);
|
@@ -153,38 +134,15 @@ function initializeEditorBefore() {
|
|
153 |
canvas_before.addEventListener('mouseup', handleMouseUp);
|
154 |
canvas_before.addEventListener('mouseleave', handleMouseLeave);
|
155 |
|
156 |
-
|
157 |
-
|
158 |
-
const canvasHeight = canvas_before.height;
|
159 |
-
|
160 |
-
const bgWidth = canvasBg_bef.width;
|
161 |
-
const bgHeight = canvasBg_bef.height;
|
162 |
-
|
163 |
-
const scaleX = canvasWidth / bgWidth;
|
164 |
-
const scaleY = canvasHeight / bgHeight;
|
165 |
-
|
166 |
-
const scale = Math.min(scaleX, scaleY);
|
167 |
-
|
168 |
-
const newWidth = bgWidth * scale;
|
169 |
-
const newHeight = bgHeight * scale;
|
170 |
-
|
171 |
-
const xOffset = (canvasWidth - newWidth) / 2;
|
172 |
-
const yOffset = (canvasHeight - newHeight) / 2;
|
173 |
-
|
174 |
-
//cellSizeX = canvas_before.width / gridSize;
|
175 |
-
//cellSizeY = canvas_before.height / gridSize;
|
176 |
-
|
177 |
-
cellSizeX = newWidth / gridSize;
|
178 |
-
cellSizeY = newHeight / gridSize;
|
179 |
|
180 |
canvas_before.addEventListener('click', (event) => {
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
const x = (event.clientX - xOffset) * scale;
|
187 |
-
const y = (event.clientY - yOffset) * scale;
|
188 |
const row = Math.floor(y / cellSizeY);
|
189 |
const col = Math.floor(x / cellSizeX);
|
190 |
|
@@ -214,9 +172,8 @@ function initializeEditorAfter() {
|
|
214 |
}
|
215 |
isInitialized_aft = true;
|
216 |
|
217 |
-
image_aft = document.getElementById('image-after');
|
218 |
-
|
219 |
-
ctx_aft = canvas_after.getContext('2d');
|
220 |
|
221 |
// Add click event listener to canvas
|
222 |
canvas_after.addEventListener('mousedown', handleMouseDown);
|
@@ -301,6 +258,10 @@ function drawBackgroundAfter() {
|
|
301 |
}
|
302 |
|
303 |
function importBackgroundBefore(image_bef) {
|
|
|
|
|
|
|
|
|
304 |
if (image_bef == null) {
|
305 |
canvasBg_bef = null;
|
306 |
drawGridBefore();
|
@@ -311,12 +272,18 @@ function importBackgroundBefore(image_bef) {
|
|
311 |
m.src = image_bef;
|
312 |
m.onload = function () {
|
313 |
canvasBg_bef = m;
|
|
|
|
|
314 |
drawGridBefore();
|
315 |
}
|
316 |
}
|
317 |
|
318 |
|
319 |
function importBackgroundAfter(image_after) {
|
|
|
|
|
|
|
|
|
320 |
if (image_after == null) {
|
321 |
canvasBg_aft = null;
|
322 |
drawGridAfter();
|
|
|
80 |
ctx_bef.clearRect(0, 0, canvas_before.width, canvas_before.height);
|
81 |
drawBackgroundBefore();
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
for (let row = 0; row < gridSize; row++) {
|
84 |
for (let col = 0; col < gridSize; col++) {
|
85 |
ctx_bef.beginPath();
|
86 |
+
ctx_bef.rect(col * cellSizeX, row * cellSizeY, cellSizeX, cellSizeY);
|
87 |
ctx_bef.strokeStyle = 'black';
|
88 |
ctx_bef.lineWidth = 1;
|
89 |
ctx_bef.stroke();
|
90 |
|
91 |
if (grid_bef[row][col]) {
|
92 |
ctx_bef.fillStyle = 'rgba(0, 255, 0, 0.5)';
|
93 |
+
ctx_bef.fillRect(col * cellSizeX, row * cellSizeY, cellSizeX, cellSizeY);
|
94 |
}
|
95 |
}
|
96 |
}
|
|
|
126 |
}
|
127 |
isInitialized_bef = true;
|
128 |
|
129 |
+
// image_bef = document.getElementById('image-before');
|
|
|
|
|
130 |
|
131 |
// Add click event listener to canvas
|
132 |
canvas_before.addEventListener('mousedown', handleMouseDown);
|
|
|
134 |
canvas_before.addEventListener('mouseup', handleMouseUp);
|
135 |
canvas_before.addEventListener('mouseleave', handleMouseLeave);
|
136 |
|
137 |
+
cellSizeX = canvas_before.width / gridSize;
|
138 |
+
cellSizeY = canvas_before.height / gridSize;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
|
140 |
canvas_before.addEventListener('click', (event) => {
|
141 |
+
const rect = canvas_before.getBoundingClientRect();
|
142 |
+
const scaleX = canvas_before.width / rect.width;
|
143 |
+
const scaleY = canvas_before.height / rect.height;
|
144 |
+
const x = (event.clientX - rect.left) * scaleX;
|
145 |
+
const y = (event.clientY - rect.top) * scaleY;
|
|
|
|
|
146 |
const row = Math.floor(y / cellSizeY);
|
147 |
const col = Math.floor(x / cellSizeX);
|
148 |
|
|
|
172 |
}
|
173 |
isInitialized_aft = true;
|
174 |
|
175 |
+
// image_aft = document.getElementById('image-after');
|
176 |
+
|
|
|
177 |
|
178 |
// Add click event listener to canvas
|
179 |
canvas_after.addEventListener('mousedown', handleMouseDown);
|
|
|
258 |
}
|
259 |
|
260 |
function importBackgroundBefore(image_bef) {
|
261 |
+
|
262 |
+
canvas_before = document.getElementById('before');
|
263 |
+
ctx_bef = canvas_before.getContext('2d');
|
264 |
+
|
265 |
if (image_bef == null) {
|
266 |
canvasBg_bef = null;
|
267 |
drawGridBefore();
|
|
|
272 |
m.src = image_bef;
|
273 |
m.onload = function () {
|
274 |
canvasBg_bef = m;
|
275 |
+
canvas_before.width = m.width;
|
276 |
+
canvas_before.height = m.height;
|
277 |
drawGridBefore();
|
278 |
}
|
279 |
}
|
280 |
|
281 |
|
282 |
function importBackgroundAfter(image_after) {
|
283 |
+
|
284 |
+
canvas_after = document.getElementById('after');
|
285 |
+
ctx_aft = canvas_after.getContext('2d');
|
286 |
+
|
287 |
if (image_after == null) {
|
288 |
canvasBg_aft = null;
|
289 |
drawGridAfter();
|