Convert rainbow palettes from VB to JS code and make them available
[mandelbrot.git] / xulapp / chrome / mandelbrot / content / mandelbrot.js
index d887b82e71f0d9dcd620d449d34ff28fdad48f31..1ead31e1b2cb4e0423355e5690929c69dfcf864d 100644 (file)
@@ -40,12 +40,13 @@ var gPref = Components.classes["@mozilla.org/preferences-service;1"]
                       .getService(Components.interfaces.nsIPrefService)
                       .getBranch(null);
 var gStartTime = 0;
+var gMbrotBundle;
 
 function Startup() {
   updateIterMenu();
   updatePaletteMenu();
-  document.getElementById("statusLabel").value =
-      document.getElementById("mbrotBundle").getString("statusEmpty");
+  gMbrotBundle = document.getElementById("mbrotBundle");
+  document.getElementById("statusLabel").value = gMbrotBundle.getString("statusEmpty");
 }
 
 function drawImage() {
@@ -54,8 +55,7 @@ function drawImage() {
 
   document.getElementById("drawButton").hidden = true;
 
-  document.getElementById("statusLabel").value =
-      document.getElementById("mbrotBundle").getString("statusDrawing");
+  document.getElementById("statusLabel").value = gMbrotBundle.getString("statusDrawing");
 
   let Cr_min = -2.0;
   let Cr_max = 1.0;
@@ -147,7 +147,7 @@ function EndCalc() {
   let endTime = new Date();
   let timeUsed = (endTime.getTime() - gStartTime.getTime()) / 1000;
   document.getElementById("statusLabel").value =
-      document.getElementById("mbrotBundle").getFormattedString("statusTime", [timeUsed.toFixed(3)]);
+      gMbrotBundle.getFormattedString("statusTime", [timeUsed.toFixed(3)]);
   gStartTime = 0;
 }
 
@@ -258,10 +258,62 @@ function getColorPalette(palName) {
       }
       palette[1024] = [0, 0, 0, 255];
       break;
+    case 'rainbow-squared1':
+      for (let i = 0; i < 34; i++) {
+        let cc = Math.floor(i * 255 / 33);
+        palette[i] = [cc, 0, 0, 255];
+      }
+      for (let i = 0; i < 137; i++) {
+        let cc = Math.floor(i * 255 / 136);
+        palette[34 + i] = [255, cc, 0, 255];
+      }
+      for (let i = 0; i < 307; i++) {
+        let cc = Math.floor(i * 255 / 306);
+        palette[171 + i] = [255 - cc, 255, cc, 255];
+      }
+      for (let i = 0; i < 546; i++) {
+        let cc = Math.floor(i * 255 / 545);
+        palette[478 + i] = [cc, 255 - cc, 255, 255];
+      }
+      palette[1024] = [0, 0, 0, 255];
+      break;
+    case 'rainbow-linear2':
+      for (let i = 0; i < 205; i++) {
+        let cc = Math.floor(i * 255 / 204);
+        palette[i] = [255, cc, 0, 255];
+        palette[204 + i] = [255 - cc, 255, 0, 255];
+        palette[409 + i] = [0, 255, cc, 255];
+        palette[614 + i] = [0, 255 - cc, 255, 255];
+        palette[819 + i] = [cc, 0, 255, 255];
+      }
+      palette[1024] = [0, 0, 0, 255];
+      break;
+    case 'rainbow-squared2':
+      for (let i = 0; i < 19; i++) {
+        let cc = Math.floor(i * 255 / 18);
+        palette[i] = [255, cc, 0, 255];
+      }
+      for (let i = 0; i < 74; i++) {
+        let cc = Math.floor(i * 255 / 73);
+        palette[19 + i] = [255 - cc, 255, 0, 255];
+      }
+      for (let i = 0; i < 168; i++) {
+        let cc = Math.floor(i * 255 / 167);
+        palette[93 + i] = [0, 255, cc, 255];
+      }
+      for (let i = 0; i < 298; i++) {
+        let cc = Math.floor(i * 255 / 297);
+        palette[261 + i] = [0, 255 - cc, 255, 255];
+      }
+      for (let i = 0; i < 465; i++) {
+        let cc = Math.floor(i * 255 / 464);
+        palette[559 + i] = [cc, 0, 255, 255];
+      }
+      palette[1024] = [0, 0, 0, 255];
+      break;
   }
-/*
-Select Case palnr
-Case 1  'Standard-Palette (QB-Colors)
+  /*
+     'Standard-Palette (QB-Colors)
      For i = 0 To 1024
          xx = CInt(i * 500 / 1024 + 2)
          If xx <= 15 Then clr = xx
@@ -269,54 +321,7 @@ Case 1  'Standard-Palette (QB-Colors)
          If xx >= 500 Then clr = 0
          palette(i) = QBColor(clr)
      Next
-Case 3  'Regenbogen-Palette 1 (qu.)
-     For i = 0 To 33
-         clr = CInt(i * 255 / 33)
-         palette(i) = RGB(clr, 0, 0)
-     Next
-     For i = 0 To 136
-         clr = CInt(i * 255 / 136)
-         palette(34 + i) = RGB(255, clr, 0)
-     Next
-     For i = 0 To 306
-         clr = CInt(i * 255 / 306)
-         palette(171 + i) = RGB(255 - clr, 255, clr)
-     Next
-     For i = 0 To 545
-         clr = CInt(i * 255 / 545)
-         palette(478 + i) = RGB(clr, 255 - clr, 255)
-     Next
-Case 4  'Regenbogen-Palette 2 (linear)
-     For i = 0 To 204
-         clr = CInt(i * 255 / 204)
-         palette(i) = RGB(255, clr, 0)
-         palette(204 + i) = RGB(255 - clr, 255, 0)
-         palette(409 + i) = RGB(0, 255, clr)
-         palette(614 + i) = RGB(0, 255 - clr, 255)
-         palette(819 + i) = RGB(clr, 0, 255)
-     Next
-Case 5  'Regenbogen-Palette 2 (qu.)
-     For i = 0 To 18
-         clr = CInt(i * 255 / 18)
-         palette(i) = RGB(255, clr, 0)
-     Next
-     For i = 0 To 73
-         clr = CInt(i * 255 / 73)
-         palette(20 + i) = RGB(255 - clr, 255, 0)
-     Next
-     For i = 0 To 167
-         clr = CInt(i * 255 / 167)
-         palette(93 + i) = RGB(0, 255, clr)
-     Next
-     For i = 0 To 297
-         clr = CInt(i * 255 / 297)
-         palette(261 + i) = RGB(0, 255 - clr, 255)
-     Next
-     For i = 0 To 464
-         clr = CInt(i * 255 / 464)
-         palette(559 + i) = RGB(clr, 0, 255)
-     Next
-*/
+  */
   return palette;
 }
 
