function IO() { Module.call(this,"io","File import/export tools."); this.settings = {anchor:{x:0,y:0,width:0,height:0}}; this.methods = {}; this.methods.import = function(q) { var filepath = dialog.showOpenDialog({properties: ['openFile']}); if(!filepath){ console.log("Nothing to load"); return; } fs.readFile(filepath[0], 'utf-8', (err, data) => { if(err){ alert("An error ocurred reading the file :" + err.message); return; } var img = new Image(); img.src = filepath[0]; img.onload = function() { ronin.io.draw_image(img,ronin.commander.query()); } }); } this.methods.load = function(q) { // TODO } this.methods.save = function(q) { // TODO } this.render = function() { var fs = require('fs'); var data = ronin.render.to_base64().replace(/^data:image\/\w+;base64,/, ""); var buf = new Buffer(data, 'base64'); dialog.showSaveDialog((fileName) => { if (fileName === undefined){ return; } fs.writeFile(fileName+'.png', buf); }); } this.drag_over = function(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; } this.drop = function(e) { e.stopPropagation(); e.preventDefault(); var files = e.dataTransfer.files; var file = files[0]; if (!file.type.match(/image.*/)) { console.log("Not image"); return false; } var reader = new FileReader(); reader.onload = function(event) { ronin.io.inject(event.target.result); } reader.readAsDataURL(file); } this.inject = function(data_url) { var img = new Image(); img.src = data_url; var width = parseInt(img.naturalWidth * 0.5); var height = parseInt(img.naturalHeight * 0.5); if(height > 900){ width *= 0.5; height *= 0.5; } img.onload = function() { ronin.render.context().drawImage(img, 0,0,width * 2,height * 2); } } this.draw_image = function(img,params) { var anchor = ronin.io.settings.anchor; var width = parseInt(img.naturalWidth * 0.5); var height = parseInt(img.naturalHeight * 0.5); var scale = (anchor.width/width) * 2; ronin.render.context().drawImage(img, anchor.x * 2,anchor.y * 2,width * scale,height * scale); } }