diff options
| -rw-r--r-- | public/assets/javascripts/rectangles/models/surface.js | 47 | ||||
| -rw-r--r-- | test/07-test-surface.js | 15 |
2 files changed, 59 insertions, 3 deletions
diff --git a/public/assets/javascripts/rectangles/models/surface.js b/public/assets/javascripts/rectangles/models/surface.js index 8330d41..8bce4eb 100644 --- a/public/assets/javascripts/rectangles/models/surface.js +++ b/public/assets/javascripts/rectangles/models/surface.js @@ -70,6 +70,41 @@ } return null } + + Surface.prototype.move = function(dimensions, position, dx, dy) { + var face, faces = this.faces + var p = new Rect( new vec2( position.a, position.a + dimensions.a ), + new vec2( position.b, position.b + dimensions.b ) ) + dx = clamp(dx, -p.x.a, this.width - p.x.b) + dy = clamp(dy, -p.y.a, this.height - p.y.b) + + p.x.add(dx) + p.y.add(dy) + + var i = 0 + for (; i < faces.length; i++) { + face = faces[i] + // find the element that contains the top-left corner + if (face.x.a <= p.x.a && face.x.b <= p.x.a) { + break + } + } + if (! face) return null + + if (face.y.a <= p.x.a && p.y.b <= face.y.b) { + } + + if (face.x.b >= p.y.b) { + return p + } + else { + } + + + + } + + Surface.prototype.place = function(v, index){ var face, faces = this.faces } @@ -185,9 +220,15 @@ } else { nextIndex = bounds.first - 1 - nextFace = this.faces[nextIndex] - if (nextFace.y.a <= p.b && p.b + dimension.b <= nextFace.y.b) { - // it appears the div to the left will accomodate this element + for (var i = nextIndex; i >= 0; i--) { + nextFace = this.faces[i] + if (nextFace.y.a <= p.b && p.b + dimension.b <= nextFace.y.b) { + // it appears the div to the left will accomodate this element + nextIndex = i + } + else { + + } } else { p.a = bounds.x.a diff --git a/test/07-test-surface.js b/test/07-test-surface.js index 2a51b7f..26a90e7 100644 --- a/test/07-test-surface.js +++ b/test/07-test-surface.js @@ -81,6 +81,21 @@ describe('double surface', function(){ // describe dragging right (clamp at right edge) }) +describe('triple surface', function(){ + var surface = new Surface () + surface.add( new Rect( new vec2(1, 3), new vec2(0, 4) ) ) + surface.add( new Rect( new vec2(3, 5), new vec2(0, 4) ) ) + + var small = new vec2(2, 2) + var oblong = new vec2(4, 1) + + // describe placement + // describe dragging up (clamp at top edge) + // describe dragging down (clamp at bottom edge) + // describe dragging left (clamp at left edge) + // describe dragging right (clamp at right edge) +}) + describe('two-level surface', function(){ var surface = new Surface () surface.add( new Rect( new vec2(0, 3), new vec2(0, 4) ) ) |
