Changeset 89753 in webkit
- Timestamp:
- Jun 25, 2011 4:01:15 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r89752 r89753 1 2011-06-25 Joseph Pecoraro <joepeck@webkit.org> 2 3 Reviewed by Simon Fraser. 4 5 Inspector highlight rect is wrong for contents of transformed iframes 6 https://bugs.webkit.org/show_bug.cgi?id=53627 7 8 Part 1: Provide FloatQuad versions of convertFromRenderer, 9 convertToContainingView, and convertChildToSelf, so that we 10 can get the fully transformed quad of a renderer all the 11 way up to the root widget. 12 13 * page/FrameView.cpp: 14 (WebCore::FrameView::convertFromRenderer): 15 (WebCore::FrameView::convertToContainingView): 16 * page/FrameView.h: 17 * platform/ScrollView.h: 18 (WebCore::ScrollView::convertChildToSelf): 19 * platform/Widget.h: 20 * platform/Widget.cpp: 21 (WebCore::Widget::convertToContainingView): 22 Provide FloatQuad versions of these already existing functions. 23 24 (WebCore::Widget::convertToRootContainingView): 25 Provide a helper conversion function to recursively 26 convert a given FloatQuad up to the root widget. 27 28 * inspector/DOMNodeHighlighter.cpp: 29 (WebCore::DOMNodeHighlighter::DrawNodeHighlight): 30 Use the new methods to convert the FloatQuad for the highlighted 31 node to the root container, without losing transformation 32 information. Add a FIXME for SVG, which is still broken. 33 34 * WebCore.exp.in: 35 Export the new Widget functions so WebKit can link properly. 36 1 37 2011-06-25 Dirk Schulze <krit@webkit.org> 2 38 -
trunk/Source/WebCore/WebCore.exp.in
r89733 r89753 1275 1275 __ZNK7WebCore6Widget23convertToContainingViewERKNS_7IntRectE 1276 1276 __ZNK7WebCore6Widget23convertToContainingViewERKNS_8IntPointE 1277 __ZNK7WebCore6Widget23convertToContainingViewERKNS_9FloatQuadE 1277 1278 __ZNK7WebCore6Widget25convertFromContainingViewERKNS_7IntRectE 1278 1279 __ZNK7WebCore6Widget25convertFromContainingViewERKNS_8IntPointE 1279 1280 __ZNK7WebCore6Widget25convertToContainingWindowERKNS_7IntRectE 1280 1281 __ZNK7WebCore6Widget25convertToContainingWindowERKNS_8IntPointE 1282 __ZNK7WebCore6Widget27convertToRootContainingViewERKNS_9FloatQuadE 1281 1283 __ZNK7WebCore6Widget9frameRectEv 1282 1284 __ZNK7WebCore7Element10screenRectEv -
trunk/Source/WebCore/inspector/DOMNodeHighlighter.cpp
r88691 r89753 268 268 borderBox.width() + renderBox->marginLeft() + renderBox->marginRight(), borderBox.height() + renderBox->marginTop() + renderBox->marginBottom()); 269 269 270 271 FloatQuad absContentQuad = renderBox->localToAbsoluteQuad(FloatRect(contentBox));272 FloatQuad absPaddingQuad = renderBox->localToAbsoluteQuad(FloatRect(paddingBox));273 FloatQuad absBorderQuad = renderBox->localToAbsoluteQuad(FloatRect(borderBox));274 FloatQuad absMarginQuad = renderBox->localToAbsoluteQuad(FloatRect(marginBox));275 276 absContentQuad .move(mainFrameOffset);277 absPaddingQuad .move(mainFrameOffset);278 absBorderQuad .move(mainFrameOffset);279 absMarginQuad .move(mainFrameOffset);270 FrameView* containingView = containingFrame->view(); 271 FloatQuad absContentQuad = containingView->convertFromRenderer(renderer, FloatRect(contentBox)); 272 FloatQuad absPaddingQuad = containingView->convertFromRenderer(renderer, FloatRect(paddingBox)); 273 FloatQuad absBorderQuad = containingView->convertFromRenderer(renderer, FloatRect(borderBox)); 274 FloatQuad absMarginQuad = containingView->convertFromRenderer(renderer, FloatRect(marginBox)); 275 276 absContentQuad = containingView->convertToRootContainingView(absContentQuad); 277 absPaddingQuad = containingView->convertToRootContainingView(absPaddingQuad); 278 absBorderQuad = containingView->convertToRootContainingView(absBorderQuad); 279 absMarginQuad = containingView->convertToRootContainingView(absMarginQuad); 280 280 281 281 titleAnchorBox = absMarginQuad.enclosingBoundingBox(); … … 283 283 drawHighlightForBox(context, absContentQuad, absPaddingQuad, absBorderQuad, absMarginQuad, mode); 284 284 } else if (renderer->isRenderInline() || isSVGRenderer) { 285 // FIXME: Does not handle transformed content correctly. 285 286 // FIXME: We should show margins/padding/border for inlines. 286 287 Vector<FloatQuad> lineBoxQuads; -
trunk/Source/WebCore/page/FrameView.cpp
r89745 r89753 2807 2807 } 2808 2808 2809 FloatQuad FrameView::convertFromRenderer(const RenderObject* renderer, const FloatQuad& rendererQuad) const 2810 { 2811 FloatQuad quad = renderer->localToAbsoluteQuad(rendererQuad); 2812 2813 IntPoint scroll = scrollPosition(); 2814 quad.move(-scroll.x(), -scroll.y()); 2815 2816 return quad; 2817 } 2818 2819 FloatQuad FrameView::convertToContainingView(const FloatQuad& localQuad) const 2820 { 2821 if (const ScrollView* parentScrollView = parent()) { 2822 if (parentScrollView->isFrameView()) { 2823 const FrameView* parentView = static_cast<const FrameView*>(parentScrollView); 2824 2825 // Get our renderer in the parent view. 2826 RenderPart* renderer = m_frame->ownerRenderer(); 2827 if (!renderer) 2828 return localQuad; 2829 2830 // Add borders and padding. 2831 FloatQuad quad(localQuad); 2832 quad.move(renderer->borderLeft() + renderer->paddingLeft(), 2833 renderer->borderTop() + renderer->paddingTop()); 2834 2835 // Apply the parent's transforms and scroll offset. 2836 return parentView->convertFromRenderer(renderer, quad); 2837 } 2838 2839 return Widget::convertToContainingView(localQuad); 2840 } 2841 2842 return localQuad; 2843 } 2844 2809 2845 // Normal delay 2810 2846 void FrameView::setRepaintThrottlingDeferredRepaintDelay(double p) -
trunk/Source/WebCore/page/FrameView.h
r89316 r89753 261 261 virtual IntPoint convertToRenderer(const RenderObject*, const IntPoint&) const; 262 262 263 // Conversion with FloatQuads, to keep transformed coordinates. 264 virtual FloatQuad convertFromRenderer(const RenderObject*, const FloatQuad&) const; 265 virtual FloatQuad convertToContainingView(const FloatQuad&) const; 266 263 267 bool isFrameViewScrollCorner(RenderScrollbarPart* scrollCorner) const { return m_scrollCorner == scrollCorner; } 264 268 -
trunk/Source/WebCore/platform/ScrollView.h
r88877 r89753 28 28 #define ScrollView_h 29 29 30 #include "FloatQuad.h" 30 31 #include "IntRect.h" 31 32 #include "Scrollbar.h" … … 255 256 newPoint.move(-child->location()); 256 257 return newPoint; 258 } 259 260 FloatQuad convertChildToSelf(const Widget* child, const FloatQuad& quad) const 261 { 262 IntPoint point = quad.enclosingBoundingBox().location(); 263 IntPoint newPoint = convertChildToSelf(child, point); 264 265 FloatQuad newQuad = quad; 266 newQuad.move(newPoint.x(), newPoint.y()); 267 return newQuad; 257 268 } 258 269 -
trunk/Source/WebCore/platform/Widget.cpp
r75897 r89753 169 169 } 170 170 171 FloatQuad Widget::convertToContainingView(const FloatQuad& localQuad) const 172 { 173 if (const ScrollView* parentScrollView = parent()) 174 return parentScrollView->convertChildToSelf(this, localQuad); 175 176 return localQuad; 177 } 178 179 FloatQuad Widget::convertToRootContainingView(const FloatQuad& localQuad) const 180 { 181 if (!parent()) 182 return localQuad; 183 184 FloatQuad containingQuad = convertToContainingView(localQuad); 185 return parent()->convertToRootContainingView(containingQuad); 186 } 187 171 188 #if !PLATFORM(EFL) 172 189 void Widget::frameRectsChanged() -
trunk/Source/WebCore/platform/Widget.h
r86433 r89753 28 28 #define Widget_h 29 29 30 #include "FloatQuad.h" 30 31 #include "IntRect.h" 31 32 #include <wtf/Forward.h> … … 254 255 virtual IntPoint convertFromContainingView(const IntPoint&) const; 255 256 257 // Conversion with FloatQuads, to keep transformed coordinates. 258 virtual FloatQuad convertToContainingView(const FloatQuad&) const; 259 virtual FloatQuad convertToRootContainingView(const FloatQuad&) const; 260 256 261 // A means to access the AX cache when this object can get a pointer to it. 257 262 virtual AXObjectCache* axObjectCache() const { return 0; }
Note: See TracChangeset
for help on using the changeset viewer.