forked from FOSS/BangleApps
Precompile watchface to JS
parent
a500fd26a9
commit
0e6e627b7c
|
@ -1,5 +1,6 @@
|
||||||
var face = require("Storage").readJSON("imageclock.face.json");
|
var face = require("Storage").readJSON("imageclock.face.json");
|
||||||
var resources = require("Storage").readJSON("imageclock.resources.json");
|
var resources = require("Storage").readJSON("imageclock.resources.json");
|
||||||
|
var precompiledJs = require("Storage").read("imageclock.draw.js");
|
||||||
|
|
||||||
var performanceLog = {};
|
var performanceLog = {};
|
||||||
|
|
||||||
|
@ -670,7 +671,17 @@ function initialDraw(){
|
||||||
requestedDraws = 0;
|
requestedDraws = 0;
|
||||||
//print(new Date().toISOString(), "Drawing start");
|
//print(new Date().toISOString(), "Drawing start");
|
||||||
startPerfLog("initialDraw");
|
startPerfLog("initialDraw");
|
||||||
draw(face, [], zeroOffset);
|
//var start = Date.now();
|
||||||
|
if (precompiledJs && precompiledJs.length > 7){
|
||||||
|
//print("Precompiled");
|
||||||
|
eval(precompiledJs);
|
||||||
|
} else if (face.Collapsed){
|
||||||
|
//print("Collapsed");
|
||||||
|
drawIteratively(face.Collapsed);
|
||||||
|
} else {
|
||||||
|
//print("Full");
|
||||||
|
draw(face, [], zeroOffset);
|
||||||
|
}
|
||||||
endPerfLog("initialDraw");
|
endPerfLog("initialDraw");
|
||||||
//print(new Date().toISOString(), "Drawing done", (Date.now() - start).toFixed(0));
|
//print(new Date().toISOString(), "Drawing done", (Date.now() - start).toFixed(0));
|
||||||
isDrawing = false;
|
isDrawing = false;
|
||||||
|
@ -679,6 +690,8 @@ function initialDraw(){
|
||||||
requestedDraws = 0;
|
requestedDraws = 0;
|
||||||
setTimeout(initialDraw, 10);
|
setTimeout(initialDraw, 10);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
print("queued draw");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
<label for="useDataFile">Use resource data file (image data not in RAM by default)</label></br>
|
<label for="useDataFile">Use resource data file (image data not in RAM by default)</label></br>
|
||||||
<input type="checkbox" id="collapseTree" name="mode" checked/>
|
<input type="checkbox" id="collapseTree" name="mode" checked/>
|
||||||
<label for="collapseTree">Collapse the tree to a flat representation</label></br>
|
<label for="collapseTree">Collapse the tree to a flat representation</label></br>
|
||||||
|
<input type="checkbox" id="precompile" name="mode" checked/>
|
||||||
|
<label for="precompile">Precompile watch face to js</label></br>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>Select watchface folder:</br><input type="file" id="fileLoader" name="files[]" multiple directory="" webkitdirectory="" moxdirectory="" /></p>
|
<p>Select watchface folder:</br><input type="file" id="fileLoader" name="files[]" multiple directory="" webkitdirectory="" moxdirectory="" /></p>
|
||||||
|
@ -46,6 +48,7 @@
|
||||||
var resultJson = {};
|
var resultJson = {};
|
||||||
var infoJson;
|
var infoJson;
|
||||||
var faceJson;
|
var faceJson;
|
||||||
|
var precompiledJs = "";
|
||||||
var resourceDataString = "";
|
var resourceDataString = "";
|
||||||
var resourceDataOffset = 0;
|
var resourceDataOffset = 0;
|
||||||
var handledFiles = 0;
|
var handledFiles = 0;
|
||||||
|
@ -550,6 +553,24 @@
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function convertToCode(elements){
|
||||||
|
var code = "";
|
||||||
|
|
||||||
|
for (var i = 0; i< elements.length; i++){
|
||||||
|
var c = elements[i]
|
||||||
|
console.log("convert to code", c);
|
||||||
|
|
||||||
|
var condition = "";
|
||||||
|
if (c.value.HideOn && c.value.HideOn.includes("Lock")){
|
||||||
|
condition = 'if (!Bangle.isLocked())';
|
||||||
|
}
|
||||||
|
|
||||||
|
code += condition + " draw" + c.type + "(face.Collapsed[" + i + "].value, zeroOffset);\n";
|
||||||
|
}
|
||||||
|
console.log("Code:", code);
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
|
||||||
function postProcess(){
|
function postProcess(){
|
||||||
if (document.getElementById('useDataFile').checked){
|
if (document.getElementById('useDataFile').checked){
|
||||||
|
@ -557,10 +578,18 @@
|
||||||
console.log("Created data file", resourceDataString, resourceDataOffset, resultJson);
|
console.log("Created data file", resourceDataString, resourceDataOffset, resultJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var properties = faceJson.Properties;
|
||||||
|
|
||||||
if (document.getElementById('collapseTree').checked){
|
if (document.getElementById('collapseTree').checked){
|
||||||
faceJson = { Collapsed: collapseTree(faceJson,{X:0,Y:0})};
|
faceJson = { Properties: properties, Collapsed: collapseTree(faceJson,{X:0,Y:0})};
|
||||||
console.log("After collapsing", faceJson);
|
console.log("After collapsing", faceJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (document.getElementById('precompile').checked){
|
||||||
|
precompiledJs = convertToCode(faceJson.Collapsed);
|
||||||
|
console.log("After precompiling", precompiledJs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function imageLoaded() {
|
function imageLoaded() {
|
||||||
|
@ -808,7 +837,6 @@
|
||||||
id : "imageclock",
|
id : "imageclock",
|
||||||
storage:[
|
storage:[
|
||||||
{name:"imageclock.app.js", url:"app.js"},
|
{name:"imageclock.app.js", url:"app.js"},
|
||||||
{name:"imageclock.face.json", content: JSON.stringify(faceJson)},
|
|
||||||
{name:"imageclock.resources.json", content: JSON.stringify(resultJson)},
|
{name:"imageclock.resources.json", content: JSON.stringify(resultJson)},
|
||||||
{name:"imageclock.img", url:"app-icon.js", evaluate:true},
|
{name:"imageclock.img", url:"app-icon.js", evaluate:true},
|
||||||
]
|
]
|
||||||
|
@ -816,9 +844,10 @@
|
||||||
if (resourceDataString.length > 0){
|
if (resourceDataString.length > 0){
|
||||||
appDef.storage.push({name:"imageclock.resources.data", content: resourceDataString});
|
appDef.storage.push({name:"imageclock.resources.data", content: resourceDataString});
|
||||||
}
|
}
|
||||||
|
appDef.storage.push({name:"imageclock.draw.js", content: precompiledJs.length > 0 ? precompiledJs : "//empty"});
|
||||||
|
appDef.storage.push({name:"imageclock.face.json", content: JSON.stringify(faceJson)});
|
||||||
console.log("Uploading app:", appDef);
|
|
||||||
|
console.log("Uploading app:", appDef);
|
||||||
sendCustomizedApp(appDef);
|
sendCustomizedApp(appDef);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue