138 lines
4.4 KiB
JavaScript
138 lines
4.4 KiB
JavaScript
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))
|
|
}
|
|
}
|
|
}
|