@@ -351,7 +356,8 @@ function mouseevent(etype, event) {
       if (event.button == 0) {
         var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                                 .getService(Components.interfaces.nsIPromptService);
-        var ok = prompts.confirm(null, "XXX Zoom in",
+        var ok = prompts.confirm(null, gMbrotBundle.getString("zoomConfirmTitle"),
+            gMbrotBundle.getString("zoomConfirmLabel") + ' --- ' +
             zoomstart.x + ',' + zoomstart.y + '-' +
             (event.clientX - canvas.offsetLeft) + ',' +
             (event.clientY - canvas.offsetTop));
@@ -363,7 +369,6 @@ function mouseevent(etype, event) {
 }
 
 function saveImage() {
-  const bundle = document.getElementById("mbrotBundle");
   const nsIFilePicker = Components.interfaces.nsIFilePicker;
   var fp = null;
   try {
@@ -371,9 +376,9 @@ function saveImage() {
                    .createInstance(nsIFilePicker);
   } catch (e) {}
   if (!fp) return;
-  var promptString = bundle.getString("savePrompt");
+  var promptString = gMbrotBundle.getString("savePrompt");
   fp.init(window, promptString, nsIFilePicker.modeSave);
-  fp.appendFilter(bundle.getString("pngFilterName"), "*.png");
+  fp.appendFilter(gMbrotBundle.getString("pngFilterName"), "*.png");
   fp.defaultString = "mandelbrot.png";
 
   var fpResult = fp.show();
@@ -415,8 +420,7 @@ function updateBookmarkMenu(aParent) {
   }
   // Create the "Nothing Available" Menu item and disable it.
   var na = aParent.appendChild(document.createElement("menuitem"));
-  na.setAttribute("label",
-                  document.getElementById("mbrotBundle").getString("noBookmarks"));
+  na.setAttribute("label", gMbrotBundle.getString("noBookmarks"));
   na.setAttribute("disabled", "true");
 }
 
@@ -425,11 +429,10 @@ function callBookmark(evtarget) {
 
 function saveBookmark() {
   // retrieve wanted bookmark name with a prompt
-  var mbrotBundle = document.getElementById("mbrotBundle");
   var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                           .getService(Components.interfaces.nsIPromptService);
   var input = {value: ""}; // empty default value
-  var ok = prompts.prompt(null, "XXX Title", "XXX Please enter a name for the bookmark", input, null, {});
+  var ok = prompts.prompt(null, gMbrotBundle.getString("saveBookmarkTitle"), gMbrotBundle.getString("saveBookmarkLabel"), input, null, {});
   // ok is true if OK is pressed, false if Cancel. input.value holds the value of the edit field if "OK" was pressed.
   if (!ok || !input.value)
     return