pooyanrg commited on
Commit
5119e82
·
1 Parent(s): 792f14c
Files changed (2) hide show
  1. app.py +2 -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) => { initializeEditorBefore(); importBackgroundBefore(image_bef); return []; }",
294
  )
295
 
296
  image_aft.change(
297
  fn=None,
298
  inputs=[image_aft],
299
  outputs=[],
300
- _js="(image_aft) => { initializeEditorAfter(); importBackgroundAfter(image_aft); return []; }",
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(xOffset + col * cellSizeX, yOffset + row * cellSizeY, cellSizeX, cellSizeY);
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(xOffset + col * cellSizeX, yOffset + row * cellSizeY, cellSizeX, cellSizeY);
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
- const canvasWidth = canvas_before.width;
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
- // const rect = canvas_before.getBoundingClientRect();
182
- // const scaleX = canvas_before.width / rect.width;
183
- // const scaleY = canvas_before.height / rect.height;
184
- // const x = (event.clientX - rect.left) * scaleX;
185
- // const y = (event.clientY - rect.top) * scaleY;
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
- canvas_after = document.getElementById('after');
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();