add a first set of code to support bookmarking places
[mandelbrot.git] / xulapp / chrome / mandelbrot / content / image-settings.js
index d9af9935a85f0c138dac817bce1d080206a462c4..a025bde548cc0fd4d815a3e7ced8ff9ecc78e4f6 100644 (file)
 var gColorPalette = [];
 
 function initSettings() {
+  recalcCoord('Cr', 'scale');
+  recalcCoord('Ci', 'scale');
+  if (!window.opener)
+    window.getButton('extra1').disabled = true;
 }
 
 function drawPreview() {
   let canvas = document.getElementById("mbrotPreview");
   let context = canvas.getContext("2d");
 
+  if (document.getElementById("imgWidth").value /
+      document.getElementById("imgHeight").value
+        < 80 / 50) {
+    canvas.height = 50;
+    canvas.width = canvas.height *
+      document.getElementById("imgWidth").value /
+      document.getElementById("imgHeight").value;
+  }
+  else {
+    canvas.width = 80;
+    canvas.height = canvas.width *
+      document.getElementById("imgHeight").value /
+      document.getElementById("imgWidth").value;
+  }
+
   let Cr_min = parseFloat(document.getElementById("Cr_min").value);
   let Cr_max = parseFloat(document.getElementById("Cr_max").value);
   if ((Cr_min < -2) || (Cr_min > 2) ||
@@ -78,3 +97,48 @@ function drawPreview() {
   drawLine(0, [Cr_min, Cr_max, Ci_min, Ci_max],
               canvas, context, iterMax, algorithm);
 }
+
+function recalcCoord(coord, target) {
+  let othercoord = (coord == 'Ci') ? 'Cr' : 'Ci';
+  let owndim = (coord == 'Ci') ? 'height' : 'width';
+  let otherdim = (coord == 'Ci') ? 'width' : 'height';
+  if (target == 'scale') {
+    var myscale =
+      parseFloat(document.getElementById(coord + '_max').value) -
+      parseFloat(document.getElementById(coord + '_min').value);
+    document.getElementById(coord + '_scale').value = roundCoord(myscale);
+  }
+  else if (target == 'max') {
+    let mymax =
+      parseFloat(document.getElementById(coord + '_min').value) +
+      parseFloat(document.getElementById(coord + '_scale').value);
+    document.getElementById('mandelbrot.last_image.' + coord + '_max').value = roundCoord(mymax);
+    var myscale = document.getElementById(coord + '_scale').value;
+  }
+  if (document.getElementById('syncProp').checked) {
+    let otherscale = myscale *
+      document.getElementById('mandelbrot.image.' + otherdim).value /
+      document.getElementById('mandelbrot.image.' + owndim).value;
+    document.getElementById(othercoord + '_scale').value = roundCoord(otherscale);
+    let othermax =
+      parseFloat(document.getElementById(othercoord + '_min').value) +
+      parseFloat(document.getElementById(othercoord + '_scale').value);
+    document.getElementById('mandelbrot.last_image.' + othercoord + '_max').value = roundCoord(othermax);
+  }
+}
+
+function checkProportions() {
+  if (!document.getElementById('syncProp').checked) {
+    recalcCoord('Cr', 'scale');
+  }
+}
+
+function roundCoord(floatval) {
+  // We should round to 10 decimals here or so
+  return floatval;
+}
+
+function callDrawImage() {
+  window.opener.drawImage();
+  window.close();
+}
\ No newline at end of file