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) {
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;
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"]) {
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);
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 *
// 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);
- }
-}