From 4e235bbd36c9014e6529f55a0071e44caa5df6d1 Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Mon, 23 Jan 2017 15:35:50 -0700 Subject: [PATCH] First draft for the new vector tool --- scripts/core/cursor.js | 47 ++++++++++++++++++++++++++++++++++--- scripts/core/keyboard.js | 5 ++++ scripts/modules/vector.js | 49 ++++++++++++++++++++++++++++++++------- 3 files changed, 90 insertions(+), 11 deletions(-) diff --git a/scripts/core/cursor.js b/scripts/core/cursor.js index 42dcd39..515eb59 100644 --- a/scripts/core/cursor.js +++ b/scripts/core/cursor.js @@ -7,6 +7,8 @@ function Cursor(rune) this.mode = null; this.position = new Position(); + this.magnetism = null; + this.grid = new Position(4,4); this.layer = null; @@ -27,8 +29,20 @@ function Cursor(rune) this.active = function(cmd) { - if(!cmd.rect()){ return; } - this.draw(cmd.rect(),cmd.position()); + this.layer.clear(); + + if(cmd.bang()){ + this.magnetism = null; + } + + if(cmd.position()){ + this.grid = cmd.position(); + } + + if(cmd.rect()){ + this.magnetism = cmd.rect(); + this.draw(cmd.rect(),this.grid); + } } this.draw = function(rect,grid) @@ -59,7 +73,10 @@ function Cursor(rune) this.update = function(event) { - if(event.altKey == true){ + if(ronin.module){ + this.set_mode(ronin.module); + } + else if(event.altKey == true){ this.set_mode(ronin.surface); } else{ @@ -73,9 +90,25 @@ function Cursor(rune) this.mode = mode; document.body.setAttribute("class",this.mode.constructor.name); } + + // + + this.magnetic_position = function(position) + { + var x = parseInt(position.x / 20) * 20; + var y = parseInt(position.y / 20) * 20; + + return new Position(x,y); + } + + // this.mouse_down = function(position) { + if(this.magnetism){ + position = this.magnetic_position(position); + } + this.position = position; if(this.mode.constructor.name != Cursor.name){ this.mode.mouse_down(position); @@ -85,6 +118,10 @@ function Cursor(rune) this.mouse_move = function(position) { + if(this.magnetism){ + position = this.magnetic_position(position); + } + this.position = position; if(this.mode.constructor.name != Cursor.name){ this.mode.mouse_move(position); @@ -93,6 +130,10 @@ function Cursor(rune) this.mouse_up = function(position) { + if(this.magnetism){ + position = this.magnetic_position(position); + } + this.position = position; if(this.mode.constructor.name != Cursor.name){ this.mode.mouse_up(position); diff --git a/scripts/core/keyboard.js b/scripts/core/keyboard.js index 3f92e94..c7ff7b9 100644 --- a/scripts/core/keyboard.js +++ b/scripts/core/keyboard.js @@ -1,12 +1,16 @@ function Keyboard() { this.shift_held = false; + this.alt_held = false; this.listen_onkeydown = function(event) { if(event.shiftKey == true){ this.shift_held = true; } + if(event.altKey == true){ + this.alt_held = true; + } ronin.cursor.update(event); ronin.widget.update(); } @@ -14,6 +18,7 @@ function Keyboard() this.listen_onkeyup = function(event) { this.shift_held = false; + this.alt_held = false; switch (event.key) { case "Enter": this.key_enter(); break; diff --git a/scripts/modules/vector.js b/scripts/modules/vector.js index 2a3afe6..49005ec 100644 --- a/scripts/modules/vector.js +++ b/scripts/modules/vector.js @@ -3,7 +3,7 @@ function Vector(rune) Module.call(this,rune); this.parameters = [Any]; - this.variables = {"fill_color" : "none","stroke_width" : 2,"stroke_color" : "#ffffff", "line_cap" : "square"}; + this.variables = {"fill_color" : "none","stroke_width" : 5,"stroke_color" : "#ffffff", "line_cap" : "square"}; this.layer = null; @@ -20,7 +20,7 @@ function Vector(rune) { this.layer.clear(); this.layer.context().lineCap = cmd.variable("line_cap") ? cmd.variable("line_cap").value : "round"; - this.layer.context().lineWidth = cmd.variable("stroke_width") ? cmd.variable("stroke_width").value : ronin.brush.size; + this.layer.context().lineWidth = cmd.variable("stroke_width") ? cmd.variable("stroke_width").value : 5; this.layer.context().strokeStyle = cmd.variable("stroke_color") ? cmd.variable("stroke_color").value : "#ffffff"; this.layer.context().stroke(new Path2D(cmd.content.join(" "))); } @@ -29,7 +29,7 @@ function Vector(rune) { this.layer.clear(); ronin.surface.active_layer.context().lineCap = cmd.variable("line_cap") ? cmd.variable("line_cap").value : "round"; - ronin.surface.active_layer.context().lineWidth = cmd.variable("stroke_width") ? cmd.variable("stroke_width").value : ronin.brush.size; + ronin.surface.active_layer.context().lineWidth = cmd.variable("stroke_width") ? cmd.variable("stroke_width").value : 5; ronin.surface.active_layer.context().strokeStyle = cmd.variable("stroke_color") ? cmd.variable("stroke_color").value : "#ffffff"; ronin.surface.active_layer.context().stroke(new Path2D(cmd.content.join(" "))); } @@ -40,17 +40,34 @@ function Vector(rune) this.widget_cursor = function() { - return "Vector"; + if(keyboard.shift_held == true){ + return "Vector(Counterclock Arc)"; + } + else if(keyboard.alt_held == true){ + return "Vector(Clockwise Arc)"; + } + else{ + return "Vector(Line)"; + } } - this.memory = null; + this.coordinates = []; + + this.create_command = function() + { + var command = "+ "; + + for (var i = 0; i < this.coordinates.length; i++) { + command += i == 0 ? "M"+this.coordinates[i]+" " : this.coordinates[i]+" "; + } + return command; + } this.mouse_down = function(position) { this.click = true; - this.memory = commander.element_input.value; - commander.element_input.value += "L"+position.render()+" "; + commander.element_input.value = this.create_command(); commander.hint.update(); this.passive(commander.cmd()); } @@ -58,7 +75,8 @@ function Vector(rune) this.mouse_move = function(position) { if(!this.click){ return; } - commander.element_input.value = this.memory+"L"+position.render()+" "; + commander.element_input.value = this.create_command(); + commander.element_input.value += "L"+position.render(); commander.hint.update(); this.passive(commander.cmd()); } @@ -66,5 +84,20 @@ function Vector(rune) this.mouse_up = function(position) { this.click = null; + + // Add the right thing + if(keyboard.shift_held == true){ + this.coordinates.push("A1,1 0 0,1 "+position.render()); + } + else if(keyboard.alt_held == true){ + this.coordinates.push("A1,1 0 0,0 "+position.render()); + } + else{ + this.coordinates.push(position.render()); + } + + commander.element_input.value = this.create_command(); + commander.hint.update(); + this.passive(commander.cmd()); } } \ No newline at end of file