The rects returned by Element/Range.getClientRects() should not be rounded
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 13 May 2017 05:41:28 +0000 (05:41 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 13 May 2017 05:41:28 +0000 (05:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=172057

Reviewed by Chris Dumez.

Source/WebCore:

Fix createDOMRectVector() to not expand the rects to integer boundaries (which
quad.enclosingBoundingBox() does), but to return rects with floating point
values. This matches Chrome and Firefox, and matches getBoundingClientRect(),
which does not integral snap.

* dom/DOMRect.cpp:
(WebCore::createDOMRectVector):

LayoutTests:

Fix tests that were sensitive to rounding. I had to mark fast/text/multiglyph-characters.html
as failing (webkit.org/b/172056).

* TestExpectations:
* fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll.html:
* fast/dom/Range/getClientRects-expected.txt:
* fast/dom/Range/getClientRects.html:
* fast/dom/Range/simple-line-layout-getclientrects-expected.html:
* fast/dom/Range/simple-line-layout-getclientrects.html:
* fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt:
* platform/ios/TestExpectations:
* platform/ios/fast/multicol/client-rects-expected.txt:
* platform/ios/fast/multicol/client-rects-spanners-complex-expected.txt:
* platform/ios/fast/multicol/client-rects-spanners-expected.txt:
* platform/ios/fast/multicol/newmulticol/client-rects-expected.txt:
* platform/ios/fast/transforms/bounding-rect-zoom-expected.txt:
* platform/mac/fast/multicol/client-rects-expected.txt:
* platform/mac/fast/multicol/client-rects-spanners-complex-expected.txt:
* platform/mac/fast/multicol/client-rects-spanners-expected.txt:
* platform/mac/fast/multicol/newmulticol/client-rects-expected.txt:
* platform/mac/fast/transforms/bounding-rect-zoom-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@216817 268f45cc-cd09-0410-ab3c-d52691b4dbfc

21 files changed:
LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll.html
LayoutTests/fast/dom/Range/getClientRects-expected.txt
LayoutTests/fast/dom/Range/getClientRects.html
LayoutTests/fast/dom/Range/simple-line-layout-getclientrects-expected.html
LayoutTests/fast/dom/Range/simple-line-layout-getclientrects.html
LayoutTests/fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt
LayoutTests/platform/ios/TestExpectations
LayoutTests/platform/ios/fast/multicol/client-rects-expected.txt
LayoutTests/platform/ios/fast/multicol/client-rects-spanners-complex-expected.txt
LayoutTests/platform/ios/fast/multicol/client-rects-spanners-expected.txt
LayoutTests/platform/ios/fast/multicol/newmulticol/client-rects-expected.txt
LayoutTests/platform/ios/fast/transforms/bounding-rect-zoom-expected.txt
LayoutTests/platform/mac/fast/multicol/client-rects-expected.txt
LayoutTests/platform/mac/fast/multicol/client-rects-spanners-complex-expected.txt
LayoutTests/platform/mac/fast/multicol/client-rects-spanners-expected.txt
LayoutTests/platform/mac/fast/multicol/newmulticol/client-rects-expected.txt
LayoutTests/platform/mac/fast/transforms/bounding-rect-zoom-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/dom/DOMRect.cpp

index ef24bcd..cc8a621 100644 (file)
@@ -1,3 +1,32 @@
+2017-05-12  Simon Fraser  <simon.fraser@apple.com>
+
+        The rects returned by Element/Range.getClientRects() should not be rounded
+        https://bugs.webkit.org/show_bug.cgi?id=172057
+
+        Reviewed by Chris Dumez.
+
+        Fix tests that were sensitive to rounding. I had to mark fast/text/multiglyph-characters.html
+        as failing (webkit.org/b/172056).
+
+        * TestExpectations:
+        * fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll.html:
+        * fast/dom/Range/getClientRects-expected.txt:
+        * fast/dom/Range/getClientRects.html:
+        * fast/dom/Range/simple-line-layout-getclientrects-expected.html:
+        * fast/dom/Range/simple-line-layout-getclientrects.html:
+        * fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt:
+        * platform/ios/TestExpectations:
+        * platform/ios/fast/multicol/client-rects-expected.txt:
+        * platform/ios/fast/multicol/client-rects-spanners-complex-expected.txt:
+        * platform/ios/fast/multicol/client-rects-spanners-expected.txt:
+        * platform/ios/fast/multicol/newmulticol/client-rects-expected.txt:
+        * platform/ios/fast/transforms/bounding-rect-zoom-expected.txt:
+        * platform/mac/fast/multicol/client-rects-expected.txt:
+        * platform/mac/fast/multicol/client-rects-spanners-complex-expected.txt:
+        * platform/mac/fast/multicol/client-rects-spanners-expected.txt:
+        * platform/mac/fast/multicol/newmulticol/client-rects-expected.txt:
+        * platform/mac/fast/transforms/bounding-rect-zoom-expected.txt:
+
 2017-05-12  Jiewen Tan  <jiewen_tan@apple.com>
 
         Elements should be inserted into a template element as its content's last child
index c501ef3..d7f0c88 100644 (file)
@@ -1057,6 +1057,8 @@ webkit.org/b/159755 fast/text/emoji-gender.html [ ImageOnlyFailure ]
 
 webkit.org/b/160017 js/regress-139548.html [ Slow ]
 
+webkit.org/b/172056 fast/text/multiglyph-characters.html [ Failure ]
+
 # Only iOS has implemented lettepress.
 fast/text/letterpress-different.html [ ImageOnlyFailure ]
 
index 6ff3d1b..a5b736a 100644 (file)
@@ -5,9 +5,11 @@
 <script>
     function sendClick(x, y)
     {
-        eventSender.mouseMoveTo(x, y);
-        eventSender.mouseDown();
-        eventSender.mouseUp();
+        if (window.eventSender) {
+            eventSender.mouseMoveTo(x, y);
+            eventSender.mouseDown();
+            eventSender.mouseUp();
+        }
     }
     
     // 29 is the character offset in the div text "A long text to test document caretRangeFromPoint".
     
     onload = function()
     {
-        if (!window.testRunner)
-            return;
-        
-        testRunner.dumpAsText();
+        if (window.testRunner)
+            testRunner.dumpAsText();
     
         var range = document.createRange();
         var node = document.getElementById("first");
@@ -77,8 +77,8 @@
         // Base test.
         window.addEventListener("click", checkBase, false);
         rects = range.getClientRects();
-        var x = rects[0].left;
-        var y = rects[0].top + rects[0].width / 2;
+        var x = Math.round(rects[0].left);
+        var y = Math.round(rects[0].top + rects[0].width / 2);
         sendClick(x, y);
         window.removeEventListener("click", checkBase, false);
     
@@ -93,8 +93,8 @@
         window.addEventListener("click", checkZoom, false);
         node.style.zoom = 2.0;
         rects = range.getClientRects();
-        var x = rects[0].left;
-        var y = rects[0].top + rects[0].width / 2;
+        var x = Math.round(rects[0].left);
+        var y = Math.round(rects[0].top + rects[0].width / 2);
         sendClick(x * 2, y);
         window.removeEventListener("click", checkZoom, false);
     
index e7b276a..dc1faf6 100644 (file)
 Test 1
 PASS rects.length is 5
-PASS rects[0].left is 8
-PASS rects[0].top is 8
-PASS rects[0].width is 400
-PASS rects[0].height is 160
-PASS rects[1].left is 8
-PASS rects[1].top is 19
-PASS rects[1].width is 387
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 59
-PASS rects[2].width is 360
-PASS rects[2].height is 18
-PASS rects[3].left is 8
-PASS rects[3].top is 99
-PASS rects[3].width is 382
-PASS rects[3].height is 18
-PASS rects[4].left is 8
-PASS rects[4].top is 139
-PASS rects[4].width is 369
-PASS rects[4].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "8.00"
+PASS rects[0].width.toFixed(2) is "400.00"
+PASS rects[0].height.toFixed(2) is "160.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "19.00"
+PASS rects[1].width.toFixed(2) is "386.58"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "59.00"
+PASS rects[2].width.toFixed(2) is "359.91"
+PASS rects[2].height.toFixed(2) is "18.00"
+PASS rects[3].left.toFixed(2) is "8.00"
+PASS rects[3].top.toFixed(2) is "99.00"
+PASS rects[3].width.toFixed(2) is "381.25"
+PASS rects[3].height.toFixed(2) is "18.00"
+PASS rects[4].left.toFixed(2) is "8.00"
+PASS rects[4].top.toFixed(2) is "139.00"
+PASS rects[4].width.toFixed(2) is "368.36"
+PASS rects[4].height.toFixed(2) is "18.00"
 Test 2
 PASS rects.length is 4
-PASS rects[0].left is 8
-PASS rects[0].top is 215
-PASS rects[0].width is 387
-PASS rects[0].height is 18
-PASS rects[1].left is 8
-PASS rects[1].top is 255
-PASS rects[1].width is 360
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 295
-PASS rects[2].width is 382
-PASS rects[2].height is 18
-PASS rects[3].left is 8
-PASS rects[3].top is 335
-PASS rects[3].width is 369
-PASS rects[3].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "215.00"
+PASS rects[0].width.toFixed(2) is "386.58"
+PASS rects[0].height.toFixed(2) is "18.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "255.00"
+PASS rects[1].width.toFixed(2) is "359.91"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "295.00"
+PASS rects[2].width.toFixed(2) is "381.25"
+PASS rects[2].height.toFixed(2) is "18.00"
+PASS rects[3].left.toFixed(2) is "8.00"
+PASS rects[3].top.toFixed(2) is "335.00"
+PASS rects[3].width.toFixed(2) is "368.36"
+PASS rects[3].height.toFixed(2) is "18.00"
 Test 3
 PASS rects.length is 4
-PASS rects[0].left is 81
-PASS rects[0].top is 411
-PASS rects[0].width is 314
-PASS rects[0].height is 18
-PASS rects[1].left is 8
-PASS rects[1].top is 451
-PASS rects[1].width is 360
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 491
-PASS rects[2].width is 382
-PASS rects[2].height is 18
-PASS rects[3].left is 8
-PASS rects[3].top is 531
-PASS rects[3].width is 147
-PASS rects[3].height is 18
+PASS rects[0].left.toFixed(2) is "81.31"
+PASS rects[0].top.toFixed(2) is "411.00"
+PASS rects[0].width.toFixed(2) is "313.27"
+PASS rects[0].height.toFixed(2) is "18.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "451.00"
+PASS rects[1].width.toFixed(2) is "359.91"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "491.00"
+PASS rects[2].width.toFixed(2) is "381.25"
+PASS rects[2].height.toFixed(2) is "18.00"
+PASS rects[3].left.toFixed(2) is "8.00"
+PASS rects[3].top.toFixed(2) is "531.00"
+PASS rects[3].width.toFixed(2) is "146.66"
+PASS rects[3].height.toFixed(2) is "18.00"
 Test 4
 PASS rects.length is 7
-PASS rects[0].left is 8
-PASS rects[0].top is 596
-PASS rects[0].width is 400
-PASS rects[0].height is 278
-PASS rects[1].left is 8
-PASS rects[1].top is 607
-PASS rects[1].width is 387
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 725
-PASS rects[2].width is 269
-PASS rects[2].height is 18
-PASS rects[3].left is 352
-PASS rects[3].top is 725
-PASS rects[3].width is 46
-PASS rects[3].height is 18
-PASS rects[4].left is 8
-PASS rects[4].top is 765
-PASS rects[4].width is 349
-PASS rects[4].height is 18
-PASS rects[5].left is 8
-PASS rects[5].top is 805
-PASS rects[5].width is 376
-PASS rects[5].height is 18
-PASS rects[6].left is 8
-PASS rects[6].top is 845
-PASS rects[6].width is 68
-PASS rects[6].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "596.00"
+PASS rects[0].width.toFixed(2) is "400.00"
+PASS rects[0].height.toFixed(2) is "278.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "607.00"
+PASS rects[1].width.toFixed(2) is "386.58"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "725.00"
+PASS rects[2].width.toFixed(2) is "268.39"
+PASS rects[2].height.toFixed(2) is "18.00"
+PASS rects[3].left.toFixed(2) is "352.39"
+PASS rects[3].top.toFixed(2) is "725.00"
+PASS rects[3].width.toFixed(2) is "44.88"
+PASS rects[3].height.toFixed(2) is "18.00"
+PASS rects[4].left.toFixed(2) is "8.00"
+PASS rects[4].top.toFixed(2) is "765.00"
+PASS rects[4].width.toFixed(2) is "348.38"
+PASS rects[4].height.toFixed(2) is "18.00"
+PASS rects[5].left.toFixed(2) is "8.00"
+PASS rects[5].top.toFixed(2) is "805.00"
+PASS rects[5].width.toFixed(2) is "375.90"
+PASS rects[5].height.toFixed(2) is "18.00"
+PASS rects[6].left.toFixed(2) is "8.00"
+PASS rects[6].top.toFixed(2) is "845.00"
+PASS rects[6].width.toFixed(2) is "67.98"
+PASS rects[6].height.toFixed(2) is "18.00"
 Test 5
 PASS rects.length is 5
-PASS rects[0].left is 81
-PASS rects[0].top is 921
-PASS rects[0].width is 314
-PASS rects[0].height is 18
-PASS rects[1].left is 8
-PASS rects[1].top is 1039
-PASS rects[1].width is 269
-PASS rects[1].height is 18
-PASS rects[2].left is 276
-PASS rects[2].top is 950
-PASS rects[2].width is 77
-PASS rects[2].height is 103
-PASS rects[3].left is 352
-PASS rects[3].top is 1039
-PASS rects[3].width is 46
-PASS rects[3].height is 18
-PASS rects[4].left is 8
-PASS rects[4].top is 1079
-PASS rects[4].width is 291
-PASS rects[4].height is 18
+PASS rects[0].left.toFixed(2) is "81.00"
+PASS rects[0].top.toFixed(2) is "921.00"
+PASS rects[0].width.toFixed(2) is "313.58"
+PASS rects[0].height.toFixed(2) is "18.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "1039.00"
+PASS rects[1].width.toFixed(2) is "268.39"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "276.39"
+PASS rects[2].top.toFixed(2) is "950.00"
+PASS rects[2].width.toFixed(2) is "76.00"
+PASS rects[2].height.toFixed(2) is "103.00"
+PASS rects[3].left.toFixed(2) is "352.39"
+PASS rects[3].top.toFixed(2) is "1039.00"
+PASS rects[3].width.toFixed(2) is "44.88"
+PASS rects[3].height.toFixed(2) is "18.00"
+PASS rects[4].left.toFixed(2) is "8.00"
+PASS rects[4].top.toFixed(2) is "1079.00"
+PASS rects[4].width.toFixed(2) is "291.00"
+PASS rects[4].height.toFixed(2) is "18.00"
 Test 6
 PASS rects.length is 8
-PASS rects[0].left is 8
-PASS rects[0].top is 1224
-PASS rects[0].width is 400
-PASS rects[0].height is 240
-PASS rects[1].left is 8
-PASS rects[1].top is 1235
-PASS rects[1].width is 387
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 1275
-PASS rects[2].width is 16
-PASS rects[2].height is 18
-PASS rects[3].left is 8
-PASS rects[3].top is 1315
-PASS rects[3].width is 59
-PASS rects[3].height is 18
-PASS rects[4].left is 106
-PASS rects[4].top is 1315
-PASS rects[4].width is 46
-PASS rects[4].height is 18
-PASS rects[5].left is 8
-PASS rects[5].top is 1355
-PASS rects[5].width is 397
-PASS rects[5].height is 18
-PASS rects[6].left is 8
-PASS rects[6].top is 1395
-PASS rects[6].width is 360
-PASS rects[6].height is 18
-PASS rects[7].left is 8
-PASS rects[7].top is 1435
-PASS rects[7].width is 222
-PASS rects[7].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "1224.00"
+PASS rects[0].width.toFixed(2) is "400.00"
+PASS rects[0].height.toFixed(2) is "240.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "1235.00"
+PASS rects[1].width.toFixed(2) is "386.58"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "1275.00"
+PASS rects[2].width.toFixed(2) is "16.00"
+PASS rects[2].height.toFixed(2) is "18.00"
+PASS rects[3].left.toFixed(2) is "8.00"
+PASS rects[3].top.toFixed(2) is "1315.00"
+PASS rects[3].width.toFixed(2) is "58.22"
+PASS rects[3].height.toFixed(2) is "18.00"
+PASS rects[4].left.toFixed(2) is "106.22"
+PASS rects[4].top.toFixed(2) is "1315.00"
+PASS rects[4].width.toFixed(2) is "45.32"
+PASS rects[4].height.toFixed(2) is "18.00"
+PASS rects[5].left.toFixed(2) is "8.00"
+PASS rects[5].top.toFixed(2) is "1355.00"
+PASS rects[5].width.toFixed(2) is "396.34"
+PASS rects[5].height.toFixed(2) is "18.00"
+PASS rects[6].left.toFixed(2) is "8.00"
+PASS rects[6].top.toFixed(2) is "1395.00"
+PASS rects[6].width.toFixed(2) is "359.93"
+PASS rects[6].height.toFixed(2) is "18.00"
+PASS rects[7].left.toFixed(2) is "8.00"
+PASS rects[7].top.toFixed(2) is "1435.00"
+PASS rects[7].width.toFixed(2) is "221.71"
+PASS rects[7].height.toFixed(2) is "18.00"
 Test 7
 PASS rects.length is 8
-PASS rects[0].left is 8
-PASS rects[0].top is 1511
-PASS rects[0].width is 387
-PASS rects[0].height is 18
-PASS rects[1].left is 8
-PASS rects[1].top is 1551
-PASS rects[1].width is 16
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 1580
-PASS rects[2].width is 400
-PASS rects[2].height is 40
-PASS rects[3].left is 8
-PASS rects[3].top is 1591
-PASS rects[3].width is 59
-PASS rects[3].height is 18
-PASS rects[4].left is 106
-PASS rects[4].top is 1591
-PASS rects[4].width is 46
-PASS rects[4].height is 18
-PASS rects[5].left is 8
-PASS rects[5].top is 1631
-PASS rects[5].width is 397
-PASS rects[5].height is 18
-PASS rects[6].left is 8
-PASS rects[6].top is 1671
-PASS rects[6].width is 360
-PASS rects[6].height is 18
-PASS rects[7].left is 8
-PASS rects[7].top is 1711
-PASS rects[7].width is 222
-PASS rects[7].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "1511.00"
+PASS rects[0].width.toFixed(2) is "386.58"
+PASS rects[0].height.toFixed(2) is "18.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "1551.00"
+PASS rects[1].width.toFixed(2) is "16.00"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "1580.00"
+PASS rects[2].width.toFixed(2) is "400.00"
+PASS rects[2].height.toFixed(2) is "40.00"
+PASS rects[3].left.toFixed(2) is "8.00"
+PASS rects[3].top.toFixed(2) is "1591.00"
+PASS rects[3].width.toFixed(2) is "58.22"
+PASS rects[3].height.toFixed(2) is "18.00"
+PASS rects[4].left.toFixed(2) is "106.22"
+PASS rects[4].top.toFixed(2) is "1591.00"
+PASS rects[4].width.toFixed(2) is "45.32"
+PASS rects[4].height.toFixed(2) is "18.00"
+PASS rects[5].left.toFixed(2) is "8.00"
+PASS rects[5].top.toFixed(2) is "1631.00"
+PASS rects[5].width.toFixed(2) is "396.34"
+PASS rects[5].height.toFixed(2) is "18.00"
+PASS rects[6].left.toFixed(2) is "8.00"
+PASS rects[6].top.toFixed(2) is "1671.00"
+PASS rects[6].width.toFixed(2) is "359.93"
+PASS rects[6].height.toFixed(2) is "18.00"
+PASS rects[7].left.toFixed(2) is "8.00"
+PASS rects[7].top.toFixed(2) is "1711.00"
+PASS rects[7].width.toFixed(2) is "221.71"
+PASS rects[7].height.toFixed(2) is "18.00"
 Test 8
 PASS rects.length is 4
-PASS rects[0].left is 168
-PASS rects[0].top is 1758
-PASS rects[0].width is 263
-PASS rects[0].height is 309
-PASS rects[1].left is 137
-PASS rects[1].top is 1784
-PASS rects[1].width is 247
-PASS rects[1].height is 288
-PASS rects[2].left is 107
-PASS rects[2].top is 1809
-PASS rects[2].width is 260
-PASS rects[2].height is 305
-PASS rects[3].left is 76
-PASS rects[3].top is 1835
-PASS rects[3].width is 252
-PASS rects[3].height is 295
+PASS rects[0].left.toFixed(2) is "168.51"
+PASS rects[0].top.toFixed(2) is "1758.44"
+PASS rects[0].width.toFixed(2) is "262.28"
+PASS rects[0].height.toFixed(2) is "307.71"
+PASS rects[1].left.toFixed(2) is "137.87"
+PASS rects[1].top.toFixed(2) is "1784.15"
+PASS rects[1].width.toFixed(2) is "245.14"
+PASS rects[1].height.toFixed(2) is "287.28"
+PASS rects[2].left.toFixed(2) is "107.23"
+PASS rects[2].top.toFixed(2) is "1809.86"
+PASS rects[2].width.toFixed(2) is "258.85"
+PASS rects[2].height.toFixed(2) is "303.62"
+PASS rects[3].left.toFixed(2) is "76.59"
+PASS rects[3].top.toFixed(2) is "1835.57"
+PASS rects[3].width.toFixed(2) is "250.57"
+PASS rects[3].height.toFixed(2) is "293.75"
 Test 9
 PASS rects.length is 0
 Test 9b
 PASS rects.length is 1
-PASS rects[0].left is 8
-PASS rects[0].top is 1983
-PASS rects[0].width is 0
-PASS rects[0].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "1983.00"
+PASS rects[0].width.toFixed(2) is "0.00"
+PASS rects[0].height.toFixed(2) is "18.00"
 Test 10
 PASS rects.length is 5
-PASS rects[0].left is 19
-PASS rects[0].top is 2168
-PASS rects[0].width is 18
-PASS rects[0].height is 375
-PASS rects[1].left is 59
-PASS rects[1].top is 2168
-PASS rects[1].width is 18
-PASS rects[1].height is 368
-PASS rects[2].left is 99
-PASS rects[2].top is 2168
-PASS rects[2].width is 18
-PASS rects[2].height is 349
-PASS rects[3].left is 139
-PASS rects[3].top is 2168
-PASS rects[3].width is 18
-PASS rects[3].height is 376
-PASS rects[4].left is 179
-PASS rects[4].top is 2168
-PASS rects[4].width is 18
-PASS rects[4].height is 68
+PASS rects[0].left.toFixed(2) is "19.00"
+PASS rects[0].top.toFixed(2) is "2168.00"
+PASS rects[0].width.toFixed(2) is "18.00"
+PASS rects[0].height.toFixed(2) is "375.00"
+PASS rects[1].left.toFixed(2) is "59.00"
+PASS rects[1].top.toFixed(2) is "2168.00"
+PASS rects[1].width.toFixed(2) is "18.00"
+PASS rects[1].height.toFixed(2) is "367.03"
+PASS rects[2].left.toFixed(2) is "99.00"
+PASS rects[2].top.toFixed(2) is "2168.00"
+PASS rects[2].width.toFixed(2) is "18.00"
+PASS rects[2].height.toFixed(2) is "348.38"
+PASS rects[3].left.toFixed(2) is "139.00"
+PASS rects[3].top.toFixed(2) is "2168.00"
+PASS rects[3].width.toFixed(2) is "18.00"
+PASS rects[3].height.toFixed(2) is "375.90"
+PASS rects[4].left.toFixed(2) is "179.00"
+PASS rects[4].top.toFixed(2) is "2168.00"
+PASS rects[4].width.toFixed(2) is "18.00"
+PASS rects[4].height.toFixed(2) is "67.98"
 Test 11
 PASS rects.length is 2
-PASS rects[0].left is 8
-PASS rects[0].top is 2604
-PASS rects[0].width is 400
-PASS rects[0].height is 40
-PASS rects[1].left is 8
-PASS rects[1].top is 2615
-PASS rects[1].width is 182
-PASS rects[1].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "2604.00"
+PASS rects[0].width.toFixed(2) is "400.00"
+PASS rects[0].height.toFixed(2) is "40.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "2615.00"
+PASS rects[1].width.toFixed(2) is "181.75"
+PASS rects[1].height.toFixed(2) is "18.00"
 Test 12
 PASS rects.length is 1
-PASS rects[0].left is 8
-PASS rects[0].top is 2840
-PASS rects[0].width is 400
-PASS rects[0].height is 160
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "2840.00"
+PASS rects[0].width.toFixed(2) is "400.00"
+PASS rects[0].height.toFixed(2) is "160.00"
 Test 13
 PASS rects.length is 4
-PASS rects[0].left is 8
-PASS rects[0].top is 3047
-PASS rects[0].width is 387
-PASS rects[0].height is 18
-PASS rects[1].left is 8
-PASS rects[1].top is 3087
-PASS rects[1].width is 360
-PASS rects[1].height is 18
-PASS rects[2].left is 8
-PASS rects[2].top is 3127
-PASS rects[2].width is 382
-PASS rects[2].height is 18
-PASS rects[3].left is 8
-PASS rects[3].top is 3167
-PASS rects[3].width is 369
-PASS rects[3].height is 18
+PASS rects[0].left.toFixed(2) is "8.00"
+PASS rects[0].top.toFixed(2) is "3047.00"
+PASS rects[0].width.toFixed(2) is "386.58"
+PASS rects[0].height.toFixed(2) is "18.00"
+PASS rects[1].left.toFixed(2) is "8.00"
+PASS rects[1].top.toFixed(2) is "3087.00"
+PASS rects[1].width.toFixed(2) is "359.91"
+PASS rects[1].height.toFixed(2) is "18.00"
+PASS rects[2].left.toFixed(2) is "8.00"
+PASS rects[2].top.toFixed(2) is "3127.00"
+PASS rects[2].width.toFixed(2) is "381.25"
+PASS rects[2].height.toFixed(2) is "18.00"
+PASS rects[3].left.toFixed(2) is "8.00"
+PASS rects[3].top.toFixed(2) is "3167.00"
+PASS rects[3].width.toFixed(2) is "368.36"
+PASS rects[3].height.toFixed(2) is "18.00"
 Test 14
 PASS rects.length is 0
 PASS successfullyParsed is true
index 0683b0b..927d7d3 100644 (file)
     show(range1);
     rects = range1.getClientRects();
     shouldBe("rects.length", "5");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "8");
-    shouldBe("rects[0].width", "400");
-    shouldBe("rects[0].height", "160");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "19");
-    shouldBe("rects[1].width", "387");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "59");
-    shouldBe("rects[2].width", "360");
-    shouldBe("rects[2].height", "18");
-    shouldBe("rects[3].left", "8");
-    shouldBe("rects[3].top", "99");
-    shouldBe("rects[3].width", "382");
-    shouldBe("rects[3].height", "18");
-    shouldBe("rects[4].left", "8");
-    shouldBe("rects[4].top", "139");
-    shouldBe("rects[4].width", "369");
-    shouldBe("rects[4].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "400.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "160.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "19.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "386.58");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "59.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "359.91");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "99.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "381.25");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[4].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[4].top.toFixed(2)", "139.00");
+    shouldBeEqualToString("rects[4].width.toFixed(2)", "368.36");
+    shouldBeEqualToString("rects[4].height.toFixed(2)", "18.00");
 
     // Test 2
     debug("Test 2")
     show(range2);
     rects = range2.getClientRects();
     shouldBe("rects.length", "4");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "215");
