Spaces:
Sleeping
Sleeping
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();
|