| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
| 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
| 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 1951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1962 if (style()->visibility() != VISIBLE) { | 1962 if (style()->visibility() != VISIBLE) { |
| 1963 PaintLayer* layer = enclosingLayer(); | 1963 PaintLayer* layer = enclosingLayer(); |
| 1964 layer->updateDescendantDependentFlags(); | 1964 layer->updateDescendantDependentFlags(); |
| 1965 if (layer->subtreeIsInvisible()) | 1965 if (layer->subtreeIsInvisible()) |
| 1966 return LayoutRect(); | 1966 return LayoutRect(); |
| 1967 } | 1967 } |
| 1968 | 1968 |
| 1969 return visualOverflowRect(); | 1969 return visualOverflowRect(); |
| 1970 } | 1970 } |
| 1971 | 1971 |
| 1972 void LayoutBox::inflateVisualRectForReflectionAndFilterUnderContainer(LayoutRect
& rect, const LayoutObject& container, const LayoutBoxModelObject* ancestorToSto
pAt) const |
| 1973 { |
| 1974 // Apply visual overflow caused by reflections and filters defined on object
s between this object |
| 1975 // and container (not included) or ancestorToStopAt (included). |
| 1976 LayoutSize offsetFromContainer = this->offsetFromContainer(&container); |
| 1977 rect.move(offsetFromContainer); |
| 1978 for (LayoutObject* parent = this->parent(); parent && parent != container; p
arent = parent->parent()) { |
| 1979 if (parent->isBox()) { |
| 1980 // Convert rect into coordinate space of parent to apply parent's re
flection and filter. |
| 1981 LayoutSize parentOffset = parent->offsetFromAncestorContainer(&conta
iner); |
| 1982 rect.move(-parentOffset); |
| 1983 toLayoutBox(parent)->inflateVisualRectForReflectionAndFilter(rect); |
| 1984 rect.move(parentOffset); |
| 1985 } |
| 1986 if (parent == ancestorToStopAt) |
| 1987 break; |
| 1988 } |
| 1989 rect.move(-offsetFromContainer); |
| 1990 } |
| 1991 |
| 1972 bool LayoutBox::mapToVisualRectInAncestorSpace(const LayoutBoxModelObject* ances
tor, LayoutRect& rect, VisualRectFlags visualRectFlags) const | 1992 bool LayoutBox::mapToVisualRectInAncestorSpace(const LayoutBoxModelObject* ances
tor, LayoutRect& rect, VisualRectFlags visualRectFlags) const |
| 1973 { | 1993 { |
| 1974 // We need to inflate the paint invalidation rect before we use paintInvalid
ationState, | 1994 inflateVisualRectForReflectionAndFilter(rect); |
| 1975 // else we would forget to inflate it for the current layoutObject. FIXME: I
f these were | |
| 1976 // included into the visual overflow for paint invalidation, we wouldn't hav
e this issue. | |
| 1977 inflatePaintInvalidationRectForReflectionAndFilter(rect); | |
| 1978 | 1995 |
| 1979 if (ancestor == this) { | 1996 if (ancestor == this) { |
| 1980 // The final rect returned is always in the physical coordinate space of
the ancestor. | 1997 // The final rect returned is always in the physical coordinate space of
the ancestor. |
| 1981 flipForWritingMode(rect); | 1998 flipForWritingMode(rect); |
| 1982 return true; | 1999 return true; |
| 1983 } | 2000 } |
| 1984 | 2001 |
| 1985 bool ancestorSkipped; | 2002 bool ancestorSkipped; |
| 1986 LayoutObject* container = this->container(ancestor, &ancestorSkipped); | 2003 bool filterOrReflectionSkipped; |
| 2004 LayoutObject* container = this->container(ancestor, &ancestorSkipped, &filte
rOrReflectionSkipped); |
| 1987 if (!container) | 2005 if (!container) |
| 1988 return true; | 2006 return true; |
| 1989 | 2007 |
| 2008 if (filterOrReflectionSkipped) |
| 2009 inflateVisualRectForReflectionAndFilterUnderContainer(rect, *container,
ancestor); |
| 2010 |
| 1990 // The rect we compute at each step is shifted by our x/y offset in the pare
nt container's coordinate space. | 2011 // The rect we compute at each step is shifted by our x/y offset in the pare
nt container's coordinate space. |
| 1991 // Only when we cross a writing mode boundary will we have to possibly flipF
orWritingMode (to convert into a more | 2012 // Only when we cross a writing mode boundary will we have to possibly flipF
orWritingMode (to convert into a more |
| 1992 // appropriate offset corner for the enclosing container). | 2013 // appropriate offset corner for the enclosing container). |
| 1993 if (isWritingModeRoot()) { | 2014 if (isWritingModeRoot()) { |
| 1994 flipForWritingMode(rect); | 2015 flipForWritingMode(rect); |
| 1995 // Then flip rect currently in physical direction to container's block d
irection. | 2016 // Then flip rect currently in physical direction to container's block d
irection. |
| 1996 if (container->styleRef().isFlippedBlocksWritingMode()) | 2017 if (container->styleRef().isFlippedBlocksWritingMode()) |
| 1997 rect.setX(m_frameRect.width() - rect.maxX()); | 2018 rect.setX(m_frameRect.width() - rect.maxX()); |
| 1998 } | 2019 } |
| 1999 | 2020 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2036 toLayoutView(container)->adjustOffsetForFixedPosition(rect); | 2057 toLayoutView(container)->adjustOffsetForFixedPosition(rect); |
| 2037 return true; | 2058 return true; |
| 2038 } | 2059 } |
| 2039 | 2060 |
| 2040 if (container->isLayoutView()) | 2061 if (container->isLayoutView()) |
| 2041 return toLayoutView(container)->mapToVisualRectInAncestorSpace(ancestor,
rect, position == FixedPosition ? IsFixed : 0, visualRectFlags); | 2062 return toLayoutView(container)->mapToVisualRectInAncestorSpace(ancestor,
rect, position == FixedPosition ? IsFixed : 0, visualRectFlags); |
| 2042 else | 2063 else |
| 2043 return container->mapToVisualRectInAncestorSpace(ancestor, rect, visualR
ectFlags); | 2064 return container->mapToVisualRectInAncestorSpace(ancestor, rect, visualR
ectFlags); |
| 2044 } | 2065 } |
| 2045 | 2066 |
| 2046 void LayoutBox::inflatePaintInvalidationRectForReflectionAndFilter(LayoutRect& p
aintInvalidationRect) const | 2067 void LayoutBox::inflateVisualRectForReflectionAndFilter(LayoutRect& paintInvalid
ationRect) const |
| 2047 { | 2068 { |
| 2048 if (!RuntimeEnabledFeatures::cssBoxReflectFilterEnabled() && hasReflection()
) | 2069 if (!RuntimeEnabledFeatures::cssBoxReflectFilterEnabled() && hasReflection()
) |
| 2049 paintInvalidationRect.unite(reflectedRect(paintInvalidationRect)); | 2070 paintInvalidationRect.unite(reflectedRect(paintInvalidationRect)); |
| 2050 | 2071 |
| 2051 if (layer() && layer()->hasFilterInducingProperty()) | 2072 if (layer() && layer()->hasFilterInducingProperty()) |
| 2052 paintInvalidationRect = layer()->mapLayoutRectForFilter(paintInvalidatio
nRect); | 2073 paintInvalidationRect = layer()->mapLayoutRectForFilter(paintInvalidatio
nRect); |
| 2053 } | 2074 } |
| 2054 | 2075 |
| 2055 void LayoutBox::invalidatePaintForOverhangingFloats(bool) | 2076 void LayoutBox::invalidatePaintForOverhangingFloats(bool) |
| 2056 { | 2077 { |
| (...skipping 2694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4751 | 4772 |
| 4752 void LayoutBox::clearPercentHeightDescendants() | 4773 void LayoutBox::clearPercentHeightDescendants() |
| 4753 { | 4774 { |
| 4754 for (LayoutObject* curr = slowFirstChild(); curr; curr = curr->nextInPreOrde
r(this)) { | 4775 for (LayoutObject* curr = slowFirstChild(); curr; curr = curr->nextInPreOrde
r(this)) { |
| 4755 if (curr->isBox()) | 4776 if (curr->isBox()) |
| 4756 toLayoutBox(curr)->removeFromPercentHeightContainer(); | 4777 toLayoutBox(curr)->removeFromPercentHeightContainer(); |
| 4757 } | 4778 } |
| 4758 } | 4779 } |
| 4759 | 4780 |
| 4760 } // namespace blink | 4781 } // namespace blink |
| OLD | NEW |