-    shouldBe("rects[0].width", "387");
-    shouldBe("rects[0].height", "18");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "255");
-    shouldBe("rects[1].width", "360");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "295");
-    shouldBe("rects[2].width", "382");
-    shouldBe("rects[2].height", "18");
-    shouldBe("rects[3].left", "8");
-    shouldBe("rects[3].top", "335");
-    shouldBe("rects[3].width", "369");
-    shouldBe("rects[3].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "215.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "386.58");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "255.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "359.91");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "295.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "381.25");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "335.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "368.36");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
 
     // Test 3
     debug("Test 3")
     show(range3);
     rects = range3.getClientRects();
     shouldBe("rects.length", "4");
-    shouldBe("rects[0].left", "81");
-    shouldBe("rects[0].top", "411");
-    shouldBe("rects[0].width", "314");
-    shouldBe("rects[0].height", "18");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "451");
-    shouldBe("rects[1].width", "360");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "491");
-    shouldBe("rects[2].width", "382");
-    shouldBe("rects[2].height", "18");
-    shouldBe("rects[3].left", "8");
-    shouldBe("rects[3].top", "531");
-    shouldBe("rects[3].width", "147");
-    shouldBe("rects[3].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "81.31");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "411.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "313.27");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "451.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "359.91");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "491.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "381.25");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "531.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "146.66");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
 
     // Test 4 - Should not include rect of the img.
     debug("Test 4")
     show(range4);
     rects = range4.getClientRects();
     shouldBe("rects.length", "7");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "596");
