| 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) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv
ed. |
| 7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 1875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1886 // The following is for rect invalidation. For slimming paint v2, we
can invalidate the rects | 1886 // The following is for rect invalidation. For slimming paint v2, we
can invalidate the rects |
| 1887 // of the first line display item clients instead of the whole rect
of the container. | 1887 // of the first line display item clients instead of the whole rect
of the container. |
| 1888 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) | 1888 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
| 1889 firstLineContainer->setShouldDoFullPaintInvalidation(); | 1889 firstLineContainer->setShouldDoFullPaintInvalidation(); |
| 1890 } | 1890 } |
| 1891 } | 1891 } |
| 1892 if (diff.needsLayout()) | 1892 if (diff.needsLayout()) |
| 1893 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleChange)
; | 1893 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleChange)
; |
| 1894 } | 1894 } |
| 1895 | 1895 |
| 1896 void LayoutObject::markContainingBlocksForOverflowRecalc() | 1896 void LayoutObject::markAncestorsForOverflowRecalcIfNeeded() |
| 1897 { | 1897 { |
| 1898 for (LayoutBlock* container = containingBlock(); container && !container->ch
ildNeedsOverflowRecalcAfterStyleChange(); container = container->containingBlock
()) | 1898 LayoutObject* object = this; |
| 1899 container->setChildNeedsOverflowRecalcAfterStyleChange(); | 1899 do { |
| 1900 // Cell and row need to propagate the flag to their containing section a
nd row as their containing block is the table wrapper. |
| 1901 // This enables us to only recompute overflow the modified sections / ro
ws. |
| 1902 object = object->isTableCell() || object->isTableRow() ? object->parent(
) : object->containingBlock(); |
| 1903 if (object) |
| 1904 object->setChildNeedsOverflowRecalcAfterStyleChange(); |
| 1905 } while (object); |
| 1900 } | 1906 } |
| 1901 | 1907 |
| 1902 void LayoutObject::setNeedsOverflowRecalcAfterStyleChange() | 1908 void LayoutObject::setNeedsOverflowRecalcAfterStyleChange() |
| 1903 { | 1909 { |
| 1904 bool neededRecalc = needsOverflowRecalcAfterStyleChange(); | 1910 bool neededRecalc = needsOverflowRecalcAfterStyleChange(); |
| 1905 setSelfNeedsOverflowRecalcAfterStyleChange(); | 1911 setSelfNeedsOverflowRecalcAfterStyleChange(); |
| 1906 if (!neededRecalc) | 1912 if (!neededRecalc) |
| 1907 markContainingBlocksForOverflowRecalc(); | 1913 markAncestorsForOverflowRecalcIfNeeded(); |
| 1908 } | 1914 } |
| 1909 | 1915 |
| 1910 void LayoutObject::setStyle(PassRefPtr<ComputedStyle> style) | 1916 void LayoutObject::setStyle(PassRefPtr<ComputedStyle> style) |
| 1911 { | 1917 { |
| 1912 ASSERT(style); | 1918 ASSERT(style); |
| 1913 | 1919 |
| 1914 if (m_style == style) { | 1920 if (m_style == style) { |
| 1915 // We need to run through adjustStyleDifference() for iframes, plugins,
and canvas so | 1921 // We need to run through adjustStyleDifference() for iframes, plugins,
and canvas so |
| 1916 // style sharing is disabled for them. That should ensure that we never
hit this code path. | 1922 // style sharing is disabled for them. That should ensure that we never
hit this code path. |
| 1917 ASSERT(!isLayoutIFrame() && !isEmbeddedObject() && !isCanvas()); | 1923 ASSERT(!isLayoutIFrame() && !isEmbeddedObject() && !isCanvas()); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1967 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleCha
nge); | 1973 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleCha
nge); |
| 1968 else if (updatedDiff.needsPositionedMovementLayout()) | 1974 else if (updatedDiff.needsPositionedMovementLayout()) |
| 1969 setNeedsPositionedMovementLayout(); | 1975 setNeedsPositionedMovementLayout(); |
| 1970 } | 1976 } |
| 1971 | 1977 |
| 1972 if (diff.transformChanged() && !needsLayout()) { | 1978 if (diff.transformChanged() && !needsLayout()) { |
| 1973 if (LayoutBlock* container = containingBlock()) | 1979 if (LayoutBlock* container = containingBlock()) |
| 1974 container->setNeedsOverflowRecalcAfterStyleChange(); | 1980 container->setNeedsOverflowRecalcAfterStyleChange(); |
| 1975 } | 1981 } |
| 1976 | 1982 |
| 1983 if (diff.needsRecomputeOverflow() && !needsLayout()) { |
| 1984 // TODO(rhogan): Make inlines capable of recomputing overflow too. |
| 1985 if (isLayoutBlock()) |
| 1986 setNeedsOverflowRecalcAfterStyleChange(); |
| 1987 else |
| 1988 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleCha
nge); |
| 1989 } |
| 1990 |
| 1977 if (diff.needsPaintInvalidationLayer() || updatedDiff.needsPaintInvalidation
Layer()) | 1991 if (diff.needsPaintInvalidationLayer() || updatedDiff.needsPaintInvalidation
Layer()) |
| 1978 setShouldDoFullPaintInvalidationIncludingNonCompositingDescendants(); | 1992 setShouldDoFullPaintInvalidationIncludingNonCompositingDescendants(); |
| 1979 else if (diff.needsPaintInvalidationObject() || updatedDiff.needsPaintInvali
dationObject()) | 1993 else if (diff.needsPaintInvalidationObject() || updatedDiff.needsPaintInvali
dationObject()) |
| 1980 setShouldDoFullPaintInvalidation(); | 1994 setShouldDoFullPaintInvalidation(); |
| 1981 } | 1995 } |
| 1982 | 1996 |
| 1983 void LayoutObject::styleWillChange(StyleDifference diff, const ComputedStyle& ne
wStyle) | 1997 void LayoutObject::styleWillChange(StyleDifference diff, const ComputedStyle& ne
wStyle) |
| 1984 { | 1998 { |
| 1985 if (m_style) { | 1999 if (m_style) { |
| 1986 // If our z-index changes value or our visibility changes, | 2000 // If our z-index changes value or our visibility changes, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2077 // If the object already needs layout, then setNeedsLayout won't do | 2091 // If the object already needs layout, then setNeedsLayout won't do |
| 2078 // any work. But if the containing block has changed, then we may need | 2092 // any work. But if the containing block has changed, then we may need |
| 2079 // to mark the new containing blocks for layout. The change that can | 2093 // to mark the new containing blocks for layout. The change that can |
| 2080 // directly affect the containing block of this object is a change to | 2094 // directly affect the containing block of this object is a change to |
| 2081 // the position style. | 2095 // the position style. |
| 2082 if (needsLayout() && oldStyle->position() != m_style->position()) | 2096 if (needsLayout() && oldStyle->position() != m_style->position()) |
| 2083 markContainerChainForLayout(); | 2097 markContainerChainForLayout(); |
| 2084 | 2098 |
| 2085 // Ditto. | 2099 // Ditto. |
| 2086 if (needsOverflowRecalcAfterStyleChange() && oldStyle->position() != m_s
tyle->position()) | 2100 if (needsOverflowRecalcAfterStyleChange() && oldStyle->position() != m_s
tyle->position()) |
| 2087 markContainingBlocksForOverflowRecalc(); | 2101 markAncestorsForOverflowRecalcIfNeeded(); |
| 2088 | 2102 |
| 2089 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleChange)
; | 2103 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleChange)
; |
| 2090 } else if (diff.needsPositionedMovementLayout()) { | 2104 } else if (diff.needsPositionedMovementLayout()) { |
| 2091 setNeedsPositionedMovementLayout(); | 2105 setNeedsPositionedMovementLayout(); |
| 2092 } | 2106 } |
| 2093 | 2107 |
| 2094 // Don't check for paint invalidation here; we need to wait until the layer
has been | 2108 // Don't check for paint invalidation here; we need to wait until the layer
has been |
| 2095 // updated by subclasses before we know if we have to invalidate paints (in
setStyle()). | 2109 // updated by subclasses before we know if we have to invalidate paints (in
setStyle()). |
| 2096 | 2110 |
| 2097 if (oldStyle && !areCursorsEqual(oldStyle, style())) { | 2111 if (oldStyle && !areCursorsEqual(oldStyle, style())) { |
| (...skipping 1583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3681 const blink::LayoutObject* root = object1; | 3695 const blink::LayoutObject* root = object1; |
| 3682 while (root->parent()) | 3696 while (root->parent()) |
| 3683 root = root->parent(); | 3697 root = root->parent(); |
| 3684 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3698 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
| 3685 } else { | 3699 } else { |
| 3686 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); | 3700 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); |
| 3687 } | 3701 } |
| 3688 } | 3702 } |
| 3689 | 3703 |
| 3690 #endif | 3704 #endif |
| OLD | NEW |