From 0ac1986b422d58ba878b6a319fbd3f45542dfa08 Mon Sep 17 00:00:00 2001
From: Devine Lu Linvega <aliceffekt@gmail.com>
Date: Tue, 28 Mar 2017 14:31:57 -0700
Subject: [PATCH] Added feedback to Source()

---
 links/main.css                   |  1 +
 scripts/core/init.js             |  4 +--
 scripts/core/ronin.js            |  4 ++-
 scripts/modules/brush.js         | 47 ++++++++++++++------------------
 scripts/modules/brush.pointer.js |  2 +-
 scripts/modules/frame.js         |  2 +-
 scripts/modules/module.js        | 12 ++------
 scripts/modules/source.js        | 20 ++++++++++++--
 scripts/modules/terminal.js      | 21 ++++++++++++--
 9 files changed, 65 insertions(+), 48 deletions(-)

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 "<i style='color:"+this.settings["color"].hex+"'>&#9679;</i> Brush "+ronin.brush.pointers.length+"x "+this.settings["size"].render();  
+      return "<i style='color:"+this.settings["color"]+"'>&#9679;</i> 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 = "<span class='rune'>"+host.rune+"</span> "+message;
+  this.element.innerHTML = "<span class='rune'>"+(host.rune ? host.rune : ">")+"</span> "+message;
   console.log(this.host.constructor.name,this.message)
 }
\ No newline at end of file