diff options
| author | Julie Lala <jules@okfoc.us> | 2014-04-17 02:32:53 -0400 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-04-17 02:32:53 -0400 |
| commit | 1af8f41cc88e3c57bfabe6d4a5dcd83fc4a0e1bc (patch) | |
| tree | e10fd06cd40c21a7375f626ac130b438613b8abe /assets/javascripts/rectangles/util/mouse.js | |
| parent | 3b7c327b6502ef6e510a0a0e77c6b6facf0be723 (diff) | |
further code bath, fix minimap orientation/translation
Diffstat (limited to 'assets/javascripts/rectangles/util/mouse.js')
| -rw-r--r-- | assets/javascripts/rectangles/util/mouse.js | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/assets/javascripts/rectangles/util/mouse.js b/assets/javascripts/rectangles/util/mouse.js new file mode 100644 index 0000000..b8d6045 --- /dev/null +++ b/assets/javascripts/rectangles/util/mouse.js @@ -0,0 +1,114 @@ +/* + usage: + + base.mouse = new mouse({ + el: document.querySelector("#map"), + down: function(e, cursor){ + // do something with val + // cursor.x.a + // cursor.y.a + }, + move: function(e, cursor, delta){ + // delta.a (x) + // delta.b (y) + }, + up: function(e, cursor){ + // cursor.x.a + // cursor.y.a + }, + }) + +*/ + +function mouse (opt) { + var base = this + + opt = defaults(opt, { + el: document, + down: null, + move: null, + drag: null, + up: null, + propagate: false, + locked: false, + val: 0, + }) + + base.down = false + + base.creating = false + base.dragging = false + + base.cursor = new rect(0,0,0,0) + + base.tube = new Tube () + opt.down && base.tube.on("down", opt.down) + opt.move && base.tube.on("move", opt.move) + opt.drag && base.tube.on("drag", opt.drag) + opt.up && base.tube.on("up", opt.up) + + base.init = function (){ + base.bind() + } + + base.bind = function(){ + opt.el.addEventListener("mousedown", base.mousedown) + window.addEventListener("mousemove", base.mousemove) + window.addEventListener("mouseup", base.mouseup) + } + + function positionFromMouse(e) { + var offset = opt.el.getBoundingClientRect() + var mx = offset.left - e.pageX + var my = e.pageY - offset.top + + return new vec2(mx, my) + } + + base.mousedown = function(e){ + e.stopPropagation() + + var pos = positionFromMouse(e) + + var x = pos.a, y = pos.b + base.cursor = new rect (x,y, x,y) + base.down = true + + base.tube("down", e, base.cursor) + } + base.mousemove = function(e){ + e.stopPropagation() + + var pos = positionFromMouse(e) + + if (e.shiftKey) { + pos.quantize(10) + } + + var x = pos.a, y = pos.b + + if (base.down) { + base.cursor.x.b = x + base.cursor.y.b = y + base.tube("drag", e, base.cursor) + } + else { + base.cursor.x.a = base.cursor.x.b = x + base.cursor.y.a = base.cursor.y.b = y + base.tube("move", e, base.cursor) + } + } + base.mouseup = function(e){ + e.stopPropagation() + + if (base.down) { + base.down = false + base.tube("up", e, base.cursor) + var pos = positionFromMouse(e) + base.cursor = new rect(pos.a, pos.b) + } + } + + base.init() +} + |
