From dbf290de2ed382fb245113da0550c0b7ce5f809b Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Wed, 26 Aug 2015 12:04:32 +0200 Subject: finished snap-to-grid --- snap-to-grid.html | 15 ++++++++++ snap-to-grid.js | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ snaptogrid.html | 14 --------- snaptogrid.js | 90 ------------------------------------------------------- 4 files changed, 94 insertions(+), 104 deletions(-) create mode 100644 snap-to-grid.html create mode 100644 snap-to-grid.js delete mode 100644 snaptogrid.html delete mode 100644 snaptogrid.js diff --git a/snap-to-grid.html b/snap-to-grid.html new file mode 100644 index 0000000..c44b524 --- /dev/null +++ b/snap-to-grid.html @@ -0,0 +1,15 @@ + + + + + + snap-to-grid + + + + +
+

+ + + diff --git a/snap-to-grid.js b/snap-to-grid.js new file mode 100644 index 0000000..eee8cae --- /dev/null +++ b/snap-to-grid.js @@ -0,0 +1,79 @@ +window.onload = function () { + var color, i, ii, tempS, tempT, + dragger = function () + { + curDrag = this; + this.ox = this.type == "rect" ? this.attr("x") : this.attr("cx"); + this.oy = this.type == "rect" ? this.attr("y") : this.attr("cy"); + }, + move = function (dx, dy) + { + var att = this.type == "rect" ? { x: this.ox + dx, y: this.oy } : { cx: this.ox + dx, cy: this.oy }; + this.attr(att); + r.safari(); + }, + collide = function (obj) + { + document.getElementById("debug").innerHTML = curDrag["id"] + " <-> " + obj["id"] + if (curDrag["grid"] > obj["grid"]) { + if (curDrag.getBBox().width < obj.getBBox().width && + curDrag.getBBox().x > (obj.getBBox().x+obj.getBBox().width/3)) { + return; + } + att = { x: obj.attr("x")+curDrag.getBBox().width+margin }; + obj.attr(att); + } else { + if (curDrag.getBBox().width < obj.getBBox().width && + curDrag.getBBox().x < (obj.getBBox().x+obj.getBBox().width/3)) { + return; + } + att = { x: obj.attr("x")-(curDrag.getBBox().width+margin) }; + obj.attr(att); + } + + var tmp = curDrag["grid"]; + curDrag["grid"] = obj["grid"]; + obj["grid"] = tmp; + }, + up = function () + { + snapToGrid(this); + }, + snapToGrid = function (obj) + { + // just x coord, y is fixed in drag + var d = 0; + for (var i = 0; i < 4; i++) { + obj = null + for (var j = 0; j < shapes.length; j++) { + obj = shapesById[j]; + if (obj["grid"] == i) + break; + } + att = {x:d}; + obj.animate(att,250); + d += obj.getBBox().width+margin; + } + }, + widths = [ 10, 128, 30, 40 ], + r = Raphael("holder", widths[0]+widths[1]+widths[2]+widths[3]+3*margin, 100), + fix_y = 50, + margin = 10, + shapes = [ + r.rect(0, fix_y, widths[0], 30, 0), + r.rect(widths[0]+margin, fix_y, widths[1], 30, 0), + r.rect(widths[0]+widths[1]+2*margin, fix_y, widths[2], 30, 0), + r.rect(widths[0]+widths[1]+widths[2]+3*margin, fix_y, widths[3], 30, 0), + ], + colors = [ "#000", "#ccc", "#0f0", "#00f" ], + shapesById = {}, + curDrag = null; + for (var i = 0; i < shapes.length; i++) { + shapes[i].attr({fill: colors[i], cursor: "move"}); + shapes[i].drag(move, dragger, up).onDragOver( function(a) { collide(a);}); + shapes[i]["id"] = i; + shapes[i]["grid"] = i; + shapesById[i] = shapes[i]; + } +}; + diff --git a/snaptogrid.html b/snaptogrid.html deleted file mode 100644 index 5a2e622..0000000 --- a/snaptogrid.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - derivation editor - - - - -
-

- - - diff --git a/snaptogrid.js b/snaptogrid.js deleted file mode 100644 index cc2be8a..0000000 --- a/snaptogrid.js +++ /dev/null @@ -1,90 +0,0 @@ -var el; -window.onload = function () { - var color, i, ii, tempS, tempT, - dragger = function () - { - el = this; - this.ox = this.type == "rect" ? this.attr("x") : this.attr("cx"); - this.oy = this.type == "rect" ? this.attr("y") : this.attr("cy"); - }, - move = function (dx, dy) - { - var att = this.type == "rect" ? {x: this.ox + dx, y: this.oy } : {cx: this.ox + dx, cy: this.oy }; - this.attr(att); - r.safari(); - }, - collide = function (obj) - { - document.getElementById("debug").innerHTML = el["id"] + " <-> " + obj["id"] - ee = shapesById[obj["id"]]; - if (el["grid"] > ee["grid"]) { - if (el.getBBox().width < obj.getBBox().width && - el.getBBox().x > (obj.getBBox().x+obj.getBBox().width/2)) { - return; - } - att = {x: ee.attr("x")+el.getBBox().width+10}; - ee.attr(att); - } else { - if (el.getBBox().width < obj.getBBox().width && - el.getBBox().x < (obj.getBBox().x+obj.getBBox().width/2)) { - return; - } - att = {x: ee.attr("x")-(el.getBBox().width+10)}; - ee.attr(att); - } - - var tmp = el["grid"]; - el["grid"] = obj["grid"]; - obj["grid"] = tmp; - }, - up = function () - { - snapToGrid(this); - } - snapToGrid = function (obj) - { - // y - var sy = 50; - if (obj.getBBox().y != sy) { - att = {y: sy}; - obj.animate(att, 250); - } - // x - /*if (el.getBBox().x != el["grid"]*70) { - att = {x:el["grid"]*70}; - obj.animate(att,250); - }*/ - - var d = 0; - for (var i = 0; i < 4; i++) { - obj = null - for (var j = 0; j < shapes.length; j++) { - obj = shapesById[j]; - if (obj["grid"] == i) - break; - } - att = {x:d}; - obj.animate(att,250); - d += obj.getBBox().width+10; - } - }; - r = Raphael("holder", 280, 100), - xAnchors = [ 0, 20, 60, 130 ] - shapes = [ - r.rect(xAnchors[0], 50, 10, 30, 0), - r.rect(xAnchors[1], 50, 30, 30, 0), - r.rect(xAnchors[2], 50, 60, 30, 0), - r.rect(xAnchors[3], 50, 30, 30, 0), - ]; - colors = [ "#000", "#ccc", "#0f0", "#00f" ]; - shapesById = {}; - for (var i = 0; i < shapes.length; i++) { - shapes[i].attr({fill: colors[i], cursor: "move"}); - shapes[i].drag(move, dragger, up).onDragOver( function(a) { collide(a);}); - shapes[i]["id"] = i; - shapes[i]["grid"] = i; - shapesById[i] = shapes[i]; - } - -}; - -- cgit v1.2.3