X-Git-Url: https://git-public.kairo.at/?p=mandelbrot.git;a=blobdiff_plain;f=content%2Fmandelbrot.js;fp=xulapp%2Fchrome%2Fmandelbrot%2Fcontent%2Fmandelbrot.js;h=68cdffe30e20cb902589518683a53182fefd3903;hp=1ccebbedd725b884acd92d2358a1210ff4dd1d17;hb=3fd66836e6c5fbd25dd8f90dd50914cabeb7a9a7;hpb=ad2faff87132f18ada1b47149ca76678c1289ad1 diff --git a/xulapp/chrome/mandelbrot/content/mandelbrot.js b/content/mandelbrot.js similarity index 85% rename from xulapp/chrome/mandelbrot/content/mandelbrot.js rename to content/mandelbrot.js index 1ccebbe..68cdffe 100644 --- a/xulapp/chrome/mandelbrot/content/mandelbrot.js +++ b/content/mandelbrot.js @@ -51,6 +51,16 @@ function Startup() { updatePaletteMenu(); gMbrotBundle = document.getElementById("mbrotBundle"); document.getElementById("statusLabel").value = gMbrotBundle.getString("statusEmpty"); + + let img = document.getElementById("mbrotImage"); + img.addEventListener("mouseup", imgEvHandler, false); + img.addEventListener("mousedown", imgEvHandler, false); + img.addEventListener("mousemove", imgEvHandler, false); + img.addEventListener("touchstart", imgEvHandler, false); + img.addEventListener("touchend", imgEvHandler, false); + img.addEventListener("touchcancel", imgEvHandler, false); + img.addEventListener("touchleave", imgEvHandler, false); + img.addEventListener("touchmove", imgEvHandler, false); } function getAdjustPref(prefname) { @@ -451,60 +461,65 @@ function drawPoint(context, img_x, img_y, C, iterMax, algorithm) { var zoomstart; var imgBackup; -function mouseevent(etype, event) { - let canvas = document.getElementById("mbrotImage"); - let context = canvas.getContext("2d"); - switch (etype) { - case 'down': - if (event.button == 0) { - // left button - start dragzoom - zoomstart = {x: event.clientX - canvas.offsetLeft, - y: event.clientY - canvas.offsetTop}; - imgBackup = context.getImageData(0, 0, canvas.width, canvas.height); - } - break; - case 'up': - if (event.button == 0 && zoomstart) { - context.putImageData(imgBackup, 0, 0); - let zoomend = {x: event.clientX - canvas.offsetLeft, - y: event.clientY - canvas.offsetTop}; - - // make sure zoomend is bigger than zoomstart - if ((zoomend.x == zoomstart.x) || (zoomend.y == zoomstart.y)) { - // cannot zoom what has no area, discard it - zoomstart = undefined; - return; +let imgEvHandler = { + handleEvent: function(aEvent) { + let canvas = document.getElementById("mbrotImage"); + let context = canvas.getContext("2d"); + switch (aEvent.type) { + case 'mousedown': + case 'touchstart': + if (aEvent.button == 0) { + // left button - start dragzoom + zoomstart = {x: aEvent.clientX - canvas.offsetLeft, + y: aEvent.clientY - canvas.offsetTop}; + imgBackup = context.getImageData(0, 0, canvas.width, canvas.height); + } + break; + case 'mouseup': + case 'touchend': + if (aEvent.button == 0 && zoomstart) { + context.putImageData(imgBackup, 0, 0); + let zoomend = {x: aEvent.clientX - canvas.offsetLeft, + y: aEvent.clientY - canvas.offsetTop}; + + // make sure zoomend is bigger than zoomstart + if ((zoomend.x == zoomstart.x) || (zoomend.y == zoomstart.y)) { + // cannot zoom what has no area, discard it + zoomstart = undefined; + return; + } + if (zoomend.x < zoomstart.x) + [zoomend.x, zoomstart.x] = [zoomstart.x, zoomend.x]; + if (zoomend.y < zoomstart.y) + [zoomend.y, zoomstart.y] = [zoomstart.y, zoomend.y]; + + // determine new "coordinates" + let CWidth = gCurrentImageData.C_max.r - gCurrentImageData.C_min.r; + let CHeight = gCurrentImageData.C_max.i - gCurrentImageData.C_min.i; + let newC_min = new complex( + gCurrentImageData.C_min.r + zoomstart.x / gCurrentImageData.iWidth * CWidth, + gCurrentImageData.C_min.i + zoomstart.y / gCurrentImageData.iHeight * CHeight); + let newC_max = new complex( + gCurrentImageData.C_min.r + zoomend.x / gCurrentImageData.iWidth * CWidth, + gCurrentImageData.C_min.i + zoomend.y / gCurrentImageData.iHeight * CHeight); + + adjustCoordsAndDraw(newC_min, newC_max); + } + zoomstart = undefined; + break; + case 'mousemove': + case 'touchmove': + if (aEvent.button == 0 && zoomstart) { + context.putImageData(imgBackup, 0, 0); + context.strokeStyle = "rgb(255,255,31)"; + context.strokeRect(zoomstart.x, zoomstart.y, + aEvent.clientX - canvas.offsetLeft - zoomstart.x, + aEvent.clientY - canvas.offsetTop - zoomstart.y); } - if (zoomend.x < zoomstart.x) - [zoomend.x, zoomstart.x] = [zoomstart.x, zoomend.x]; - if (zoomend.y < zoomstart.y) - [zoomend.y, zoomstart.y] = [zoomstart.y, zoomend.y]; - - // determine new "coordinates" - let CWidth = gCurrentImageData.C_max.r - gCurrentImageData.C_min.r; - let CHeight = gCurrentImageData.C_max.i - gCurrentImageData.C_min.i; - let newC_min = new complex( - gCurrentImageData.C_min.r + zoomstart.x / gCurrentImageData.iWidth * CWidth, - gCurrentImageData.C_min.i + zoomstart.y / gCurrentImageData.iHeight * CHeight); - let newC_max = new complex( - gCurrentImageData.C_min.r + zoomend.x / gCurrentImageData.iWidth * CWidth, - gCurrentImageData.C_min.i + zoomend.y / gCurrentImageData.iHeight * CHeight); - - adjustCoordsAndDraw(newC_min, newC_max); - } - zoomstart = undefined; break; - case 'move': - if (event.button == 0 && zoomstart) { - context.putImageData(imgBackup, 0, 0); - context.strokeStyle = "rgb(255,255,31)"; - context.strokeRect(zoomstart.x, zoomstart.y, - event.clientX - canvas.offsetLeft - zoomstart.x, - event.clientY - canvas.offsetTop - zoomstart.y); - } - break; + } } -} +}; function saveImage() { const nsIFilePicker = Components.interfaces.nsIFilePicker; @@ -760,29 +775,6 @@ function setAlgorithm(algoID) { gPref.setCharPref("mandelbrot.use_algorithm", algoID); } -function addonsManager(aPane) { - let theEM = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator) - .getMostRecentWindow("Extension:Manager"); - if (theEM) { - theEM.focus(); - if (aPane) - theEM.showView(aPane); - return; - } - - const EMURL = "chrome://mozapps/content/extensions/extensions.xul"; - const EMFEATURES = "all,dialog=no"; - if (aPane) - window.openDialog(EMURL, "", EMFEATURES, aPane); - else - window.openDialog(EMURL, "", EMFEATURES); -} - -function errorConsole() { - toOpenWindowByType("global:console", "chrome://global/content/console.xul"); -} - function initImgSettings() { // Get values from prefs. for each (let coord in ["Cr", "Ci"]) { @@ -884,8 +876,9 @@ function recalcCoord(coord, target) { let othercoord = (coord == "Ci") ? "Cr" : "Ci"; let owndim = (coord == "Ci") ? "height" : "width"; let otherdim = (coord == "Ci") ? "width" : "height"; + let myscale; if (target == "scale") { - var myscale = + myscale = parseFloat(document.getElementById("is_" + coord + "_max").value) - parseFloat(document.getElementById("is_" + coord + "_min").value); document.getElementById("is_" + coord + "_scale").value = roundCoord(myscale); @@ -895,7 +888,7 @@ function recalcCoord(coord, target) { parseFloat(document.getElementById("is_" + coord + "_min").value) + parseFloat(document.getElementById("is_" + coord + "_scale").value); document.getElementById("is_" + coord + "_max").value = roundCoord(mymax); - var myscale = document.getElementById("is_" + coord + "_scale").value; + myscale = document.getElementById("is_" + coord + "_scale").value; } if (document.getElementById("is_syncProp").checked) { let otherscale = myscale * @@ -943,52 +936,3 @@ function saveCanvas(aCanvas, aDestFile) { // save the canvas data to the 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 -function quitApp(aForceQuit) { - var appStartup = Components.classes['@mozilla.org/toolkit/app-startup;1'] - .getService(Components.interfaces.nsIAppStartup); - - // eAttemptQuit will try to close each XUL window, but the XUL window can cancel the quit - // process if there is unsaved data. eForceQuit will quit no matter what. - var quitSeverity = aForceQuit ? Components.interfaces.nsIAppStartup.eForceQuit : - Components.interfaces.nsIAppStartup.eAttemptQuit; - appStartup.quit(quitSeverity); -} - -// functions below are from comm-central/suite/common/tasksOverlay.js -function toOpenWindow(aWindow) { - try { - // Try to focus the previously focused window e.g. message compose body - aWindow.document.commandDispatcher.focusedWindow.focus(); - } catch (e) { - // e.g. full-page plugin or non-XUL document; just raise the top window - aWindow.focus(); - } -} - -function toOpenWindowByType(inType, uri, features) { - // don't do several loads in parallel - if (uri in window) - return; - - var topWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator) - .getMostRecentWindow(inType); - if ( topWindow ) - toOpenWindow( topWindow ); - else { - // open the requested window, but block it until it's fully loaded - function newWindowLoaded(event) { - // make sure that this handler is called only once - window.removeEventListener("unload", newWindowLoaded, false); - window[uri].removeEventListener("load", newWindowLoaded, false); - delete window[uri]; - } - // remember the newly loading window until it's fully loaded - // or until the current window passes away - window[uri] = window.openDialog(uri, "", features || "all,dialog=no"); - window[uri].addEventListener("load", newWindowLoaded, false); - window.addEventListener("unload", newWindowLoaded, false); - } -}