-    shouldBe("rects[0].width", "400");
-    shouldBe("rects[0].height", "278");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "607");
-    shouldBe("rects[1].width", "387");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "725");
-    shouldBe("rects[2].width", "269");
-    shouldBe("rects[2].height", "18");
-    shouldBe("rects[3].left", "352");
-    shouldBe("rects[3].top", "725");
-    shouldBe("rects[3].width", "46");
-    shouldBe("rects[3].height", "18");
-    shouldBe("rects[4].left", "8");
-    shouldBe("rects[4].top", "765");
-    shouldBe("rects[4].width", "349");
-    shouldBe("rects[4].height", "18");
-    shouldBe("rects[5].left", "8");
-    shouldBe("rects[5].top", "805");
-    shouldBe("rects[5].width", "376");
-    shouldBe("rects[5].height", "18");
-    shouldBe("rects[6].left", "8");
-    shouldBe("rects[6].top", "845");
-    shouldBe("rects[6].width", "68");
-    shouldBe("rects[6].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "596.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "400.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "278.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "607.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "386.58");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "725.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "268.39");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "352.39");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "725.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "44.88");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[4].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[4].top.toFixed(2)", "765.00");
+    shouldBeEqualToString("rects[4].width.toFixed(2)", "348.38");
+    shouldBeEqualToString("rects[4].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[5].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[5].top.toFixed(2)", "805.00");
+    shouldBeEqualToString("rects[5].width.toFixed(2)", "375.90");
+    shouldBeEqualToString("rects[5].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[6].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[6].top.toFixed(2)", "845.00");
+    shouldBeEqualToString("rects[6].width.toFixed(2)", "67.98");
+    shouldBeEqualToString("rects[6].height.toFixed(2)", "18.00");
     
     // Test 5 - Should include rect of the img.
     debug("Test 5");
     show(range5);
     rects = range5.getClientRects();
     shouldBe("rects.length", "5");
-    shouldBe("rects[0].left", "81");
-    shouldBe("rects[0].top", "921");
-    shouldBe("rects[0].width", "314");
-    shouldBe("rects[0].height", "18");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "1039");
-    shouldBe("rects[1].width", "269");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "276");
-    shouldBe("rects[2].top", "950");
-    shouldBe("rects[2].width", "77");
-    shouldBe("rects[2].height", "103");
-    shouldBe("rects[3].left", "352");
-    shouldBe("rects[3].top", "1039");
-    shouldBe("rects[3].width", "46");
-    shouldBe("rects[3].height", "18");
-    shouldBe("rects[4].left", "8");
-    shouldBe("rects[4].top", "1079");
-    shouldBe("rects[4].width", "291");
-    shouldBe("rects[4].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "81.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "921.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "313.58");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "1039.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "268.39");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "276.39");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "950.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "76.00");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "103.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "352.39");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "1039.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "44.88");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[4].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[4].top.toFixed(2)", "1079.00");
+    shouldBeEqualToString("rects[4].width.toFixed(2)", "291.00");
+    shouldBeEqualToString("rects[4].height.toFixed(2)", "18.00");
 
     // Test 6 - Should not include green or blue boxes
     debug("Test 6");
     show(range6);
     rects = range6.getClientRects();
     shouldBe("rects.length", "8");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "1224");
