diff --git a/links/main.css b/links/main.css index 32719d2..fcee8a9 100644 --- a/links/main.css +++ b/links/main.css @@ -20,4 +20,5 @@ body { margin:0px; padding:0px; overflow:hidden; font-family:"input_mono_medium" #terminal logs log { display: block; font-size:10px; line-height:25px; padding:0px 5px; color:#666;} #terminal logs log .rune { color:white; } #terminal logs log.error .rune { color:red; } +#terminal logs log.input { color:white; } #terminal menu { display: inline-block;position: absolute;bottom: 0px;right: 0px;padding: 0px 5px;font-size: 10px;line-height: 20px;color:white } \ No newline at end of file diff --git a/scripts/core/init.js b/scripts/core/init.js index 1e0e984..7f77d41 100644 --- a/scripts/core/init.js +++ b/scripts/core/init.js @@ -34,9 +34,7 @@ starting_canvas.height = parseInt(starting_canvas.height/40) * 40; ronin.terminal.query("~ "+ronin.timestamp()); ronin.terminal.query("frame.select main"); ronin.terminal.query("frame.resize "+starting_canvas.render()); -// ronin.terminal.query("- color=#ff0000"); -// ronin.terminal.query("# fill=#ff0000"); -// ronin.terminal.query("~ Ready."); +ronin.terminal.query("brush:color #ff0000"); ronin.terminal.input_element.focus(); ronin.terminal.update_hint(); diff --git a/scripts/core/ronin.js b/scripts/core/ronin.js index 75dddbb..0fc357d 100644 --- a/scripts/core/ronin.js +++ b/scripts/core/ronin.js @@ -32,7 +32,7 @@ function Ronin() // this.modules[this.magnet.constructor.name] = this.magnet; this.modules[this.cursor.constructor.name] = this.cursor; - this.modules[this.terminal.constructor.name] = this.terminal; + // this.modules[this.terminal.constructor.name] = this.terminal; // @@ -41,6 +41,8 @@ function Ronin() for(var key in this.modules){ this.modules[key].install(); } + + this.terminal.install(); } this.cursors = []; diff --git a/scripts/modules/brush.js b/scripts/modules/brush.js index 47a5860..cd98506 100644 --- a/scripts/modules/brush.js +++ b/scripts/modules/brush.js @@ -4,19 +4,20 @@ function Brush(rune) // this.parameters = {"offset":Position,"mirror":Rect,"angle":Angle,"reset":Bang}; this.parameters = []; - this.settings = {"color":new Color("#ff0000"),"size":new Value(1)}; - this.pointers = []; - - // Module + this.settings = {"color":"#ff0000","size":1}; + this.pointers = [new Pointer(new Position("0,0"))]; - this.install = function() + this.add_method(new Method("add_pointer",["Position"])); + + this.add_pointer = function(params, preview = false) { - this.add_pointer(new Position("0,0")); - } - - this.active = function(cmd) - { - if(cmd.bang()){ this.pointers = []; } + if(preview){ return; } + + var pointer = new Pointer(); + pointer.offset = params.position() ? params.position() : new Position("0,0"); + this.pointers.push(pointer); + + ronin.terminal.log(new Log(this,"Added pointer at: "+pointer.offset)); } this.passive = function(cmd) @@ -34,24 +35,16 @@ function Brush(rune) this.size_up = function() { - this.settings["size"].float -= this.settings["size"].float > 1 ? 1 : 0; + this.settings["size"] -= this.settings["size"] > 1 ? 1 : 0; ronin.frame.update_widget(); - ronin.terminal.log(new Log(this,"Increased pointer size to: "+this.size)); + ronin.terminal.log(new Log(this,"Increased pointer size to: "+this.settings["size"])); } this.size_down = function() { - this.settings["size"].float += 1; + this.settings["size"] += 1; ronin.frame.update_widget(); - ronin.terminal.log(new Log(this,"Decreased pointer size to: "+this.size)); - } - - this.add_pointer = function(position) - { - ronin.terminal.log(new Log(this,"Added pointer at: "+position.render())); - var pointer = new Pointer(); - pointer.offset = position; - this.pointers.push(pointer); + ronin.terminal.log(new Log(this,"Decreased pointer size to: "+this.settings["size"])); } // Eraser @@ -67,7 +60,7 @@ function Brush(rune) ronin.frame.context().moveTo(this.position_prev.x,this.position_prev.y); ronin.frame.context().lineTo(position.x,position.y); ronin.frame.context().lineCap="round"; - ronin.frame.context().lineWidth = this.settings["size"].float * 5; + ronin.frame.context().lineWidth = this.settings["size"] * 5; ronin.frame.context().strokeStyle = new Color("#ff0000").rgba(); ronin.frame.context().stroke(); ronin.frame.context().closePath(); @@ -79,16 +72,16 @@ function Brush(rune) this.mouse_pointer = function(position) { - return ronin.cursor.draw_pointer_circle(position,this.settings["size"].float); + return ronin.cursor.draw_pointer_circle(position,this.settings["size"]); } this.mouse_mode = function() { if(keyboard.shift_held == true){ - return "Eraser "+this.settings["size"].float; + return "Eraser "+this.settings["size"]; } else{ - return " Brush "+ronin.brush.pointers.length+"x "+this.settings["size"].render(); + return " Brush "+ronin.brush.pointers.length+"x "+this.settings["size"]; } } diff --git a/scripts/modules/brush.pointer.js b/scripts/modules/brush.pointer.js index 6bb0d5a..364940e 100644 --- a/scripts/modules/brush.pointer.js +++ b/scripts/modules/brush.pointer.js @@ -57,7 +57,7 @@ function Pointer(offset = new Position(), color = new Color('000000')) ronin.frame.context().lineCap="round"; ronin.frame.context().lineWidth = this.thickness(); - ronin.frame.context().strokeStyle = ronin.brush.settings["color"].rgba(); + ronin.frame.context().strokeStyle = new Color(ronin.brush.settings["color"]).rgba(); ronin.frame.context().stroke(); ronin.frame.context().closePath(); diff --git a/scripts/modules/frame.js b/scripts/modules/frame.js index cca7675..e49ef89 100644 --- a/scripts/modules/frame.js +++ b/scripts/modules/frame.js @@ -50,7 +50,7 @@ function Frame(rune) this.settings["size"] = params.rect(); ronin.overlay.get_layer(true).clear(); - ronin.overlay.draw_rect(params.position(),params.rect()); + if(preview){ronin.overlay.draw_rect(params.position(),params.rect());} } this.select = function(params) diff --git a/scripts/modules/module.js b/scripts/modules/module.js index 508e328..a5e2e12 100644 --- a/scripts/modules/module.js +++ b/scripts/modules/module.js @@ -39,16 +39,10 @@ function Module(rune) { } - this.update_settings = function(cmd) + this.update_setting = function(name,value) { - for (var key in this.settings){ - if(!cmd.setting(key)){ continue; } - var value = new this.settings[key].constructor(cmd.setting(key).value); - this.settings[key] = value; - ronin.terminal.log(new Log(this,"Updated "+key+" with "+cmd.setting(key).value)); - return; - } - ronin.terminal.log(new Log(this,"Unknown setting: "+key)); + this.settings[name] = value.content.join(" "); + ronin.terminal.log(new Log(this,"Updated setting: "+name)); } this.add_method = function(method) diff --git a/scripts/modules/source.js b/scripts/modules/source.js index 9030da8..0969d3b 100644 --- a/scripts/modules/source.js +++ b/scripts/modules/source.js @@ -11,12 +11,14 @@ function Source(rune) { if(!params.filepath() || !params.rect() || !params.position()){ ronin.terminal.log(new Log(this,"Missing image path.","error")); return; } - console.log("OK"); + this.get_layer(true).clear(); + + var target_layer = preview ? this.get_layer(true) : ronin.frame.active_layer; ronin.overlay.get_layer(true).clear(); - ronin.overlay.draw_rect(params.position(),params.rect()); var position = params.position() ? params.position() : new Position(); + ronin.overlay.draw_rect(params.position(),params.rect()); base_image = new Image(); base_image.src = params.filepath().path; @@ -35,8 +37,10 @@ function Source(rune) width = isNaN(width) && height > 0 ? (height*base_image.naturalWidth)/base_image.naturalHeight : width; height = isNaN(height) && width > 0 ? (width*base_image.naturalHeight)/base_image.naturalWidth : height; - ronin.frame.context().drawImage(base_image, position.x, position.y, width, height); + target_layer.context().drawImage(base_image, position.x, position.y, width, height); } + + if(!preview){ ronin.overlay.get_layer(true).clear(); } } this.save = function(params,preview = false) @@ -80,4 +84,14 @@ function Source(rune) } return this.layer; } + + this.key_escape = function() + { + if(this.layer){ this.layer.remove(this); } + this.coordinates = []; + this.last_pos = null; + ronin.terminal.input_element.value = ""; + ronin.terminal.passive(); + ronin.overlay.get_layer(true).clear(); + } } \ No newline at end of file diff --git a/scripts/modules/terminal.js b/scripts/modules/terminal.js index cf371fa..680cfc9 100644 --- a/scripts/modules/terminal.js +++ b/scripts/modules/terminal.js @@ -1,6 +1,6 @@ function Terminal(rune) { - Module.call(this,rune); + Module.call(this,">"); this.element = null; this.input_element = document.createElement("input"); @@ -66,8 +66,20 @@ function Terminal(rune) function active(content) { - var module_name = content.indexOf(".") > -1 ? content.split(" ")[0].split(".")[0] : content.split(" ")[0]; + ronin.terminal.log(new Log(this,content,"input")); + + if(content.indexOf(".") > -1){ + var module_name = content.split(" ")[0].split(".")[0] + } + else if(content.indexOf(":") > -1){ + var module_name = content.split(" ")[0].split(":")[0] + } + else{ + var module_name = content.split(" ")[0]; + } + var method_name = content.indexOf(".") > -1 ? content.split(" ")[0].split(".")[1] : "default"; + var setting_name = content.indexOf(":") > -1 ? content.split(" ")[0].split(":")[1] : null; var parameters = content.split(" "); parameters.shift(); var parameters = new Command(parameters); @@ -75,6 +87,9 @@ function Terminal(rune) if(ronin[module_name] && ronin[module_name][method_name]){ ronin[module_name][method_name](parameters); } + else if(ronin[module_name] && ronin[module_name].settings[setting_name]){ + ronin[module_name].update_setting(setting_name,parameters); + } else{ ronin.terminal.log(new Log(ronin.terminal,"Unknown module")); } @@ -202,6 +217,6 @@ function Log(host,message,type = "default") this.type = type; this.element = document.createElement("log"); this.element.setAttribute("class",type); - this.element.innerHTML = ""+host.rune+" "+message; + this.element.innerHTML = ""+(host.rune ? host.rune : ">")+" "+message; console.log(this.host.constructor.name,this.message) } \ No newline at end of file