X-Git-Url: https://git-public.kairo.at/?p=mandelbrot.git;a=blobdiff_plain;f=xulapp%2Fchrome%2Fmandelbrot%2Fcontent%2Fmandelbrot.js;h=7762362591c4664798a8f9344df9865b91d59fae;hp=aab0f02b884861fc98ea39afac4be8a042c97c73;hb=6403d662069799da869e77b1a426a29ccbc85a44;hpb=2cb9a6b558e687bc39584fb763a9455b8db00204 diff --git a/xulapp/chrome/mandelbrot/content/mandelbrot.js b/xulapp/chrome/mandelbrot/content/mandelbrot.js index aab0f02..7762362 100644 --- a/xulapp/chrome/mandelbrot/content/mandelbrot.js +++ b/xulapp/chrome/mandelbrot/content/mandelbrot.js @@ -69,10 +69,20 @@ function drawImage() { function drawLine(line, canvas, context, iterMax, algorithm) { let Cr_min = -2.0; let Cr_max = 1.0; + try { + Cr_min = gPref.getCharPref("mandelbrot.last_image.Cr_min"); + Cr_max = gPref.getCharPref("mandelbrot.last_image.Cr_max"); + } + catch (e) { } let Cr_scale = Cr_max - Cr_min; let Ci_min = -1.5; let Ci_max = 1.5; + try { + Cr_min = gPref.getCharPref("mandelbrot.last_image.Ci_min"); + Cr_max = gPref.getCharPref("mandelbrot.last_image.Ci_max"); + } + catch (e) { } let Ci_scale = Ci_max - Ci_min; let pixels = []; @@ -283,8 +293,23 @@ function drawPoint(context, img_x, img_y, C, iterMax, algorithm) { /***** pure UI functions *****/ function saveImage() { - // XXX: should call filepicker! - saveCanvas(document.getElementById("mbrotImage"), "/home/robert/temp/canvas-save.png") + const bundle = document.getElementById("mbrotBundle"); + const nsIFilePicker = Components.interfaces.nsIFilePicker; + var fp = null; + try { + fp = Components.classes["@mozilla.org/filepicker;1"] + .createInstance(nsIFilePicker); + } catch (e) {} + if (!fp) return; + var promptString = bundle.getString("savePrompt"); + fp.init(window, promptString, nsIFilePicker.modeSave); + fp.appendFilter(bundle.getString("pngFilterName"), "*.png"); + fp.defaultString = "mandelbrot.png"; + + var fpResult = fp.show(); + if (fpResult != nsIFilePicker.returnCancel) { + saveCanvas(document.getElementById("mbrotImage"), fp.file); + } } function updateIterMenu() { @@ -348,6 +373,10 @@ function setPalette(aPaletteID) { gColorPalette = getColorPalette(aPaletteID); } +function imgSettings() { + window.openDialog("chrome://mandelbrot/content/image-settings.xul"); +} + function updateDebugMenu() { var jitMenuItem = document.getElementById("jitEnabled"); jitMenuItem.setAttribute("checked", gPref.getBoolPref("javascript.options.jit.chrome")); @@ -388,21 +417,18 @@ function setAlgorithm(algoID) { gPref.setCharPref("mandelbrot.use_algorithm", algoID); } - /***** helper functions from external sources *****/ -// function below is from from http://developer.mozilla.org/en/docs/Code_snippets:Canvas -function saveCanvas(canvas, destFile) { - // convert string filepath to an nsIFile - var file = Components.classes["@mozilla.org/file/local;1"] - .createInstance(Components.interfaces.nsILocalFile); - file.initWithPath(destFile); - +// function below is based on http://developer.mozilla.org/en/docs/Code_snippets:Canvas +// custom modifications: +// - use "a"-prefix on function arguments +// - take an nsILocalFile as aDestFile argument +// - always do silent download +function saveCanvas(aCanvas, aDestFile) { // create a data url from the canvas and then create URIs of the source and targets var io = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); - var source = io.newURI(canvas.toDataURL("image/png", ""), "UTF8", null); - var target = io.newFileURI(file); + var source = io.newURI(aCanvas.toDataURL("image/png", ""), "UTF8", null); // prepare to save the canvas data var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] @@ -411,14 +437,8 @@ function saveCanvas(canvas, destFile) { persist.persistFlags = Components.interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_REPLACE_EXISTING_FILES; persist.persistFlags |= Components.interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; - // displays a download dialog (remove these 3 lines for silent download) - var xfer = Components.classes["@mozilla.org/transfer;1"] - .createInstance(Components.interfaces.nsITransfer); - xfer.init(source, target, "", null, null, null, persist); - persist.progressListener = xfer; - // save the canvas data to the file - persist.saveURI(source, null, null, null, null, file); + persist.saveURI(source, null, null, null, null, aDestFile); } // function below is from http://developer.mozilla.org/en/docs/How_to_Quit_a_XUL_Application