function Cursor (rune) { this.line = { origin: null, from: null, to: null, destination: null } this.is_down = false this.query = null this.mode = 'vertex' this.size = 2 this.pos = { x: 0, y: 0 } this.target = null this.mouse_pos = function (e) { var pos = { x: e.clientX, y: e.clientY } pos.x = ((pos.x / ronin.frame.width) / ronin.frame.zoom.scale) * ronin.frame.width pos.y = ((pos.y / ronin.frame.height) / ronin.frame.zoom.scale) * ronin.frame.height pos.x -= (ronin.frame.zoom.offset.x / ronin.frame.zoom.scale) pos.y -= (ronin.frame.zoom.offset.y / ronin.frame.zoom.scale) return pos } this.mouse_down = function (e) { e.preventDefault() var pos = ronin.cursor.mouse_pos(e) ronin.commander.blur() ronin.cursor.line.origin = { x: pos.x, y: pos.y } ronin.cursor.line.from = { x: pos.x, y: pos.y } // Save original query ronin.cursor.query = ronin.commander.input_el.value if (ronin.commander.active_module()) { /* DO NOTHING */ } else if (e.shiftKey) { /* DO NOTHING */ } else if (e.altKey && e.shiftKey) { ronin.brush.methods.pick.run(pos) } else if (e.altKey) { ronin.brush.erase(ronin.cursor.line) } else { ronin.brush.stroke(ronin.cursor.line) } if (e.shiftKey) { ronin.cursor.mode = 'rect' } if (e.altKey) { ronin.cursor.mode = 'arc_to' } if (e.ctrlKey) { ronin.cursor.mode = 'cc_arc_to' } } this.mouse_move = function (e) { e.preventDefault() var pos = ronin.cursor.mouse_pos(e) ronin.cursor.pos = pos if (!ronin.cursor.line.from) { return } ronin.cursor.line.to = { x: pos.x, y: pos.y } if (ronin.commander.active_module()) { ronin.cursor.inject_query() } else if (e.altKey && e.shiftKey) { ronin.brush.methods.pick.run(pos) } else if (e.shiftKey) { ronin.cursor.drag(ronin.cursor.line) } else if (e.altKey) { ronin.brush.erase(ronin.cursor.line) } else { ronin.brush.stroke(ronin.cursor.line) } ronin.cursor.line.from = { x: pos.x, y: pos.y } } this.mouse_up = function (e) { e.preventDefault() var pos = ronin.cursor.mouse_pos(e) ronin.cursor.line.destination = { x: pos.x, y: pos.y } ronin.cursor.inject_query() ronin.cursor.is_down = false ronin.cursor.line = {} ronin.cursor.mode = 'vertex' ronin.cursor.query = ronin.commander.input_el.value ronin.brush.absolute_thickness = 0 } this.mouse_alt = function (e) { console.log(e) } this.drag = function (line) { var offset = make_offset(line.from, line.to) var data = ronin.cursor.target.select() ronin.cursor.target.clear() ronin.cursor.target.context().putImageData(data, offset.x * -2, offset.y * -2) } this.swap_layer = function () { this.target = this.target.name == 'above' ? ronin.layers.below : ronin.layers.above ronin.commander.update() } this.select_layer = function (layer) { this.target = layer ronin.commander.update() } function make_offset (a, b) { return { x: a.x - b.x, y: a.y - b.y } } this.inject_query = function () { if (ronin.cursor.query && ronin.cursor.query.indexOf('$') < 0) { return } var a = ronin.cursor.line.origin var b = ronin.cursor.line.destination ? ronin.cursor.line.destination : ronin.cursor.line.from var str = '<error>' if (ronin.cursor.mode == 'vertex') { str = b.x + ',' + b.y } else if (ronin.cursor.mode == 'rect') { var offset = a.x + ',' + a.y var rect = (b.x - a.x) + 'x' + (b.y - a.y) str = offset + '|' + rect } else if (ronin.cursor.mode == 'arc_to') { str = '@>' + b.x + ',' + b.y } else if (ronin.cursor.mode == 'cc_arc_to') { str = '@<' + b.x + ',' + b.y } // var i = ronin.cursor.query ? ronin.cursor.query.indexOf('$') : '' var i1 = ronin.cursor.query ? ronin.cursor.query.substr(i, 2) : '' var e1 = ronin.cursor.query ? ronin.cursor.query.substr(i - 1, 2) : '' if (e1 == '#$') { var r = parseInt((b.x / ronin.frame.width) * 255) var g = 255 - parseInt((b.x / ronin.frame.width) * 255) var b = parseInt((b.y / ronin.frame.height) * 255) var str = new Color().rgb_to_hex([r, g, b]) ronin.commander.inject(ronin.cursor.query.replace('#$', str + ' ')) } else if (i1 == '$+') { ronin.commander.inject(ronin.cursor.query.replace('$+', str + '&$+')) } else if (ronin.cursor.query) { ronin.commander.inject(ronin.cursor.query.replace('$', str)) } } }