aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2017-11-01 07:55:46 +0000
committerGitHub2017-11-01 07:55:46 +0000
commit15fc14dc40220af61f988c59378193cdb276a46f (patch)
treee80f465590a3e6a1cebb03c00de902190c9b5ff4
parentfb081c8963196926cd8c5ab6d16b3d5928f8198f (diff)
parent478426dae8fcff5307b16a4f51bc26c26bfb62b7 (diff)
downloadvimium-15fc14dc40220af61f988c59378193cdb276a46f.tar.bz2
Merge pull request #2558 from mrmr1993/rectsOverlapKill
Simplify rectsOverlap
-rw-r--r--content_scripts/link_hints.coffee2
-rw-r--r--lib/rect.coffee17
-rw-r--r--tests/unit_tests/rect_test.coffee28
3 files changed, 22 insertions, 25 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 33a876e0..ea256377 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -321,7 +321,7 @@ class LinkHintsMode
rotateHints: do ->
markerOverlapsStack = (marker, stack) ->
for otherMarker in stack
- return true if Rect.rectsOverlap marker.markerRect, otherMarker.markerRect
+ return true if Rect.intersects marker.markerRect, otherMarker.markerRect
false
->
diff --git a/lib/rect.coffee b/lib/rect.coffee
index 59764d18..0e9c3417 100644
--- a/lib/rect.coffee
+++ b/lib/rect.coffee
@@ -67,12 +67,18 @@ Rect =
rects.filter (rect) -> rect.height > 0 and rect.width > 0
- contains: (rect1, rect2) ->
+ # Determine whether two rects overlap.
+ intersects: (rect1, rect2) ->
rect1.right > rect2.left and
rect1.left < rect2.right and
rect1.bottom > rect2.top and
rect1.top < rect2.bottom
+ # Determine whether two rects overlap, including 0-width intersections at borders.
+ intersectsStrict: (rect1, rect2) ->
+ rect1.right >= rect2.left and rect1.left <= rect2.right and
+ rect1.bottom >= rect2.top and rect1.top <= rect2.bottom
+
equals: (rect1, rect2) ->
for property in ["top", "bottom", "left", "right", "width", "height"]
return false if rect1[property] != rect2[property]
@@ -82,15 +88,6 @@ Rect =
@create (Math.max rect1.left, rect2.left), (Math.max rect1.top, rect2.top),
(Math.min rect1.right, rect2.right), (Math.min rect1.bottom, rect2.bottom)
- # Determine whether two rects overlap.
- rectsOverlap: do ->
- halfOverlapChecker = (rect1, rect2) ->
- (rect1.left <= rect2.left <= rect1.right or rect1.left <= rect2.right <= rect1.right) and
- (rect1.top <= rect2.top <= rect1.bottom or rect1.top <= rect2.bottom <= rect1.bottom)
-
- (rect1, rect2) ->
- halfOverlapChecker(rect1, rect2) or halfOverlapChecker rect2, rect1
-
root = exports ? (window.root ?= {})
root.Rect = Rect
extend window, root unless exports?
diff --git a/tests/unit_tests/rect_test.coffee b/tests/unit_tests/rect_test.coffee
index 0773dbcf..5054e029 100644
--- a/tests/unit_tests/rect_test.coffee
+++ b/tests/unit_tests/rect_test.coffee
@@ -201,7 +201,7 @@ context "Rect subtraction",
subtractRect = Rect.create x, y, (x + width), (y + height)
resultRects = Rect.subtract rect, subtractRect
for resultRect in resultRects
- assert.isFalse Rect.contains subtractRect, resultRect
+ assert.isFalse Rect.intersects subtractRect, resultRect
should "be contained in original rect", ->
rect = Rect.create 0, 0, 3, 3
@@ -212,7 +212,7 @@ context "Rect subtraction",
subtractRect = Rect.create x, y, (x + width), (y + height)
resultRects = Rect.subtract rect, subtractRect
for resultRect in resultRects
- assert.isTrue Rect.contains rect, resultRect
+ assert.isTrue Rect.intersects rect, resultRect
should "contain the subtracted rect in the original minus the results", ->
rect = Rect.create 0, 0, 3, 3
@@ -229,60 +229,60 @@ context "Rect subtraction",
assert.isTrue (resultComplement.length == 0 or resultComplement.length == 1)
if resultComplement.length == 1
complementRect = resultComplement[0]
- assert.isTrue Rect.contains subtractRect, complementRect
+ assert.isTrue Rect.intersects subtractRect, complementRect
context "Rect overlaps",
should "detect that a rect overlaps itself", ->
rect = Rect.create 2, 2, 4, 4
- assert.isTrue Rect.rectsOverlap rect, rect
+ assert.isTrue Rect.intersectsStrict rect, rect
should "detect that non-overlapping rectangles do not overlap on the left", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 0, 2, 1, 4
- assert.isFalse Rect.rectsOverlap rect1, rect2
+ assert.isFalse Rect.intersectsStrict rect1, rect2
should "detect that non-overlapping rectangles do not overlap on the right", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 5, 2, 6, 4
- assert.isFalse Rect.rectsOverlap rect1, rect2
+ assert.isFalse Rect.intersectsStrict rect1, rect2
should "detect that non-overlapping rectangles do not overlap on the top", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 2, 0, 2, 1
- assert.isFalse Rect.rectsOverlap rect1, rect2
+ assert.isFalse Rect.intersectsStrict rect1, rect2
should "detect that non-overlapping rectangles do not overlap on the bottom", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 2, 5, 2, 6
- assert.isFalse Rect.rectsOverlap rect1, rect2
+ assert.isFalse Rect.intersectsStrict rect1, rect2
should "detect overlapping rectangles on the left", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 0, 2, 2, 4
- assert.isTrue Rect.rectsOverlap rect1, rect2
+ assert.isTrue Rect.intersectsStrict rect1, rect2
should "detect overlapping rectangles on the right", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 4, 2, 5, 4
- assert.isTrue Rect.rectsOverlap rect1, rect2
+ assert.isTrue Rect.intersectsStrict rect1, rect2
should "detect overlapping rectangles on the top", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 2, 4, 4, 5
- assert.isTrue Rect.rectsOverlap rect1, rect2
+ assert.isTrue Rect.intersectsStrict rect1, rect2
should "detect overlapping rectangles on the bottom", ->
rect1 = Rect.create 2, 2, 4, 4
rect2 = Rect.create 2, 0, 4, 2
- assert.isTrue Rect.rectsOverlap rect1, rect2
+ assert.isTrue Rect.intersectsStrict rect1, rect2
should "detect overlapping rectangles when second rectangle is contained in first", ->
rect1 = Rect.create 1, 1, 4, 4
rect2 = Rect.create 2, 2, 3, 3
- assert.isTrue Rect.rectsOverlap rect1, rect2
+ assert.isTrue Rect.intersectsStrict rect1, rect2
should "detect overlapping rectangles when first rectangle is contained in second", ->
rect1 = Rect.create 1, 1, 4, 4
rect2 = Rect.create 2, 2, 3, 3
- assert.isTrue Rect.rectsOverlap rect2, rect1
+ assert.isTrue Rect.intersectsStrict rect2, rect1