-    shouldBe("rects[0].width", "400");
-    shouldBe("rects[0].height", "240");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "1235");
-    shouldBe("rects[1].width", "387");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "1275");
-    shouldBe("rects[2].width", "16");
-    shouldBe("rects[2].height", "18");
-    shouldBe("rects[3].left", "8");
-    shouldBe("rects[3].top", "1315");
-    shouldBe("rects[3].width", "59");
-    shouldBe("rects[3].height", "18");
-    shouldBe("rects[4].left", "106");
-    shouldBe("rects[4].top", "1315");
-    shouldBe("rects[4].width", "46");
-    shouldBe("rects[4].height", "18");
-    shouldBe("rects[5].left", "8");
-    shouldBe("rects[5].top", "1355");
-    shouldBe("rects[5].width", "397");
-    shouldBe("rects[5].height", "18");
-    shouldBe("rects[6].left", "8");
-    shouldBe("rects[6].top", "1395");
-    shouldBe("rects[6].width", "360");
-    shouldBe("rects[6].height", "18");
-    shouldBe("rects[7].left", "8");
-    shouldBe("rects[7].top", "1435");
-    shouldBe("rects[7].width", "222");
-    shouldBe("rects[7].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "1224.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "400.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "240.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "1235.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "386.58");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "1275.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "16.00");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "1315.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "58.22");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[4].left.toFixed(2)", "106.22");
+    shouldBeEqualToString("rects[4].top.toFixed(2)", "1315.00");
+    shouldBeEqualToString("rects[4].width.toFixed(2)", "45.32");
+    shouldBeEqualToString("rects[4].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[5].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[5].top.toFixed(2)", "1355.00");
+    shouldBeEqualToString("rects[5].width.toFixed(2)", "396.34");
+    shouldBeEqualToString("rects[5].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[6].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[6].top.toFixed(2)", "1395.00");
+    shouldBeEqualToString("rects[6].width.toFixed(2)", "359.93");
+    shouldBeEqualToString("rects[6].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[7].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[7].top.toFixed(2)", "1435.00");
+    shouldBeEqualToString("rects[7].width.toFixed(2)", "221.71");
+    shouldBeEqualToString("rects[7].height.toFixed(2)", "18.00");
 
     // Test 7 - Should include green but not blue box
     debug("Test 7");
     show(range7);
     rects = range7.getClientRects();
     shouldBe("rects.length", "8");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "1511");
-    shouldBe("rects[0].width", "387");
-    shouldBe("rects[0].height", "18");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "1551");
-    shouldBe("rects[1].width", "16");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "1580");
-    shouldBe("rects[2].width", "400");
-    shouldBe("rects[2].height", "40");
-    shouldBe("rects[3].left", "8");
-    shouldBe("rects[3].top", "1591");
-    shouldBe("rects[3].width", "59");
-    shouldBe("rects[3].height", "18");
-    shouldBe("rects[4].left", "106");
-    shouldBe("rects[4].top", "1591");
-    shouldBe("rects[4].width", "46");
-    shouldBe("rects[4].height", "18");
-    shouldBe("rects[5].left", "8");
-    shouldBe("rects[5].top", "1631");
-    shouldBe("rects[5].width", "397");
-    shouldBe("rects[5].height", "18");
-    shouldBe("rects[6].left", "8");
-    shouldBe("rects[6].top", "1671");
-    shouldBe("rects[6].width", "360");
-    shouldBe("rects[6].height", "18");
-    shouldBe("rects[7].left", "8");
-    shouldBe("rects[7].top", "1711");
-    shouldBe("rects[7].width", "222");
-    shouldBe("rects[7].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "1511.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "386.58");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "1551.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "16.00");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "1580.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "400.00");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "40.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "1591.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "58.22");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[4].left.toFixed(2)", "106.22");
+    shouldBeEqualToString("rects[4].top.toFixed(2)", "1591.00");
+    shouldBeEqualToString("rects[4].width.toFixed(2)", "45.32");
+    shouldBeEqualToString("rects[4].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[5].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[5].top.toFixed(2)", "1631.00");
+    shouldBeEqualToString("rects[5].width.toFixed(2)", "396.34");
+    shouldBeEqualToString("rects[5].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[6].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[6].top.toFixed(2)", "1671.00");
+    shouldBeEqualToString("rects[6].width.toFixed(2)", "359.93");
+    shouldBeEqualToString("rects[6].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[7].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[7].top.toFixed(2)", "1711.00");
+    shouldBeEqualToString("rects[7].width.toFixed(2)", "221.71");
+    shouldBeEqualToString("rects[7].height.toFixed(2)", "18.00");
 
     // Test 8
     debug("Test 8");
     show(range8);
     rects = range8.getClientRects();
     shouldBe("rects.length", "4");
-    shouldBe("rects[0].left", "168");
-    shouldBe("rects[0].top", "1758");
-    shouldBe("rects[0].width", "263");
-    shouldBe("rects[0].height", "309");
-    shouldBe("rects[1].left", "137");
-    shouldBe("rects[1].top", "1784");
-    shouldBe("rects[1].width", "247");
-    shouldBe("rects[1].height", "288");
-    shouldBe("rects[2].left", "107");
-    shouldBe("rects[2].top", "1809");
-    shouldBe("rects[2].width", "260");
-    shouldBe("rects[2].height", "305");
-    shouldBe("rects[3].left", "76");
-    shouldBe("rects[3].top", "1835");
-    shouldBe("rects[3].width", "252");
-    shouldBe("rects[3].height", "295");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "168.51");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "1758.44");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "262.28");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "307.71");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "137.87");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "1784.15");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "245.14");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "287.28");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "107.23");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "1809.86");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "258.85");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "303.62");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "76.59");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "1835.57");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "250.57");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "293.75");
 
     debug("Test 9");
     var range9 = document.createRange();
     show(range9);
     rects = range9.getClientRects();
     shouldBe("rects.length", "1");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "1983");
-    shouldBe("rects[0].width", "0");
-    shouldBe("rects[0].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "1983.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "0.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "18.00");
 
     // Test 10
     debug("Test 10");
     show(range10);
     rects = range10.getClientRects();
     shouldBe("rects.length", "5");
-    shouldBe("rects[0].left", "19");
-    shouldBe("rects[0].top", "2168");
-    shouldBe("rects[0].width", "18");
-    shouldBe("rects[0].height", "375");
-    shouldBe("rects[1].left", "59");
-    shouldBe("rects[1].top", "2168");
-    shouldBe("rects[1].width", "18");
-    shouldBe("rects[1].height", "368");
-    shouldBe("rects[2].left", "99");
-    shouldBe("rects[2].top", "2168");
-    shouldBe("rects[2].width", "18");
-    shouldBe("rects[2].height", "349");
-    shouldBe("rects[3].left", "139");
-    shouldBe("rects[3].top", "2168");
-    shouldBe("rects[3].width", "18");
-    shouldBe("rects[3].height", "376");
-    shouldBe("rects[4].left", "179");
-    shouldBe("rects[4].top", "2168");
-    shouldBe("rects[4].width", "18");
-    shouldBe("rects[4].height", "68");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "19.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "2168.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "375.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "59.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "2168.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "367.03");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "99.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "2168.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "348.38");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "139.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "2168.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "375.90");
+    shouldBeEqualToString("rects[4].left.toFixed(2)", "179.00");
+    shouldBeEqualToString("rects[4].top.toFixed(2)", "2168.00");
+    shouldBeEqualToString("rects[4].width.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[4].height.toFixed(2)", "67.98");
 
     // Test 11
     debug("Test 11");
     show(range11);
     rects = range11.getClientRects();
     shouldBe("rects.length", "2");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "2604");
-    shouldBe("rects[0].width", "400");
-    shouldBe("rects[0].height", "40");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "2615");
-    shouldBe("rects[1].width", "182");
-    shouldBe("rects[1].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "2604.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "400.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "40.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "2615.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "181.75");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
 
     // Test 12
     debug("Test 12");
     show(range12);
     rects = range12.getClientRects();
     shouldBe("rects.length", "1");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "2840");
-    shouldBe("rects[0].width", "400");
-    shouldBe("rects[0].height", "160");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "2840.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "400.00");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "160.00");
 
     // Test 13
     debug("Test 13");
     show(range13);
     rects = range13.getClientRects();
     shouldBe("rects.length", "4");
-    shouldBe("rects[0].left", "8");
-    shouldBe("rects[0].top", "3047");
-    shouldBe("rects[0].width", "387");
-    shouldBe("rects[0].height", "18");
-    shouldBe("rects[1].left", "8");
-    shouldBe("rects[1].top", "3087");
-    shouldBe("rects[1].width", "360");
-    shouldBe("rects[1].height", "18");
-    shouldBe("rects[2].left", "8");
-    shouldBe("rects[2].top", "3127");
-    shouldBe("rects[2].width", "382");
-    shouldBe("rects[2].height", "18");
-    shouldBe("rects[3].left", "8");
-    shouldBe("rects[3].top", "3167");
-    shouldBe("rects[3].width", "369");
-    shouldBe("rects[3].height", "18");
+    shouldBeEqualToString("rects[0].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[0].top.toFixed(2)", "3047.00");
+    shouldBeEqualToString("rects[0].width.toFixed(2)", "386.58");
+    shouldBeEqualToString("rects[0].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[1].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[1].top.toFixed(2)", "3087.00");
+    shouldBeEqualToString("rects[1].width.toFixed(2)", "359.91");
+    shouldBeEqualToString("rects[1].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[2].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[2].top.toFixed(2)", "3127.00");
+    shouldBeEqualToString("rects[2].width.toFixed(2)", "381.25");
+    shouldBeEqualToString("rects[2].height.toFixed(2)", "18.00");
+    shouldBeEqualToString("rects[3].left.toFixed(2)", "8.00");
+    shouldBeEqualToString("rects[3].top.toFixed(2)", "3167.00");
+    shouldBeEqualToString("rects[3].width.toFixed(2)", "368.36");
+    shouldBeEqualToString("rects[3].height.toFixed(2)", "18.00");
 
     // Test 14
     debug("Test 14");
index e006a01..22ca177 100644 (file)
@@ -63,7 +63,7 @@
 
     range = document.createRange();
     range.setStart(document.getElementById('test3').firstChild, 11);
-    range.setEnd(document.getElementById('test3').lastChild, 200);
+    range.setEnd(document.getElementById('test3').lastChild, 201);
     visualizeClientRects(range);
 
     range = document.createRange();
index 90f5468..da291f8 100644 (file)
@@ -60,7 +60,7 @@
 
     range = document.createRange();
     range.setStart(document.getElementById('test3').firstChild, 11);
-    range.setEnd(document.getElementById('test3').lastChild, 200);
+    range.setEnd(document.getElementById('test3').lastChild, 201);
     visualizeClientRects(range);
 
     range = document.createRange();
index 24afb22..1cb651e 100644 (file)
@@ -16,7 +16,7 @@ visualViewportRect: 476, 526 - 392.5 x 292.5
 fixed client bounds: 12, 10 - 30 x 20
 fixed client rect: 12, 10 - 30 x 20
 absolute client bounds: 36.5, -133.5 - 50 x 25
