Changeset 112438 in webkit


Ignore:
Timestamp:
Mar 28, 2012 2:00:37 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Incorrect foreignObject hit test results when overlapping other SVG elements
https://bugs.webkit.org/show_bug.cgi?id=82059

Patch by Florin Malita <fmalita@google.com> on 2012-03-28
Reviewed by Nikolas Zimmermann.

Source/WebCore:

Test: svg/hittest/foreign-object-background.svg

Foreign content needs to be hit-tested atomically due to the (pseudo)
stacking context established by FOs.

  • rendering/svg/RenderSVGForeignObject.cpp:

(WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
Hit test all phases on FO HitTestForeground.

LayoutTests:

  • svg/hittest/foreign-object-background-expected.txt: Added.
  • svg/hittest/foreign-object-background.svg: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r112436 r112438  
     12012-03-28  Florin Malita  <fmalita@google.com>
     2
     3        Incorrect foreignObject hit test results when overlapping other SVG elements
     4        https://bugs.webkit.org/show_bug.cgi?id=82059
     5
     6        Reviewed by Nikolas Zimmermann.
     7
     8        * svg/hittest/foreign-object-background-expected.txt: Added.
     9        * svg/hittest/foreign-object-background.svg: Added.
     10
    1112012-03-26  Shawn Singh  <shawnsingh@chromium.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r112436 r112438  
     12012-03-28  Florin Malita  <fmalita@google.com>
     2
     3        Incorrect foreignObject hit test results when overlapping other SVG elements
     4        https://bugs.webkit.org/show_bug.cgi?id=82059
     5
     6        Reviewed by Nikolas Zimmermann.
     7
     8        Test: svg/hittest/foreign-object-background.svg
     9
     10        Foreign content needs to be hit-tested atomically due to the (pseudo)
     11        stacking context established by FOs.
     12
     13        * rendering/svg/RenderSVGForeignObject.cpp:
     14        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
     15        Hit test all phases on FO HitTestForeground.
     16
    1172012-03-26  Shawn Singh  <shawnsingh@chromium.org>
    218
  • trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp

    r110285 r112438  
    2727#include "GraphicsContext.h"
    2828#include "LayoutRepainter.h"
     29#include "RenderObject.h"
    2930#include "RenderSVGResource.h"
    3031#include "RenderView.h"
     
    166167bool RenderSVGForeignObject::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction)
    167168{
     169    // Embedded content is drawn in the foreground phase.
     170    if (hitTestAction != HitTestForeground)
     171        return false;
     172
    168173    FloatPoint localPoint = localTransform().inverse().mapPoint(pointInParent);
    169174
     
    172177        return false;
    173178
    174     return RenderBlock::nodeAtPoint(request, result, roundedLayoutPoint(localPoint), LayoutPoint(), hitTestAction);
     179    // FOs establish a stacking context, so we need to hit-test all layers.
     180    return RenderBlock::nodeAtPoint(request, result, roundedLayoutPoint(localPoint), LayoutPoint(), HitTestForeground)
     181        || RenderBlock::nodeAtPoint(request, result, roundedLayoutPoint(localPoint), LayoutPoint(), HitTestFloat)
     182        || RenderBlock::nodeAtPoint(request, result, roundedLayoutPoint(localPoint), LayoutPoint(), HitTestChildBlockBackgrounds);
    175183}
    176184
Note: See TracChangeset for help on using the changeset viewer.