⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 90485 in webkit


Ignore:
Timestamp:
Jul 6, 2011, 1:20:05 PM (15 years ago)
Author:
eae@chromium.org
Message:

2011-07-06 Emil A Eklund <eae@chromium.org>

Reviewed by Eric Seidel.

Switch RenderLayer::hitTest* to to new layout types
https://bugs.webkit.org/show_bug.cgi?id=63640

Switch hit testing and supporting methods for RenderLayer over to the new
layout unit abstraction.

No new tests, no functionality changes.

  • rendering/LayoutTypes.h: (WebCore::roundedLayoutPoint): Add roundedLayoutPoint abstraction, calls roundedIntPoint now but will be a no-op (and eventually go away) once we switch to float or fixed point.
  • rendering/RenderLayer.cpp: (WebCore::RenderLayer::createLocalTransformState): (WebCore::RenderLayer::hitTestLayer): (WebCore::RenderLayer::hitTestList): (WebCore::RenderLayer::hitTestPaginatedChildLayer): (WebCore::RenderLayer::hitTestChildLayerColumns): (WebCore::RenderLayer::calculateRects):
  • rendering/RenderLayer.h:
Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r90484 r90485  
     12011-07-06  Emil A Eklund  <eae@chromium.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Switch RenderLayer::hitTest* to to new layout types
     6        https://bugs.webkit.org/show_bug.cgi?id=63640
     7
     8        Switch hit testing and supporting methods for RenderLayer over to the new
     9        layout unit abstraction.
     10       
     11        No new tests, no functionality changes.
     12
     13        * rendering/LayoutTypes.h:
     14        (WebCore::roundedLayoutPoint):
     15        Add roundedLayoutPoint abstraction, calls roundedIntPoint now but will be a
     16        no-op (and eventually go away) once we switch to float or fixed point.
     17       
     18        * rendering/RenderLayer.cpp:
     19        (WebCore::RenderLayer::createLocalTransformState):
     20        (WebCore::RenderLayer::hitTestLayer):
     21        (WebCore::RenderLayer::hitTestList):
     22        (WebCore::RenderLayer::hitTestPaginatedChildLayer):
     23        (WebCore::RenderLayer::hitTestChildLayerColumns):
     24        (WebCore::RenderLayer::calculateRects):
     25        * rendering/RenderLayer.h:
     26
    1272011-07-06  Simon Fraser  <simon.fraser@apple.com>
    228
  • trunk/Source/WebCore/rendering/LayoutTypes.h

    r89945 r90485  
    3737#define LayoutTypes_h
    3838
     39#include "FloatPoint.h"
    3940#include "IntRect.h"
    4041
     
    4647typedef IntRect LayoutRect;
    4748
     49inline LayoutPoint roundedLayoutPoint(FloatPoint point)
     50{
     51    return roundedIntPoint(point);
     52}
     53
    4854} // namespace WebCore
    4955
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r90484 r90485  
    29132913
    29142914PassRefPtr<HitTestingTransformState> RenderLayer::createLocalTransformState(RenderLayer* rootLayer, RenderLayer* containerLayer,
    2915                                         const IntRect& hitTestRect, const IntPoint& hitTestPoint,
     2915                                        const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint,
    29162916                                        const HitTestingTransformState* containerTransformState) const
    29172917{
    29182918    RefPtr<HitTestingTransformState> transformState;
    2919     IntPoint offset;
     2919    LayoutPoint offset;
    29202920    if (containerTransformState) {
    29212921        // If we're already computing transform state, then it's relative to the container (which we know is non-null).
     
    29752975//  *zOffset on return is the z offset of the hit point relative to the containing flattening layer.
    29762976RenderLayer* RenderLayer::hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLayer, const HitTestRequest& request, HitTestResult& result,
    2977                                        const IntRect& hitTestRect, const IntPoint& hitTestPoint, bool appliedTransform,
     2977                                       const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint, bool appliedTransform,
    29782978                                       const HitTestingTransformState* transformState, double* zOffset)
    29792979{
     
    29862986    useTemporaryClipRects |= renderer()->view()->frameView()->containsScrollableAreaWithOverlayScrollbars();
    29872987
    2988     IntRect hitTestArea = result.rectForPoint(hitTestPoint);
     2988    LayoutRect hitTestArea = result.rectForPoint(hitTestPoint);
    29892989
    29902990    // Apply a transform if we have one.
     
    30113011        // We can't just map hitTestPoint and hitTestRect because they may have been flattened (losing z)
    30123012        // by our container.
    3013         IntPoint localPoint = roundedIntPoint(newTransformState->mappedPoint());
    3014         IntRect localHitTestRect;
     3013        LayoutPoint localPoint = roundedLayoutPoint(newTransformState->mappedPoint());
     3014        LayoutRect localHitTestRect;
    30153015#if USE(ACCELERATED_COMPOSITING)
    30163016        if (isComposited()) {
     
    30563056   
    30573057    // Calculate the clip rects we should use.
    3058     IntRect layerBounds;
    3059     IntRect bgRect;
    3060     IntRect fgRect;
    3061     IntRect outlineRect;
     3058    LayoutRect layerBounds;
     3059    LayoutRect bgRect;
     3060    LayoutRect fgRect;
     3061    LayoutRect outlineRect;
    30623062    calculateRects(rootLayer, hitTestRect, layerBounds, bgRect, fgRect, outlineRect, useTemporaryClipRects, IncludeOverlayScrollbarSize);
    30633063   
     
    31813181RenderLayer* RenderLayer::hitTestList(Vector<RenderLayer*>* list, RenderLayer* rootLayer,
    31823182                                      const HitTestRequest& request, HitTestResult& result,
    3183                                       const IntRect& hitTestRect, const IntPoint& hitTestPoint,
     3183                                      const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint,
    31843184                                      const HitTestingTransformState* transformState,
    31853185                                      double* zOffsetForDescendants, double* zOffset,
     
    32183218
    32193219RenderLayer* RenderLayer::hitTestPaginatedChildLayer(RenderLayer* childLayer, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result,
    3220                                                      const IntRect& hitTestRect, const IntPoint& hitTestPoint, const HitTestingTransformState* transformState, double* zOffset)
     3220                                                     const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint, const HitTestingTransformState* transformState, double* zOffset)
    32213221{
    32223222    Vector<RenderLayer*> columnLayers;
     
    32353235
    32363236RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result,
    3237                                                    const IntRect& hitTestRect, const IntPoint& hitTestPoint, const HitTestingTransformState* transformState, double* zOffset,
     3237                                                   const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint, const HitTestingTransformState* transformState, double* zOffset,
    32383238                                                   const Vector<RenderLayer*>& columnLayers, size_t columnIndex)
    32393239{
     
    32443244        return 0;
    32453245
    3246     IntPoint layerOffset;
     3246    LayoutPoint layerOffset;
    32473247    columnBlock->layer()->convertToLayerCoords(rootLayer, layerOffset);
    32483248   
     
    32523252    // We have to go backwards from the last column to the first.
    32533253    bool isHorizontal = columnBlock->style()->isHorizontalWritingMode();
    3254     int logicalLeft = columnBlock->logicalLeftOffsetForContent();
    3255     int currLogicalTopOffset = 0;
     3254    LayoutUnit logicalLeft = columnBlock->logicalLeftOffsetForContent();
     3255    LayoutUnit currLogicalTopOffset = 0;
    32563256    int i;
    32573257    for (i = 0; i < colCount; i++) {
    3258         IntRect colRect = columnBlock->columnRectAt(colInfo, i);
    3259         int blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
     3258        LayoutRect colRect = columnBlock->columnRectAt(colInfo, i);
     3259        LayoutUnit blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
    32603260        if (columnBlock->style()->isFlippedBlocksWritingMode())
    32613261            currLogicalTopOffset += blockDelta;
     
    32653265    for (i = colCount - 1; i >= 0; i--) {
    32663266        // For each rect, we clip to the rect, and then we adjust our coords.
    3267         IntRect colRect = columnBlock->columnRectAt(colInfo, i);
     3267        LayoutRect colRect = columnBlock->columnRectAt(colInfo, i);
    32683268        columnBlock->flipForWritingMode(colRect);
    3269         int currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft;
    3270         int blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
     3269        LayoutUnit currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft;
     3270        LayoutUnit blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
    32713271        if (columnBlock->style()->isFlippedBlocksWritingMode())
    32723272            currLogicalTopOffset -= blockDelta;
     
    32753275        colRect.moveBy(layerOffset);
    32763276
    3277         IntRect localClipRect(hitTestRect);
     3277        LayoutRect localClipRect(hitTestRect);
    32783278        localClipRect.intersect(colRect);
    32793279       
    3280         IntSize offset = isHorizontal ? IntSize(currLogicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, currLogicalLeftOffset);
     3280        LayoutSize offset = isHorizontal ? LayoutSize(currLogicalLeftOffset, currLogicalTopOffset) : LayoutSize(currLogicalTopOffset, currLogicalLeftOffset);
    32813281
    32823282        if (!localClipRect.isEmpty() && localClipRect.intersects(result.rectForPoint(hitTestPoint))) {
     
    33033303                RefPtr<HitTestingTransformState> newTransformState = nextLayer->createLocalTransformState(rootLayer, nextLayer, localClipRect, hitTestPoint, transformState);
    33043304                newTransformState->translate(offset.width(), offset.height(), HitTestingTransformState::AccumulateTransform);
    3305                 IntPoint localPoint = roundedIntPoint(newTransformState->mappedPoint());
    3306                 IntRect localHitTestRect = newTransformState->mappedQuad().enclosingBoundingBox();
     3305                LayoutPoint localPoint = roundedLayoutPoint(newTransformState->mappedPoint());
     3306                LayoutRect localHitTestRect = newTransformState->mappedQuad().enclosingBoundingBox();
    33073307                newTransformState->flatten();
    33083308
     
    34343434}
    34353435
    3436 void RenderLayer::calculateRects(const RenderLayer* rootLayer, const IntRect& paintDirtyRect, IntRect& layerBounds,
    3437                                  IntRect& backgroundRect, IntRect& foregroundRect, IntRect& outlineRect, bool temporaryClipRects,
     3436void RenderLayer::calculateRects(const RenderLayer* rootLayer, const LayoutRect& paintDirtyRect, LayoutRect& layerBounds,
     3437                                 LayoutRect& backgroundRect, LayoutRect& foregroundRect, LayoutRect& outlineRect, bool temporaryClipRects,
    34383438                                 OverlayScrollbarSizeRelevancy relevancy) const
    34393439{
     
    34473447    outlineRect = backgroundRect;
    34483448   
    3449     IntPoint offset;
     3449    LayoutPoint offset;
    34503450    convertToLayerCoords(rootLayer, offset);
    3451     layerBounds = IntRect(offset, size());
     3451    layerBounds = LayoutRect(offset, size());
    34523452   
    34533453    // Update the clip rects that will be passed to child layers.
     
    34583458        if (renderer()->hasClip()) {
    34593459            // Clip applies to *us* as well, so go ahead and update the damageRect.
    3460             IntRect newPosClip = toRenderBox(renderer())->clipRect(offset);
     3460            LayoutRect newPosClip = toRenderBox(renderer())->clipRect(offset);
    34613461            backgroundRect.intersect(newPosClip);
    34623462            foregroundRect.intersect(newPosClip);
     
    34693469        // See https://bugs.webkit.org/show_bug.cgi?id=37467 for more information.
    34703470        if (const ShadowData* boxShadow = renderer()->style()->boxShadow()) {
    3471             IntRect overflow = layerBounds;
     3471            LayoutRect overflow = layerBounds;
    34723472            do {
    34733473                if (boxShadow->style() == Normal) {
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r90484 r90485  
    376376    // |rootLayer}.  It also computes our background and foreground clip rects
    377377    // for painting/event handling.
    378     void calculateRects(const RenderLayer* rootLayer, const IntRect& paintDirtyRect, IntRect& layerBounds,
    379                         IntRect& backgroundRect, IntRect& foregroundRect, IntRect& outlineRect, bool temporaryClipRects = false,
     378    void calculateRects(const RenderLayer* rootLayer, const LayoutRect& paintDirtyRect, LayoutRect& layerBounds,
     379                        LayoutRect& backgroundRect, LayoutRect& foregroundRect, LayoutRect& outlineRect, bool temporaryClipRects = false,
    380380                        OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const;
    381381
     
    507507
    508508    RenderLayer* hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLayer, const HitTestRequest& request, HitTestResult& result,
    509                               const IntRect& hitTestRect, const IntPoint& hitTestPoint, bool appliedTransform,
     509                              const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint, bool appliedTransform,
    510510                              const HitTestingTransformState* transformState = 0, double* zOffset = 0);
    511511    RenderLayer* hitTestList(Vector<RenderLayer*>*, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result,
    512                              const IntRect& hitTestRect, const IntPoint& hitTestPoint,
     512                             const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint,
    513513                             const HitTestingTransformState* transformState, double* zOffsetForDescendants, double* zOffset,
    514514                             const HitTestingTransformState* unflattenedTransformState, bool depthSortDescendants);
    515515    RenderLayer* hitTestPaginatedChildLayer(RenderLayer* childLayer, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result,
    516                                             const IntRect& hitTestRect, const IntPoint& hitTestPoint,
     516                                            const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint,
    517517                                            const HitTestingTransformState* transformState, double* zOffset);
    518518    RenderLayer* hitTestChildLayerColumns(RenderLayer* childLayer, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result,
    519                                           const IntRect& hitTestRect, const IntPoint& hitTestPoint,
     519                                          const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint,
    520520                                          const HitTestingTransformState* transformState, double* zOffset,
    521521                                          const Vector<RenderLayer*>& columnLayers, size_t columnIndex);
    522522                                   
    523523    PassRefPtr<HitTestingTransformState> createLocalTransformState(RenderLayer* rootLayer, RenderLayer* containerLayer,
    524                             const IntRect& hitTestRect, const IntPoint& hitTestPoint,
     524                            const LayoutRect& hitTestRect, const LayoutPoint& hitTestPoint,
    525525                            const HitTestingTransformState* containerTransformState) const;
    526526   
Note: See TracChangeset for help on using the changeset viewer.