-absolute client rect: 36, -134 - 51 x 26
+absolute client rect: 36.5, -133.5 - 50 x 25
 
 Scrolled to 100, 776
 layoutViewport: 83.5, 483.5 - 785 x 585
@@ -24,7 +24,7 @@ visualViewportRect: 100, 776 - 392.5 x 292.5
 fixed client bounds: 12, 10 - 30 x 20
 fixed client rect: 12, 10 - 30 x 20
 absolute client bounds: 36.5, -383.5 - 50 x 25
-absolute client rect: 36, -384 - 51 x 26
+absolute client rect: 36.5, -383.5 - 50 x 25
 
 Scrolled to 50, 300
 layoutViewport: 50, 300 - 785 x 585
index c8c094a..15b55f9 100644 (file)
@@ -1188,6 +1188,7 @@ fast/dom/NavigatorContentUtils/is-protocol-handler-registered.html [ Failure ]
 fast/dom/Range/getBoundingClientRect.html [ Failure ]
 fast/dom/Range/getClientRects.html [ Failure ]
 fast/dom/Range/range-expand.html [ Failure ]
+webkit.org/b/172058 fast/dom/Range/simple-line-layout-getclientrects.html [ ImageOnlyFailure ]
 fast/dom/Window/mozilla-focus-blur.html [ Failure ]
 fast/dom/Window/new-window-opener.html [ Failure ]
 fast/dom/Window/open-invalid-url.html [ Failure ]
index f3d04d4..00fef6d 100644 (file)
@@ -285,85 +285,85 @@ layer at (551,301) size 65x48
     RenderBlock {DIV} at (40,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,97) size 25x25
   RenderBlock (positioned) {DIV} at (16,97) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,72) size 26x25
+layer at (69,72) size 25x25
   RenderBlock (positioned) {DIV} at (68,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,97) size 26x25
+layer at (69,97) size 25x25
   RenderBlock (positioned) {DIV} at (68,97) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,97) size 25x25
   RenderBlock (positioned) {DIV} at (136,97) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,72) size 26x25
+layer at (189,72) size 25x25
   RenderBlock (positioned) {DIV} at (188,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,97) size 26x25
+layer at (189,97) size 25x25
   RenderBlock (positioned) {DIV} at (188,97) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,97) size 25x25
   RenderBlock (positioned) {DIV} at (256,97) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,72) size 26x25
+layer at (309,72) size 25x25
   RenderBlock (positioned) {DIV} at (308,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,97) size 26x25
+layer at (309,97) size 25x25
   RenderBlock (positioned) {DIV} at (308,97) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,72) size 26x25
+layer at (429,72) size 25x25
   RenderBlock (positioned) {DIV} at (428,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,97) size 26x25
+layer at (429,97) size 25x25
   RenderBlock (positioned) {DIV} at (428,97) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,92) size 26x25
+layer at (551,92) size 25x25
   RenderBlock (positioned) {DIV} at (550,92) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,92) size 26x25
+layer at (669,92) size 25x25
   RenderBlock (positioned) {DIV} at (668,92) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,210) size 26x25
