Changeset 119690 in webkit
- Timestamp:
- Jun 6, 2012 11:57:19 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r119677 r119690 1 2012-06-06 Xianzhu Wang <wangxianzhu@chromium.org> 2 3 Element.getBoundingClientRect() and Element.getClientRects() return incorrect values in frames in a scaled page 4 https://bugs.webkit.org/show_bug.cgi?id=88430 5 6 Reviewed by James Robinson. 7 8 * fast/dom/Element/resources/client-rect-frame.html: Added. 9 * fast/dom/Element/scale-page-bounding-client-rect-in-frame-expected.txt: Added. 10 * fast/dom/Element/scale-page-bounding-client-rect-in-frame.html: Added. 11 * fast/dom/Element/scale-page-client-rects-in-frame-expected.txt: Added. 12 * fast/dom/Element/scale-page-client-rects-in-frame.html: Added. 13 1 14 2012-06-06 Sheriff Bot <webkit.review.bot@gmail.com> 2 15 -
trunk/Source/WebCore/ChangeLog
r119689 r119690 1 2012-06-06 Xianzhu Wang <wangxianzhu@chromium.org> 2 3 Element.getBoundingClientRect() and Element.getClientRects() return incorrect values in frames in a scaled page 4 https://bugs.webkit.org/show_bug.cgi?id=88430 5 6 Element.getBoudingClientRect() and Element.getClientRects() should not scale back the rects 7 if the element is in a frame because page scale only apply to elements in the main frame. 8 9 Reviewed by James Robinson. 10 11 Tests: fast/dom/Element/scale-page-bounding-client-rect-in-frame.html 12 fast/dom/Element/scale-page-client-rects-in-frame.html 13 14 * dom/Document.cpp: 15 (WebCore): 16 (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale): Extracted from Element.cpp and Range.cpp and fixed issue of pageScale in frames. 17 (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale): Extracted from Element.cpp and fixed issue of pageScale in frames. 18 * dom/Document.h: 19 (WebCore): 20 (Document): 21 * dom/Element.cpp: 22 (WebCore::Element::getClientRects): 23 (WebCore::Element::getBoundingClientRect): 24 * dom/Range.cpp: 25 (WebCore): 26 (WebCore::adjustFloatQuadsForScrollAndAbsoluteZoomAndPageScale): Moved into Document and fixed issue of pageScale in frames. 27 (WebCore::Range::getBorderAndTextQuads): 28 * rendering/RenderObject.h: Removed adjustFloatQuadForPageScale and adjustFloatRectForPageScale because they seem unrelated to RenderObject. 29 (WebCore): 30 1 31 2012-06-06 Dana Jansens <danakj@chromium.org> 2 32 -
trunk/Source/WebCore/dom/Document.cpp
r119452 r119690 6039 6039 } 6040 6040 6041 void Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale(Vector<FloatQuad>& quads, RenderObject* renderer) 6042 { 6043 if (!view()) 6044 return; 6045 6046 float inverseFrameScale = 1; 6047 if (frame()) 6048 inverseFrameScale = 1 / frame()->frameScaleFactor(); 6049 6050 LayoutRect visibleContentRect = view()->visibleContentRect(); 6051 for (size_t i = 0; i < quads.size(); ++i) { 6052 quads[i].move(-visibleContentRect.x(), -visibleContentRect.y()); 6053 adjustFloatQuadForAbsoluteZoom(quads[i], renderer); 6054 if (inverseFrameScale != 1) 6055 quads[i].scale(inverseFrameScale, inverseFrameScale); 6056 } 6057 } 6058 6059 void Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale(FloatRect& rect, RenderObject* renderer) 6060 { 6061 if (!view()) 6062 return; 6063 6064 float inverseFrameScale = 1; 6065 if (frame()) 6066 inverseFrameScale = 1 / frame()->frameScaleFactor(); 6067 6068 LayoutRect visibleContentRect = view()->visibleContentRect(); 6069 rect.move(-visibleContentRect.x(), -visibleContentRect.y()); 6070 adjustFloatRectForAbsoluteZoom(rect, renderer); 6071 if (inverseFrameScale != 1) 6072 rect.scale(inverseFrameScale); 6073 } 6074 6041 6075 } // namespace WebCore -
trunk/Source/WebCore/dom/Document.h
r119473 r119690 84 84 class Event; 85 85 class EventListener; 86 class FloatRect; 87 class FloatQuad; 86 88 class FontData; 87 89 class FormAssociatedElement; … … 1161 1163 #endif 1162 1164 1165 void adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale(Vector<FloatQuad>&, RenderObject*); 1166 void adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale(FloatRect&, RenderObject*); 1167 1163 1168 protected: 1164 1169 Document(Frame*, const KURL&, bool isXHTML, bool isHTML); -
trunk/Source/WebCore/dom/Element.cpp
r119426 r119690 558 558 Vector<FloatQuad> quads; 559 559 renderBoxModelObject->absoluteQuads(quads); 560 561 float pageScale = 1; 562 if (Page* page = document()->page()) 563 pageScale = page->pageScaleFactor(); 564 565 if (FrameView* view = document()->view()) { 566 LayoutRect visibleContentRect = view->visibleContentRect(); 567 for (size_t i = 0; i < quads.size(); ++i) { 568 quads[i].move(-visibleContentRect.x(), -visibleContentRect.y()); 569 adjustFloatQuadForAbsoluteZoom(quads[i], renderBoxModelObject); 570 if (pageScale != 1) 571 adjustFloatQuadForPageScale(quads[i], pageScale); 572 } 573 } 574 560 document()->adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale(quads, renderBoxModelObject); 575 561 return ClientRectList::create(quads); 576 562 } … … 603 589 result.unite(quads[i].boundingBox()); 604 590 605 if (FrameView* view = document()->view()) { 606 LayoutRect visibleContentRect = view->visibleContentRect(); 607 result.move(-visibleContentRect.x(), -visibleContentRect.y()); 608 } 609 610 adjustFloatRectForAbsoluteZoom(result, renderer()); 611 if (Page* page = document()->page()) 612 adjustFloatRectForPageScale(result, page->pageScaleFactor()); 613 591 document()->adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale(result, renderer()); 614 592 return ClientRect::create(result); 615 593 } -
trunk/Source/WebCore/dom/Range.cpp
r118570 r119690 1941 1941 } 1942 1942 1943 static void adjustFloatQuadsForScrollAndAbsoluteZoomAndPageScale(Vector<FloatQuad>& quads, Document* document, RenderObject* renderer)1944 {1945 FrameView* view = document->view();1946 if (!view)1947 return;1948 1949 float pageScale = 1;1950 if (Page* page = document->page())1951 pageScale = page->pageScaleFactor();1952 1953 LayoutRect visibleContentRect = view->visibleContentRect();1954 for (size_t i = 0; i < quads.size(); ++i) {1955 quads[i].move(-visibleContentRect.x(), -visibleContentRect.y());1956 adjustFloatQuadForAbsoluteZoom(quads[i], renderer);1957 if (pageScale != 1)1958 adjustFloatQuadForPageScale(quads[i], pageScale);1959 }1960 }1961 1962 1943 void Range::getBorderAndTextQuads(Vector<FloatQuad>& quads) const 1963 1944 { … … 1978 1959 Vector<FloatQuad> elementQuads; 1979 1960 renderBoxModelObject->absoluteQuads(elementQuads); 1980 adjustFloatQuadsForScrollAndAbsoluteZoomAndPageScale(elementQuads, m_ownerDocument.get(), renderBoxModelObject);1961 m_ownerDocument->adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale(elementQuads, renderBoxModelObject); 1981 1962 1982 1963 quads.append(elementQuads); … … 1991 1972 Vector<FloatQuad> textQuads; 1992 1973 renderText->absoluteQuadsForRange(textQuads, startOffset, endOffset); 1993 adjustFloatQuadsForScrollAndAbsoluteZoomAndPageScale(textQuads, m_ownerDocument.get(), renderText);1974 m_ownerDocument->adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale(textQuads, renderText); 1994 1975 1995 1976 quads.append(textQuads); -
trunk/Source/WebCore/rendering/RenderObject.h
r119110 r119690 1215 1215 } 1216 1216 1217 inline void adjustFloatQuadForPageScale(FloatQuad& quad, float pageScale)1218 {1219 if (pageScale != 1)1220 quad.scale(1 / pageScale, 1 / pageScale);1221 }1222 1223 inline void adjustFloatRectForPageScale(FloatRect& rect, float pageScale)1224 {1225 if (pageScale != 1)1226 rect.scale(1 / pageScale, 1 / pageScale);1227 }1228 1229 1217 } // namespace WebCore 1230 1218
Note: See TracChangeset
for help on using the changeset viewer.