function Startup() {
updateIterMenu();
+ updateAlgoMenu();
updatePaletteMenu();
gMbrotBundle = document.getElementById("mbrotBundle");
document.getElementById("statusLabel").value = gMbrotBundle.getString("statusEmpty");
if (aC_max.i > 2)
aC_max.i = 2;
if ((aC_min.i > 2) || (aC_max.i < -2) || (aC_min.i >= aC_max.i)) {
- aC_min.i = -1.5; aC_max.i = 1.5;
+ aC_min.i = -1.3; aC_max.i = 1.3;
}
let CWidth = aC_max.r - aC_min.r;
Cr_max = parseFloat(gPref.getCharPref("mandelbrot.last_image.Cr_max"));
}
catch (e) { }
- if ((Cr_min < -2) || (Cr_min > 2) ||
- (Cr_max < -2) || (Cr_max > 2) || (Cr_min >= Cr_max)) {
+ if ((Cr_min < -3) || (Cr_min > 2) ||
+ (Cr_max < -3) || (Cr_max > 2) || (Cr_min >= Cr_max)) {
Cr_min = -2.0; Cr_max = 1.0;
}
gPref.setCharPref("mandelbrot.last_image.Cr_min", Cr_min);
Ci_max = parseFloat(gPref.getCharPref("mandelbrot.last_image.Ci_max"));
}
catch (e) { }
- if ((Ci_min < -2) || (Ci_min > 2) ||
- (Ci_max < -2) || (Ci_max > 2) || (Ci_min >= Ci_max)) {
+ if ((Ci_min < -2.5) || (Ci_min > 2.5) ||
+ (Ci_max < -2.5) || (Ci_max > 2.5) || (Ci_min >= Ci_max)) {
Ci_min = -1.5; Ci_max = 1.5;
}
gPref.setCharPref("mandelbrot.last_image.Ci_min", Ci_min);
/***** pure UI functions *****/
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)
+ 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};
}
}
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 exitMandelbrot() {
+ var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
+ .getService(Components.interfaces.nsIXULAppInfo);
+ if (appInfo.ID == "mandelbrot@kairo.at")
+ quitApp(false);
+ else
+ window.close();
+}
+
function updateBookmarkMenu(aParent) {
document.getElementById("bookmarkSave").disabled =
(!document.getElementById("drawButton").hidden || (gStartTime > 0));
function callBookmark(evtarget) {
if (evtarget.id == "bookmarkSave" || evtarget.id == "bookmarkSeparator")
- return
+ return;
+ if (evtarget.id == "bookmarkOverview") {
+ adjustCoordsAndDraw(new complex(0,0), new complex(0,0));
+ return;
+ }
+
+ if (evtarget.getAttribute('bmRowID')) {
+ let iterMax = 0;
+ let C_min = null;
+ let C_max = null;
+
+ let file = Components.classes["@mozilla.org/file/directory_service;1"]
+ .getService(Components.interfaces.nsIProperties)
+ .get("ProfD", Components.interfaces.nsIFile);
+ file.append("mandelbookmarks.sqlite");
+ let connection = Components.classes["@mozilla.org/storage/service;1"]
+ .getService(Components.interfaces.mozIStorageService)
+ .openDatabase(file);
+ let statement = connection.createStatement(
+ "SELECT iteration_max,Cr_min,Cr_max,Ci_min,Ci_max FROM bookmarks WHERE ROWID=?1");
+ statement.bindStringParameter(0, evtarget.getAttribute('bmRowID'));
+ while (statement.executeStep()) {
+ iterMax = statement.getInt32(0);
+ C_min = new complex(statement.getDouble(1), statement.getDouble(3));
+ C_max = new complex(statement.getDouble(2), statement.getDouble(4));
+ }
+ statement.finalize();
+ connection.close();
- alert(evtarget.getAttribute('label') + ', ' + evtarget.getAttribute('bmRowID'));
- //gPref.setIntPref("mandelbrot.iteration_max", iterMax);
+ if (iterMax && C_min && C_max) {
+ gPref.setIntPref("mandelbrot.iteration_max", iterMax);
+ adjustCoordsAndDraw(C_min, C_max);
+ }
+ }
}
function saveBookmark() {
}
function updateDebugMenu() {
- var jitMenuItem = document.getElementById("jitEnabled");
- jitMenuItem.setAttribute("checked", gPref.getBoolPref("javascript.options.jit.chrome"));
+ let scope = (document.getElementById("mandelbrotWindow").nodeName == "page") ? "content" : "chrome";
+ for each (let type in ["tracejit", "methodjit"]) {
+ let jitMenuItem = document.getElementById(type + "Enabled");
+ jitMenuItem.setAttribute("checked", gPref.getBoolPref("javascript.options." + type + "." + scope));
+ }
}
-function toggleJITState(jitMenuItem) {
- var jitEnabled = !gPref.getBoolPref("javascript.options.jit.chrome");
- gPref.setBoolPref("javascript.options.jit.chrome", jitEnabled)
- jitMenuItem.setAttribute("checked", jitEnabled? "true" : "false");
+function toggleJITState(jitMenuItem, jittype) {
+ let scope = (document.getElementById("mandelbrotWindow").nodeName == "page") ? "content" : "chrome";
+ let jitpref = "javascript.options." + jittype + "jit." + scope;
+ let jitEnabled = !gPref.getBoolPref(jitpref);
+ gPref.setBoolPref(jitpref, jitEnabled)
+ jitMenuItem.setAttribute("checked", jitEnabled ? "true" : "false");
}
function updateAlgoMenu() {