+layer at (69,210) size 25x25
   RenderBlock (positioned) {DIV} at (68,210) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (171,180) size 25x25
   RenderBlock (positioned) {DIV} at (171,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (146,232) size 25x26
+layer at (146,233) size 25x25
   RenderBlock (positioned) {DIV} at (146,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (171,232) size 25x26
+layer at (171,233) size 25x25
   RenderBlock (positioned) {DIV} at (171,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (261,180) size 25x25
   RenderBlock (positioned) {DIV} at (261,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (236,232) size 25x26
+layer at (236,233) size 25x25
   RenderBlock (positioned) {DIV} at (236,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (261,232) size 25x26
+layer at (261,233) size 25x25
   RenderBlock (positioned) {DIV} at (261,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (351,180) size 25x25
   RenderBlock (positioned) {DIV} at (351,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (326,232) size 25x26
+layer at (326,233) size 25x25
   RenderBlock (positioned) {DIV} at (326,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (351,232) size 25x26
+layer at (351,233) size 25x25
   RenderBlock (positioned) {DIV} at (351,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (416,232) size 25x26
+layer at (416,233) size 25x25
   RenderBlock (positioned) {DIV} at (416,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (441,232) size 25x26
+layer at (441,233) size 25x25
   RenderBlock (positioned) {DIV} at (441,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (508,234) size 25x26
+layer at (508,235) size 25x25
   RenderBlock (positioned) {DIV} at (508,234) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (596,232) size 25x26
+layer at (596,233) size 25x25
   RenderBlock (positioned) {DIV} at (596,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (676,232) size 25x26
+layer at (676,233) size 25x25
   RenderBlock (positioned) {DIV} at (676,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (26,301) size 25x25
   RenderBlock (positioned) {DIV} at (26,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (51,353) size 25x26
+layer at (51,354) size 25x25
   RenderBlock (positioned) {DIV} at (51,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (26,353) size 25x26
+layer at (26,354) size 25x25
   RenderBlock (positioned) {DIV} at (26,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (116,301) size 25x25
   RenderBlock (positioned) {DIV} at (116,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (141,353) size 25x26
+layer at (141,354) size 25x25
   RenderBlock (positioned) {DIV} at (141,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (116,353) size 25x26
+layer at (116,354) size 25x25
   RenderBlock (positioned) {DIV} at (116,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (206,301) size 25x25
   RenderBlock (positioned) {DIV} at (206,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (231,353) size 25x26
+layer at (231,354) size 25x25
   RenderBlock (positioned) {DIV} at (231,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (206,353) size 25x26
+layer at (206,354) size 25x25
   RenderBlock (positioned) {DIV} at (206,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (321,353) size 25x26
+layer at (321,354) size 25x25
   RenderBlock (positioned) {DIV} at (321,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (296,353) size 25x26
+layer at (296,354) size 25x25
   RenderBlock (positioned) {DIV} at (296,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (409,355) size 25x26
+layer at (409,356) size 25x25
   RenderBlock (positioned) {DIV} at (409,355) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (501,353) size 25x26
+layer at (501,354) size 25x25
   RenderBlock (positioned) {DIV} at (501,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (601,353) size 25x26
+layer at (601,354) size 25x25
   RenderBlock (positioned) {DIV} at (601,353) size 25x26 [border: (3px solid #0000FF7F)]
index a0dcd22..e74a7f8 100644 (file)
@@ -374,85 +374,85 @@ layer at (301,460) size 75x48
     RenderBlock {DIV} at (50,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,132) size 25x25
   RenderBlock (positioned) {DIV} at (16,132) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,107) size 26x25
+layer at (69,107) size 25x25
   RenderBlock (positioned) {DIV} at (68,107) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,132) size 26x25
+layer at (69,132) size 25x25
   RenderBlock (positioned) {DIV} at (68,132) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,132) size 25x25
   RenderBlock (positioned) {DIV} at (136,132) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,107) size 26x25
+layer at (189,107) size 25x25
   RenderBlock (positioned) {DIV} at (188,107) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,132) size 26x25
+layer at (189,132) size 25x25
   RenderBlock (positioned) {DIV} at (188,132) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,132) size 25x25
   RenderBlock (positioned) {DIV} at (256,132) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,107) size 26x25
+layer at (309,107) size 25x25
   RenderBlock (positioned) {DIV} at (308,107) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,132) size 26x25
+layer at (309,132) size 25x25
   RenderBlock (positioned) {DIV} at (308,132) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,107) size 26x25
+layer at (429,107) size 25x25
   RenderBlock (positioned) {DIV} at (428,107) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,132) size 26x25
+layer at (429,132) size 25x25
   RenderBlock (positioned) {DIV} at (428,132) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,127) size 26x25
+layer at (551,127) size 25x25
   RenderBlock (positioned) {DIV} at (550,127) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,127) size 26x25
+layer at (669,127) size 25x25
   RenderBlock (positioned) {DIV} at (668,127) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (16,293) size 25x25
   RenderBlock (positioned) {DIV} at (16,293) size 25x25 [border: (3px solid #0000FF7F)]
 layer at (206,218) size 25x25
   RenderBlock (positioned) {DIV} at (206,218) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (181,270) size 25x26
+layer at (181,271) size 25x25
   RenderBlock (positioned) {DIV} at (181,270) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (206,270) size 25x26
+layer at (206,271) size 25x25
   RenderBlock (positioned) {DIV} at (206,270) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (336,218) size 25x25
   RenderBlock (positioned) {DIV} at (336,218) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (311,270) size 25x26
+layer at (311,271) size 25x25
   RenderBlock (positioned) {DIV} at (311,270) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (336,270) size 25x26
+layer at (336,271) size 25x25
   RenderBlock (positioned) {DIV} at (336,270) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (466,218) size 25x25
   RenderBlock (positioned) {DIV} at (466,218) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (441,270) size 25x26
+layer at (441,271) size 25x25
   RenderBlock (positioned) {DIV} at (441,270) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (466,270) size 25x26
+layer at (466,271) size 25x25
   RenderBlock (positioned) {DIV} at (466,270) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (571,270) size 25x26
+layer at (571,271) size 25x25
   RenderBlock (positioned) {DIV} at (571,270) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (596,270) size 25x26
+layer at (596,271) size 25x25
   RenderBlock (positioned) {DIV} at (596,270) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (703,272) size 25x26
+layer at (703,273) size 25x25
   RenderBlock (positioned) {DIV} at (703,272) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (61,391) size 25x26
+layer at (61,392) size 25x25
   RenderBlock (positioned) {DIV} at (61,391) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (231,339) size 25x25
   RenderBlock (positioned) {DIV} at (231,339) size 25x25 [border: (3px solid #0000FF7F)]
 layer at (291,339) size 25x25
   RenderBlock (positioned) {DIV} at (291,339) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (316,391) size 25x26
+layer at (316,392) size 25x25
   RenderBlock (positioned) {DIV} at (316,391) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (291,391) size 25x26
+layer at (291,392) size 25x25
   RenderBlock (positioned) {DIV} at (291,391) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (421,339) size 25x25
   RenderBlock (positioned) {DIV} at (421,339) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (446,391) size 25x26
+layer at (446,392) size 25x25
   RenderBlock (positioned) {DIV} at (446,391) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (421,391) size 25x26
+layer at (421,392) size 25x25
   RenderBlock (positioned) {DIV} at (421,391) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (551,339) size 25x25
   RenderBlock (positioned) {DIV} at (551,339) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (576,391) size 25x26
+layer at (576,392) size 25x25
   RenderBlock (positioned) {DIV} at (576,391) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (551,391) size 25x26
+layer at (551,392) size 25x25
   RenderBlock (positioned) {DIV} at (551,391) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (706,391) size 25x26
+layer at (706,392) size 25x25
   RenderBlock (positioned) {DIV} at (706,391) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (681,391) size 25x26
+layer at (681,392) size 25x25
   RenderBlock (positioned) {DIV} at (681,391) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (54,514) size 25x26
+layer at (54,515) size 25x25
   RenderBlock (positioned) {DIV} at (54,514) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (186,512) size 25x26
+layer at (186,513) size 25x25
   RenderBlock (positioned) {DIV} at (186,512) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (276,460) size 25x25
   RenderBlock (positioned) {DIV} at (276,460) size 25x25 [border: (3px solid #0000FF7F)]
index 33687c8..32d146a 100644 (file)
@@ -334,85 +334,85 @@ layer at (21,422) size 65x48
     RenderBlock {DIV} at (40,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,107) size 25x25
   RenderBlock (positioned) {DIV} at (16,107) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,82) size 26x25
+layer at (69,82) size 25x25
   RenderBlock (positioned) {DIV} at (68,82) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,107) size 26x25
+layer at (69,107) size 25x25
   RenderBlock (positioned) {DIV} at (68,107) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,107) size 25x25
   RenderBlock (positioned) {DIV} at (136,107) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,82) size 26x25
+layer at (189,82) size 25x25
   RenderBlock (positioned) {DIV} at (188,82) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,107) size 26x25
+layer at (189,107) size 25x25
   RenderBlock (positioned) {DIV} at (188,107) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,107) size 25x25
   RenderBlock (positioned) {DIV} at (256,107) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,82) size 26x25
+layer at (309,82) size 25x25
   RenderBlock (positioned) {DIV} at (308,82) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,107) size 26x25
+layer at (309,107) size 25x25
   RenderBlock (positioned) {DIV} at (308,107) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,82) size 26x25
+layer at (429,82) size 25x25
   RenderBlock (positioned) {DIV} at (428,82) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,107) size 26x25
+layer at (429,107) size 25x25
   RenderBlock (positioned) {DIV} at (428,107) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,102) size 26x25
+layer at (551,102) size 25x25
   RenderBlock (positioned) {DIV} at (550,102) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,102) size 26x25
+layer at (669,102) size 25x25
   RenderBlock (positioned) {DIV} at (668,102) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,210) size 26x25
+layer at (69,210) size 25x25
   RenderBlock (positioned) {DIV} at (68,210) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (181,180) size 25x25
   RenderBlock (positioned) {DIV} at (181,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (156,232) size 25x26
+layer at (156,233) size 25x25
   RenderBlock (positioned) {DIV} at (156,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (181,232) size 25x26
+layer at (181,233) size 25x25
   RenderBlock (positioned) {DIV} at (181,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (281,180) size 25x25
   RenderBlock (positioned) {DIV} at (281,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (256,232) size 25x26
+layer at (256,233) size 25x25
   RenderBlock (positioned) {DIV} at (256,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (281,232) size 25x26
+layer at (281,233) size 25x25
   RenderBlock (positioned) {DIV} at (281,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (381,180) size 25x25
   RenderBlock (positioned) {DIV} at (381,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (356,232) size 25x26
+layer at (356,233) size 25x25
   RenderBlock (positioned) {DIV} at (356,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (381,232) size 25x26
+layer at (381,233) size 25x25
   RenderBlock (positioned) {DIV} at (381,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (456,232) size 25x26
+layer at (456,233) size 25x25
   RenderBlock (positioned) {DIV} at (456,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (481,232) size 25x26
+layer at (481,233) size 25x25
   RenderBlock (positioned) {DIV} at (481,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (558,234) size 25x26
+layer at (558,235) size 25x25
   RenderBlock (positioned) {DIV} at (558,234) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (656,232) size 25x26
+layer at (656,233) size 25x25
   RenderBlock (positioned) {DIV} at (656,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (26,353) size 25x26
+layer at (26,354) size 25x25
   RenderBlock (positioned) {DIV} at (26,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (126,301) size 25x25
   RenderBlock (positioned) {DIV} at (126,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (151,353) size 25x26
+layer at (151,354) size 25x25
   RenderBlock (positioned) {DIV} at (151,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (126,353) size 25x26
+layer at (126,354) size 25x25
   RenderBlock (positioned) {DIV} at (126,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (226,301) size 25x25
   RenderBlock (positioned) {DIV} at (226,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (251,353) size 25x26
+layer at (251,354) size 25x25
   RenderBlock (positioned) {DIV} at (251,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (226,353) size 25x26
+layer at (226,354) size 25x25
   RenderBlock (positioned) {DIV} at (226,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (326,301) size 25x25
   RenderBlock (positioned) {DIV} at (326,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (351,353) size 25x26
+layer at (351,354) size 25x25
   RenderBlock (positioned) {DIV} at (351,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (326,353) size 25x26
+layer at (326,354) size 25x25
   RenderBlock (positioned) {DIV} at (326,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (451,353) size 25x26
+layer at (451,354) size 25x25
   RenderBlock (positioned) {DIV} at (451,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (426,353) size 25x26
+layer at (426,354) size 25x25
   RenderBlock (positioned) {DIV} at (426,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (549,355) size 25x26
+layer at (549,356) size 25x25
   RenderBlock (positioned) {DIV} at (549,355) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (651,353) size 25x26
+layer at (651,354) size 25x25
   RenderBlock (positioned) {DIV} at (651,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (61,474) size 25x26
+layer at (61,475) size 25x25
   RenderBlock (positioned) {DIV} at (61,474) size 25x26 [border: (3px solid #0000FF7F)]
index f3d04d4..00fef6d 100644 (file)
@@ -285,85 +285,85 @@ layer at (551,301) size 65x48
     RenderBlock {DIV} at (40,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,97) size 25x25
   RenderBlock (positioned) {DIV} at (16,97) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,72) size 26x25
+layer at (69,72) size 25x25
   RenderBlock (positioned) {DIV} at (68,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,97) size 26x25
+layer at (69,97) size 25x25
   RenderBlock (positioned) {DIV} at (68,97) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,97) size 25x25
   RenderBlock (positioned) {DIV} at (136,97) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,72) size 26x25
+layer at (189,72) size 25x25
   RenderBlock (positioned) {DIV} at (188,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,97) size 26x25
+layer at (189,97) size 25x25
   RenderBlock (positioned) {DIV} at (188,97) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,97) size 25x25
   RenderBlock (positioned) {DIV} at (256,97) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,72) size 26x25
+layer at (309,72) size 25x25
   RenderBlock (positioned) {DIV} at (308,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,97) size 26x25
+layer at (309,97) size 25x25
   RenderBlock (positioned) {DIV} at (308,97) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,72) size 26x25
+layer at (429,72) size 25x25
   RenderBlock (positioned) {DIV} at (428,72) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,97) size 26x25
+layer at (429,97) size 25x25
   RenderBlock (positioned) {DIV} at (428,97) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,92) size 26x25
+layer at (551,92) size 25x25
   RenderBlock (positioned) {DIV} at (550,92) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,92) size 26x25
+layer at (669,92) size 25x25
   RenderBlock (positioned) {DIV} at (668,92) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,210) size 26x25
+layer at (69,210) size 25x25
   RenderBlock (positioned) {DIV} at (68,210) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (171,180) size 25x25
   RenderBlock (positioned) {DIV} at (171,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (146,232) size 25x26
+layer at (146,233) size 25x25
   RenderBlock (positioned) {DIV} at (146,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (171,232) size 25x26
+layer at (171,233) size 25x25
   RenderBlock (positioned) {DIV} at (171,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (261,180) size 25x25
   RenderBlock (positioned) {DIV} at (261,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (236,232) size 25x26
+layer at (236,233) size 25x25
   RenderBlock (positioned) {DIV} at (236,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (261,232) size 25x26
+layer at (261,233) size 25x25
   RenderBlock (positioned) {DIV} at (261,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (351,180) size 25x25
   RenderBlock (positioned) {DIV} at (351,180) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (326,232) size 25x26
+layer at (326,233) size 25x25
   RenderBlock (positioned) {DIV} at (326,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (351,232) size 25x26
+layer at (351,233) size 25x25
   RenderBlock (positioned) {DIV} at (351,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (416,232) size 25x26
+layer at (416,233) size 25x25
   RenderBlock (positioned) {DIV} at (416,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (441,232) size 25x26
+layer at (441,233) size 25x25
   RenderBlock (positioned) {DIV} at (441,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (508,234) size 25x26
+layer at (508,235) size 25x25
   RenderBlock (positioned) {DIV} at (508,234) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (596,232) size 25x26
+layer at (596,233) size 25x25
   RenderBlock (positioned) {DIV} at (596,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (676,232) size 25x26
+layer at (676,233) size 25x25
   RenderBlock (positioned) {DIV} at (676,232) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (26,301) size 25x25
   RenderBlock (positioned) {DIV} at (26,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (51,353) size 25x26
+layer at (51,354) size 25x25
   RenderBlock (positioned) {DIV} at (51,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (26,353) size 25x26
+layer at (26,354) size 25x25
   RenderBlock (positioned) {DIV} at (26,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (116,301) size 25x25
   RenderBlock (positioned) {DIV} at (116,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (141,353) size 25x26
+layer at (141,354) size 25x25
   RenderBlock (positioned) {DIV} at (141,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (116,353) size 25x26
+layer at (116,354) size 25x25
   RenderBlock (positioned) {DIV} at (116,353) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (206,301) size 25x25
   RenderBlock (positioned) {DIV} at (206,301) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (231,353) size 25x26
+layer at (231,354) size 25x25
   RenderBlock (positioned) {DIV} at (231,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (206,353) size 25x26
+layer at (206,354) size 25x25
   RenderBlock (positioned) {DIV} at (206,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (321,353) size 25x26
+layer at (321,354) size 25x25
   RenderBlock (positioned) {DIV} at (321,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (296,353) size 25x26
+layer at (296,354) size 25x25
   RenderBlock (positioned) {DIV} at (296,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (409,355) size 25x26
+layer at (409,356) size 25x25
   RenderBlock (positioned) {DIV} at (409,355) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (501,353) size 25x26
+layer at (501,354) size 25x25
   RenderBlock (positioned) {DIV} at (501,353) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (601,353) size 25x26
+layer at (601,354) size 25x25
   RenderBlock (positioned) {DIV} at (601,353) size 25x26 [border: (3px solid #0000FF7F)]
index e7d1b0c..1b786a0 100644 (file)
@@ -36,8 +36,8 @@ layer at (9,198) size 33x18
           text run at (0,0) width 34: "PASS"
 layer at (270,90) size 90x90
   RenderBlock (positioned) {DIV} at (270,90) size 90x90 [bgcolor=#FF0000]
-layer at (270,90) size 91x91
-  RenderBlock (positioned) {DIV} at (270,90) size 91x91 [bgcolor=#008000]
+layer at (270,90) size 90x90
+  RenderBlock (positioned) {DIV} at (270,90) size 90x90 [bgcolor=#008000]
 layer at (198,198) size 33x18
   RenderBlock (positioned) {DIV} at (198,198) size 34x18
     RenderInline {SPAN} at (0,0) size 34x17 [color=#008000]
index 9c911d0..adf0c81 100644 (file)
@@ -285,85 +285,85 @@ layer at (551,298) size 65x48
     RenderBlock {DIV} at (40,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,96) size 25x25
   RenderBlock (positioned) {DIV} at (16,96) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,71) size 26x25
+layer at (69,71) size 25x25
   RenderBlock (positioned) {DIV} at (68,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,96) size 26x25
+layer at (69,96) size 25x25
   RenderBlock (positioned) {DIV} at (68,96) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,96) size 25x25
   RenderBlock (positioned) {DIV} at (136,96) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,71) size 26x25
+layer at (189,71) size 25x25
   RenderBlock (positioned) {DIV} at (188,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,96) size 26x25
+layer at (189,96) size 25x25
   RenderBlock (positioned) {DIV} at (188,96) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,96) size 25x25
   RenderBlock (positioned) {DIV} at (256,96) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,71) size 26x25
+layer at (309,71) size 25x25
   RenderBlock (positioned) {DIV} at (308,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,96) size 26x25
+layer at (309,96) size 25x25
   RenderBlock (positioned) {DIV} at (308,96) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,71) size 26x25
+layer at (429,71) size 25x25
   RenderBlock (positioned) {DIV} at (428,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,96) size 26x25
+layer at (429,96) size 25x25
   RenderBlock (positioned) {DIV} at (428,96) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,91) size 26x25
+layer at (551,91) size 25x25
   RenderBlock (positioned) {DIV} at (550,91) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,91) size 26x25
+layer at (669,91) size 25x25
   RenderBlock (positioned) {DIV} at (668,91) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,208) size 26x25
+layer at (69,208) size 25x25
   RenderBlock (positioned) {DIV} at (68,208) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (171,178) size 25x25
   RenderBlock (positioned) {DIV} at (171,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (146,230) size 25x26
+layer at (146,231) size 25x25
   RenderBlock (positioned) {DIV} at (146,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (171,230) size 25x26
+layer at (171,231) size 25x25
   RenderBlock (positioned) {DIV} at (171,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (261,178) size 25x25
   RenderBlock (positioned) {DIV} at (261,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (236,230) size 25x26
+layer at (236,231) size 25x25
   RenderBlock (positioned) {DIV} at (236,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (261,230) size 25x26
+layer at (261,231) size 25x25
   RenderBlock (positioned) {DIV} at (261,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (351,178) size 25x25
   RenderBlock (positioned) {DIV} at (351,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (326,230) size 25x26
+layer at (326,231) size 25x25
   RenderBlock (positioned) {DIV} at (326,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (351,230) size 25x26
+layer at (351,231) size 25x25
   RenderBlock (positioned) {DIV} at (351,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (416,230) size 25x26
+layer at (416,231) size 25x25
   RenderBlock (positioned) {DIV} at (416,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (441,230) size 25x26
+layer at (441,231) size 25x25
   RenderBlock (positioned) {DIV} at (441,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (508,232) size 25x26
+layer at (508,233) size 25x25
   RenderBlock (positioned) {DIV} at (508,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (596,230) size 25x26
+layer at (596,231) size 25x25
   RenderBlock (positioned) {DIV} at (596,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (676,230) size 25x26
+layer at (676,231) size 25x25
   RenderBlock (positioned) {DIV} at (676,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (26,298) size 25x25
   RenderBlock (positioned) {DIV} at (26,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (51,350) size 25x26
+layer at (51,351) size 25x25
   RenderBlock (positioned) {DIV} at (51,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (26,350) size 25x26
+layer at (26,351) size 25x25
   RenderBlock (positioned) {DIV} at (26,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (116,298) size 25x25
   RenderBlock (positioned) {DIV} at (116,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (141,350) size 25x26
+layer at (141,351) size 25x25
   RenderBlock (positioned) {DIV} at (141,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (116,350) size 25x26
+layer at (116,351) size 25x25
   RenderBlock (positioned) {DIV} at (116,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (206,298) size 25x25
   RenderBlock (positioned) {DIV} at (206,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (231,350) size 25x26
+layer at (231,351) size 25x25
   RenderBlock (positioned) {DIV} at (231,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (206,350) size 25x26
+layer at (206,351) size 25x25
   RenderBlock (positioned) {DIV} at (206,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (321,350) size 25x26
+layer at (321,351) size 25x25
   RenderBlock (positioned) {DIV} at (321,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (296,350) size 25x26
+layer at (296,351) size 25x25
   RenderBlock (positioned) {DIV} at (296,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (409,352) size 25x26
+layer at (409,353) size 25x25
   RenderBlock (positioned) {DIV} at (409,352) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (501,350) size 25x26
+layer at (501,351) size 25x25
   RenderBlock (positioned) {DIV} at (501,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (601,350) size 25x26
+layer at (601,351) size 25x25
   RenderBlock (positioned) {DIV} at (601,350) size 25x26 [border: (3px solid #0000FF7F)]
index f354d04..810276c 100644 (file)
@@ -374,85 +374,85 @@ layer at (301,457) size 75x48
     RenderBlock {DIV} at (50,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,131) size 25x25
   RenderBlock (positioned) {DIV} at (16,131) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,106) size 26x25
+layer at (69,106) size 25x25
   RenderBlock (positioned) {DIV} at (68,106) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,131) size 26x25
+layer at (69,131) size 25x25
   RenderBlock (positioned) {DIV} at (68,131) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,131) size 25x25
   RenderBlock (positioned) {DIV} at (136,131) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,106) size 26x25
+layer at (189,106) size 25x25
   RenderBlock (positioned) {DIV} at (188,106) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,131) size 26x25
+layer at (189,131) size 25x25
   RenderBlock (positioned) {DIV} at (188,131) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,131) size 25x25
   RenderBlock (positioned) {DIV} at (256,131) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,106) size 26x25
+layer at (309,106) size 25x25
   RenderBlock (positioned) {DIV} at (308,106) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,131) size 26x25
+layer at (309,131) size 25x25
   RenderBlock (positioned) {DIV} at (308,131) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,106) size 26x25
+layer at (429,106) size 25x25
   RenderBlock (positioned) {DIV} at (428,106) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,131) size 26x25
+layer at (429,131) size 25x25
   RenderBlock (positioned) {DIV} at (428,131) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,126) size 26x25
+layer at (551,126) size 25x25
   RenderBlock (positioned) {DIV} at (550,126) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,126) size 26x25
+layer at (669,126) size 25x25
   RenderBlock (positioned) {DIV} at (668,126) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (16,292) size 25x25
   RenderBlock (positioned) {DIV} at (16,292) size 25x25 [border: (3px solid #0000FF7F)]
 layer at (206,217) size 25x25
   RenderBlock (positioned) {DIV} at (206,217) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (181,269) size 25x26
+layer at (181,270) size 25x25
   RenderBlock (positioned) {DIV} at (181,269) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (206,269) size 25x26
+layer at (206,270) size 25x25
   RenderBlock (positioned) {DIV} at (206,269) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (336,217) size 25x25
   RenderBlock (positioned) {DIV} at (336,217) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (311,269) size 25x26
+layer at (311,270) size 25x25
   RenderBlock (positioned) {DIV} at (311,269) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (336,269) size 25x26
+layer at (336,270) size 25x25
   RenderBlock (positioned) {DIV} at (336,269) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (466,217) size 25x25
   RenderBlock (positioned) {DIV} at (466,217) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (441,269) size 25x26
+layer at (441,270) size 25x25
   RenderBlock (positioned) {DIV} at (441,269) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (466,269) size 25x26
+layer at (466,270) size 25x25
   RenderBlock (positioned) {DIV} at (466,269) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (571,269) size 25x26
+layer at (571,270) size 25x25
   RenderBlock (positioned) {DIV} at (571,269) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (596,269) size 25x26
+layer at (596,270) size 25x25
   RenderBlock (positioned) {DIV} at (596,269) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (703,271) size 25x26
+layer at (703,272) size 25x25
   RenderBlock (positioned) {DIV} at (703,271) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (61,389) size 25x26
+layer at (61,390) size 25x25
   RenderBlock (positioned) {DIV} at (61,389) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (231,337) size 25x25
   RenderBlock (positioned) {DIV} at (231,337) size 25x25 [border: (3px solid #0000FF7F)]
 layer at (291,337) size 25x25
   RenderBlock (positioned) {DIV} at (291,337) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (316,389) size 25x26
+layer at (316,390) size 25x25
   RenderBlock (positioned) {DIV} at (316,389) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (291,389) size 25x26
+layer at (291,390) size 25x25
   RenderBlock (positioned) {DIV} at (291,389) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (421,337) size 25x25
   RenderBlock (positioned) {DIV} at (421,337) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (446,389) size 25x26
+layer at (446,390) size 25x25
   RenderBlock (positioned) {DIV} at (446,389) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (421,389) size 25x26
+layer at (421,390) size 25x25
   RenderBlock (positioned) {DIV} at (421,389) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (551,337) size 25x25
   RenderBlock (positioned) {DIV} at (551,337) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (576,389) size 25x26
+layer at (576,390) size 25x25
   RenderBlock (positioned) {DIV} at (576,389) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (551,389) size 25x26
+layer at (551,390) size 25x25
   RenderBlock (positioned) {DIV} at (551,389) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (706,389) size 25x26
+layer at (706,390) size 25x25
   RenderBlock (positioned) {DIV} at (706,389) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (681,389) size 25x26
+layer at (681,390) size 25x25
   RenderBlock (positioned) {DIV} at (681,389) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (54,511) size 25x26
+layer at (54,512) size 25x25
   RenderBlock (positioned) {DIV} at (54,511) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (186,509) size 25x26
+layer at (186,510) size 25x25
   RenderBlock (positioned) {DIV} at (186,509) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (276,457) size 25x25
   RenderBlock (positioned) {DIV} at (276,457) size 25x25 [border: (3px solid #0000FF7F)]
index 37d1889..4adc8b8 100644 (file)
@@ -334,85 +334,85 @@ layer at (21,418) size 65x48
     RenderBlock {DIV} at (40,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,106) size 25x25
   RenderBlock (positioned) {DIV} at (16,106) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,81) size 26x25
+layer at (69,81) size 25x25
   RenderBlock (positioned) {DIV} at (68,81) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,106) size 26x25
+layer at (69,106) size 25x25
   RenderBlock (positioned) {DIV} at (68,106) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,106) size 25x25
   RenderBlock (positioned) {DIV} at (136,106) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,81) size 26x25
+layer at (189,81) size 25x25
   RenderBlock (positioned) {DIV} at (188,81) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,106) size 26x25
+layer at (189,106) size 25x25
   RenderBlock (positioned) {DIV} at (188,106) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,106) size 25x25
   RenderBlock (positioned) {DIV} at (256,106) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,81) size 26x25
+layer at (309,81) size 25x25
   RenderBlock (positioned) {DIV} at (308,81) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,106) size 26x25
+layer at (309,106) size 25x25
   RenderBlock (positioned) {DIV} at (308,106) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,81) size 26x25
+layer at (429,81) size 25x25
   RenderBlock (positioned) {DIV} at (428,81) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,106) size 26x25
+layer at (429,106) size 25x25
   RenderBlock (positioned) {DIV} at (428,106) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,101) size 26x25
+layer at (551,101) size 25x25
   RenderBlock (positioned) {DIV} at (550,101) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,101) size 26x25
+layer at (669,101) size 25x25
   RenderBlock (positioned) {DIV} at (668,101) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,208) size 26x25
+layer at (69,208) size 25x25
   RenderBlock (positioned) {DIV} at (68,208) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (181,178) size 25x25
   RenderBlock (positioned) {DIV} at (181,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (156,230) size 25x26
+layer at (156,231) size 25x25
   RenderBlock (positioned) {DIV} at (156,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (181,230) size 25x26
+layer at (181,231) size 25x25
   RenderBlock (positioned) {DIV} at (181,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (281,178) size 25x25
   RenderBlock (positioned) {DIV} at (281,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (256,230) size 25x26
+layer at (256,231) size 25x25
   RenderBlock (positioned) {DIV} at (256,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (281,230) size 25x26
+layer at (281,231) size 25x25
   RenderBlock (positioned) {DIV} at (281,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (381,178) size 25x25
   RenderBlock (positioned) {DIV} at (381,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (356,230) size 25x26
+layer at (356,231) size 25x25
   RenderBlock (positioned) {DIV} at (356,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (381,230) size 25x26
+layer at (381,231) size 25x25
   RenderBlock (positioned) {DIV} at (381,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (456,230) size 25x26
+layer at (456,231) size 25x25
   RenderBlock (positioned) {DIV} at (456,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (481,230) size 25x26
+layer at (481,231) size 25x25
   RenderBlock (positioned) {DIV} at (481,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (558,232) size 25x26
+layer at (558,233) size 25x25
   RenderBlock (positioned) {DIV} at (558,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (656,230) size 25x26
+layer at (656,231) size 25x25
   RenderBlock (positioned) {DIV} at (656,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (26,350) size 25x26
+layer at (26,351) size 25x25
   RenderBlock (positioned) {DIV} at (26,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (126,298) size 25x25
   RenderBlock (positioned) {DIV} at (126,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (151,350) size 25x26
+layer at (151,351) size 25x25
   RenderBlock (positioned) {DIV} at (151,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (126,350) size 25x26
+layer at (126,351) size 25x25
   RenderBlock (positioned) {DIV} at (126,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (226,298) size 25x25
   RenderBlock (positioned) {DIV} at (226,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (251,350) size 25x26
+layer at (251,351) size 25x25
   RenderBlock (positioned) {DIV} at (251,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (226,350) size 25x26
+layer at (226,351) size 25x25
   RenderBlock (positioned) {DIV} at (226,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (326,298) size 25x25
   RenderBlock (positioned) {DIV} at (326,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (351,350) size 25x26
+layer at (351,351) size 25x25
   RenderBlock (positioned) {DIV} at (351,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (326,350) size 25x26
+layer at (326,351) size 25x25
   RenderBlock (positioned) {DIV} at (326,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (451,350) size 25x26
+layer at (451,351) size 25x25
   RenderBlock (positioned) {DIV} at (451,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (426,350) size 25x26
+layer at (426,351) size 25x25
   RenderBlock (positioned) {DIV} at (426,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (549,352) size 25x26
+layer at (549,353) size 25x25
   RenderBlock (positioned) {DIV} at (549,352) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (651,350) size 25x26
+layer at (651,351) size 25x25
   RenderBlock (positioned) {DIV} at (651,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (61,470) size 25x26
+layer at (61,471) size 25x25
   RenderBlock (positioned) {DIV} at (61,470) size 25x26 [border: (3px solid #0000FF7F)]
index 9c911d0..adf0c81 100644 (file)
@@ -285,85 +285,85 @@ layer at (551,298) size 65x48
     RenderBlock {DIV} at (40,0) size 25x25 [bgcolor=#ADD8E6]
 layer at (16,96) size 25x25
   RenderBlock (positioned) {DIV} at (16,96) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (68,71) size 26x25
+layer at (69,71) size 25x25
   RenderBlock (positioned) {DIV} at (68,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,96) size 26x25
+layer at (69,96) size 25x25
   RenderBlock (positioned) {DIV} at (68,96) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (136,96) size 25x25
   RenderBlock (positioned) {DIV} at (136,96) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (188,71) size 26x25
+layer at (189,71) size 25x25
   RenderBlock (positioned) {DIV} at (188,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (188,96) size 26x25
+layer at (189,96) size 25x25
   RenderBlock (positioned) {DIV} at (188,96) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (256,96) size 25x25
   RenderBlock (positioned) {DIV} at (256,96) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (308,71) size 26x25
+layer at (309,71) size 25x25
   RenderBlock (positioned) {DIV} at (308,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (308,96) size 26x25
+layer at (309,96) size 25x25
   RenderBlock (positioned) {DIV} at (308,96) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,71) size 26x25
+layer at (429,71) size 25x25
   RenderBlock (positioned) {DIV} at (428,71) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (428,96) size 26x25
+layer at (429,96) size 25x25
   RenderBlock (positioned) {DIV} at (428,96) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (550,91) size 26x25
+layer at (551,91) size 25x25
   RenderBlock (positioned) {DIV} at (550,91) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (668,91) size 26x25
+layer at (669,91) size 25x25
   RenderBlock (positioned) {DIV} at (668,91) size 26x25 [border: (3px solid #0000FF7F)]
-layer at (68,208) size 26x25
+layer at (69,208) size 25x25
   RenderBlock (positioned) {DIV} at (68,208) size 26x25 [border: (3px solid #0000FF7F)]
 layer at (171,178) size 25x25
   RenderBlock (positioned) {DIV} at (171,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (146,230) size 25x26
+layer at (146,231) size 25x25
   RenderBlock (positioned) {DIV} at (146,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (171,230) size 25x26
+layer at (171,231) size 25x25
   RenderBlock (positioned) {DIV} at (171,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (261,178) size 25x25
   RenderBlock (positioned) {DIV} at (261,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (236,230) size 25x26
+layer at (236,231) size 25x25
   RenderBlock (positioned) {DIV} at (236,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (261,230) size 25x26
+layer at (261,231) size 25x25
   RenderBlock (positioned) {DIV} at (261,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (351,178) size 25x25
   RenderBlock (positioned) {DIV} at (351,178) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (326,230) size 25x26
+layer at (326,231) size 25x25
   RenderBlock (positioned) {DIV} at (326,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (351,230) size 25x26
+layer at (351,231) size 25x25
   RenderBlock (positioned) {DIV} at (351,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (416,230) size 25x26
+layer at (416,231) size 25x25
   RenderBlock (positioned) {DIV} at (416,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (441,230) size 25x26
+layer at (441,231) size 25x25
   RenderBlock (positioned) {DIV} at (441,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (508,232) size 25x26
+layer at (508,233) size 25x25
   RenderBlock (positioned) {DIV} at (508,232) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (596,230) size 25x26
+layer at (596,231) size 25x25
   RenderBlock (positioned) {DIV} at (596,230) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (676,230) size 25x26
+layer at (676,231) size 25x25
   RenderBlock (positioned) {DIV} at (676,230) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (26,298) size 25x25
   RenderBlock (positioned) {DIV} at (26,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (51,350) size 25x26
+layer at (51,351) size 25x25
   RenderBlock (positioned) {DIV} at (51,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (26,350) size 25x26
+layer at (26,351) size 25x25
   RenderBlock (positioned) {DIV} at (26,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (116,298) size 25x25
   RenderBlock (positioned) {DIV} at (116,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (141,350) size 25x26
+layer at (141,351) size 25x25
   RenderBlock (positioned) {DIV} at (141,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (116,350) size 25x26
+layer at (116,351) size 25x25
   RenderBlock (positioned) {DIV} at (116,350) size 25x26 [border: (3px solid #0000FF7F)]
 layer at (206,298) size 25x25
   RenderBlock (positioned) {DIV} at (206,298) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (231,350) size 25x26
+layer at (231,351) size 25x25
   RenderBlock (positioned) {DIV} at (231,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (206,350) size 25x26
+layer at (206,351) size 25x25
   RenderBlock (positioned) {DIV} at (206,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (321,350) size 25x26
+layer at (321,351) size 25x25
   RenderBlock (positioned) {DIV} at (321,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (296,350) size 25x26
+layer at (296,351) size 25x25
   RenderBlock (positioned) {DIV} at (296,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (409,352) size 25x26
+layer at (409,353) size 25x25
   RenderBlock (positioned) {DIV} at (409,352) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (501,350) size 25x26
+layer at (501,351) size 25x25
   RenderBlock (positioned) {DIV} at (501,350) size 25x26 [border: (3px solid #0000FF7F)]
-layer at (601,350) size 25x26
+layer at (601,351) size 25x25
   RenderBlock (positioned) {DIV} at (601,350) size 25x26 [border: (3px solid #0000FF7F)]
index 5d8d4ab..9e52caf 100644 (file)
@@ -36,8 +36,8 @@ layer at (9,198) size 33x17
           text run at (0,0) width 34: "PASS"
 layer at (270,90) size 90x90
   RenderBlock (positioned) {DIV} at (270,90) size 90x90 [bgcolor=#FF0000]
-layer at (270,90) size 91x91
-  RenderBlock (positioned) {DIV} at (270,90) size 91x91 [bgcolor=#008000]
+layer at (270,90) size 90x90
+  RenderBlock (positioned) {DIV} at (270,90) size 90x90 [bgcolor=#008000]
 layer at (198,198) size 33x17
   RenderBlock (positioned) {DIV} at (198,198) size 34x17
     RenderInline {SPAN} at (0,0) size 34x17 [color=#008000]
index 0047da3..787863c 100644 (file)
@@ -1,3 +1,18 @@
+2017-05-12  Simon Fraser  <simon.fraser@apple.com>
+
+        The rects returned by Element/Range.getClientRects() should not be rounded
+        https://bugs.webkit.org/show_bug.cgi?id=172057
+
+        Reviewed by Chris Dumez.
+
+        Fix createDOMRectVector() to not expand the rects to integer boundaries (which
+        quad.enclosingBoundingBox() does), but to return rects with floating point
+        values. This matches Chrome and Firefox, and matches getBoundingClientRect(),
+        which does not integral snap.
+
+        * dom/DOMRect.cpp:
+        (WebCore::createDOMRectVector):
+
 2017-05-12  Jiewen Tan  <jiewen_tan@apple.com>
 
         Elements should be inserted into a template element as its content's last child
index 5bf2c5f..c396e62 100644 (file)
@@ -35,7 +35,7 @@ Vector<Ref<DOMRect>> createDOMRectVector(const Vector<FloatQuad>& quads)
     Vector<Ref<DOMRect>> result;
     result.reserveInitialCapacity(quads.size());
     for (auto& quad : quads)
-        result.uncheckedAppend(DOMRect::create(quad.enclosingBoundingBox()));
+        result.uncheckedAppend(DOMRect::create(quad.boundingBox()));
     return result;
 }