| 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 1832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1843 else { | 1843 else { |
| 1844 // An anonymous block must be made to wrap this inline. | 1844 // An anonymous block must be made to wrap this inline. |
| 1845 RenderBlock* block = toRenderBlock(parent())->createAnonymousBlock()
; | 1845 RenderBlock* block = toRenderBlock(parent())->createAnonymousBlock()
; |
| 1846 RenderObjectChildList* childlist = parent()->virtualChildren(); | 1846 RenderObjectChildList* childlist = parent()->virtualChildren(); |
| 1847 childlist->insertChildNode(parent(), block, this); | 1847 childlist->insertChildNode(parent(), block, this); |
| 1848 block->children()->appendChildNode(block, childlist->removeChildNode
(parent(), this)); | 1848 block->children()->appendChildNode(block, childlist->removeChildNode
(parent(), this)); |
| 1849 } | 1849 } |
| 1850 } | 1850 } |
| 1851 } | 1851 } |
| 1852 | 1852 |
| 1853 StyleDifference RenderObject::adjustStyleDifference(StyleDifference diff, unsign
ed contextSensitiveProperties) const | 1853 StyleDifference RenderObject::adjustStyleDifference(StyleDifference diff) const |
| 1854 { | 1854 { |
| 1855 // FIXME: The calls to hasDirectReasonsForCompositing are using state that m
ay not be up to date. | 1855 // FIXME: The calls to hasDirectReasonsForCompositing are using state that m
ay not be up to date. |
| 1856 DisableCompositingQueryAsserts disabler; | 1856 DisableCompositingQueryAsserts disabler; |
| 1857 | 1857 |
| 1858 if (contextSensitiveProperties & ContextSensitivePropertyTransform && isSVG(
)) | 1858 if (diff.transformChanged() && isSVG()) |
| 1859 diff = StyleDifferenceLayout; | 1859 diff.setNeedsFullLayout(); |
| 1860 | 1860 |
| 1861 // If transform changed, and the layer does not paint into its own separate
backing, then we need to repaint. | 1861 // If transform changed, and the layer does not paint into its own separate
backing, then we need to repaint. |
| 1862 if (contextSensitiveProperties & ContextSensitivePropertyTransform && diff
<= StyleDifferenceRepaintLayer) { | 1862 if (diff.transformChanged() && !diff.needsLayout()) { |
| 1863 // Text nodes share style with their parents but transforms don't apply
to them, | 1863 // Text nodes share style with their parents but transforms don't apply
to them, |
| 1864 // hence the !isText() check. | 1864 // hence the !isText() check. |
| 1865 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer(
)->hasDirectReasonsForCompositing())) | 1865 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer(
)->hasDirectReasonsForCompositing())) |
| 1866 diff = StyleDifferenceRepaintLayer; | 1866 diff.setNeedsRepaintLayer(); |
| 1867 else if (diff < StyleDifferenceRecompositeLayer) | 1867 else |
| 1868 diff = StyleDifferenceRecompositeLayer; | 1868 diff.setNeedsRecompositeLayer(); |
| 1869 } | 1869 } |
| 1870 | 1870 |
| 1871 // If opacity or filters changed, and the layer does not paint into its own
separate backing, then we need to repaint (also | 1871 // If opacity or filters changed, and the layer does not paint into its own
separate backing, then we need to repaint (also |
| 1872 // ignoring text nodes) | 1872 // ignoring text nodes) |
| 1873 if (contextSensitiveProperties & ContextSensitivePropertyOpacity && diff <=
StyleDifferenceRepaintLayer) { | 1873 if (diff.opacityChanged() && !diff.needsLayout()) { |
| 1874 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer(
)->hasDirectReasonsForCompositing())) | 1874 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer(
)->hasDirectReasonsForCompositing())) |
| 1875 diff = StyleDifferenceRepaintLayer; | 1875 diff.setNeedsRepaintLayer(); |
| 1876 else if (diff < StyleDifferenceRecompositeLayer) | 1876 else |
| 1877 diff = StyleDifferenceRecompositeLayer; | 1877 diff.setNeedsRecompositeLayer(); |
| 1878 } | 1878 } |
| 1879 | 1879 |
| 1880 if ((contextSensitiveProperties & ContextSensitivePropertyFilter) && hasLaye
r() && diff <= StyleDifferenceRepaintLayer) { | 1880 if (diff.filterChanged() && hasLayer() && !diff.needsLayout()) { |
| 1881 RenderLayer* layer = toRenderLayerModelObject(this)->layer(); | 1881 RenderLayer* layer = toRenderLayerModelObject(this)->layer(); |
| 1882 if (!layer->hasDirectReasonsForCompositing() || layer->paintsWithFilters
()) | 1882 if (!layer->hasDirectReasonsForCompositing() || layer->paintsWithFilters
()) |
| 1883 diff = StyleDifferenceRepaintLayer; | 1883 diff.setNeedsRepaintLayer(); |
| 1884 else if (diff < StyleDifferenceRecompositeLayer) | 1884 else |
| 1885 diff = StyleDifferenceRecompositeLayer; | 1885 diff.setNeedsRecompositeLayer(); |
| 1886 } | 1886 } |
| 1887 | 1887 |
| 1888 if ((contextSensitiveProperties & ContextSensitivePropertyTextOrColor) && di
ff < StyleDifferenceRepaint | 1888 if (diff.textOrColorChanged() && !diff.needsRepaint() && !diff.needsLayout() |
| 1889 && hasImmediateNonWhitespaceTextChildOrPropertiesDependentOnColor()) | 1889 && hasImmediateNonWhitespaceTextChildOrPropertiesDependentOnColor()) |
| 1890 diff = StyleDifferenceRepaint; | 1890 diff.setNeedsRepaintObject(); |
| 1891 | 1891 |
| 1892 // The answer to layerTypeRequired() for plugins, iframes, and canvas can ch
ange without the actual | 1892 // The answer to layerTypeRequired() for plugins, iframes, and canvas can ch
ange without the actual |
| 1893 // style changing, since it depends on whether we decide to composite these
elements. When the | 1893 // style changing, since it depends on whether we decide to composite these
elements. When the |
| 1894 // layer status of one of these elements changes, we need to force a layout. | 1894 // layer status of one of these elements changes, we need to force a layout. |
| 1895 if (diff == StyleDifferenceEqual && style() && isLayerModelObject()) { | 1895 if (diff.hasNoChange() && style() && isLayerModelObject()) { |
| 1896 bool requiresLayer = toRenderLayerModelObject(this)->layerTypeRequired()
!= NoLayer; | 1896 bool requiresLayer = toRenderLayerModelObject(this)->layerTypeRequired()
!= NoLayer; |
| 1897 if (hasLayer() != requiresLayer) | 1897 if (hasLayer() != requiresLayer) |
| 1898 diff = StyleDifferenceLayout; | 1898 diff.setNeedsFullLayout(); |
| 1899 } | 1899 } |
| 1900 | 1900 |
| 1901 // If we have no layer(), just treat a RepaintLayer hint as a normal Repaint
. | 1901 // If we have no layer(), just treat a RepaintLayer hint as a normal Repaint
. |
| 1902 if (diff == StyleDifferenceRepaintLayer && !hasLayer()) | 1902 if (diff.needsRepaintLayer() && !hasLayer()) { |
| 1903 diff = StyleDifferenceRepaint; | 1903 diff.resetNeedsRepaint(); |
| 1904 diff.setNeedsRepaintObject(); |
| 1905 } |
| 1904 | 1906 |
| 1905 return diff; | 1907 return diff; |
| 1906 } | 1908 } |
| 1907 | 1909 |
| 1908 void RenderObject::setPseudoStyle(PassRefPtr<RenderStyle> pseudoStyle) | 1910 void RenderObject::setPseudoStyle(PassRefPtr<RenderStyle> pseudoStyle) |
| 1909 { | 1911 { |
| 1910 ASSERT(pseudoStyle->styleType() == BEFORE || pseudoStyle->styleType() == AFT
ER); | 1912 ASSERT(pseudoStyle->styleType() == BEFORE || pseudoStyle->styleType() == AFT
ER); |
| 1911 | 1913 |
| 1912 // FIXME: We should consider just making all pseudo items use an inherited s
tyle. | 1914 // FIXME: We should consider just making all pseudo items use an inherited s
tyle. |
| 1913 | 1915 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1957 { | 1959 { |
| 1958 ASSERT(style); | 1960 ASSERT(style); |
| 1959 | 1961 |
| 1960 if (m_style == style) { | 1962 if (m_style == style) { |
| 1961 // We need to run through adjustStyleDifference() for iframes, plugins,
and canvas so | 1963 // We need to run through adjustStyleDifference() for iframes, plugins,
and canvas so |
| 1962 // style sharing is disabled for them. That should ensure that we never
hit this code path. | 1964 // style sharing is disabled for them. That should ensure that we never
hit this code path. |
| 1963 ASSERT(!isRenderIFrame() && !isEmbeddedObject() && !isCanvas()); | 1965 ASSERT(!isRenderIFrame() && !isEmbeddedObject() && !isCanvas()); |
| 1964 return; | 1966 return; |
| 1965 } | 1967 } |
| 1966 | 1968 |
| 1967 StyleDifference diff = StyleDifferenceEqual; | 1969 StyleDifference diff; |
| 1968 unsigned contextSensitiveProperties = ContextSensitivePropertyNone; | |
| 1969 if (m_style) | 1970 if (m_style) |
| 1970 diff = m_style->visualInvalidationDiff(*style, contextSensitivePropertie
s); | 1971 diff = m_style->visualInvalidationDiff(*style); |
| 1971 | 1972 |
| 1972 diff = adjustStyleDifference(diff, contextSensitiveProperties); | 1973 diff = adjustStyleDifference(diff); |
| 1973 | 1974 |
| 1974 styleWillChange(diff, *style); | 1975 styleWillChange(diff, *style); |
| 1975 | 1976 |
| 1976 RefPtr<RenderStyle> oldStyle = m_style.release(); | 1977 RefPtr<RenderStyle> oldStyle = m_style.release(); |
| 1977 setStyleInternal(style); | 1978 setStyleInternal(style); |
| 1978 | 1979 |
| 1979 updateFillImages(oldStyle ? oldStyle->backgroundLayers() : 0, m_style ? m_st
yle->backgroundLayers() : 0); | 1980 updateFillImages(oldStyle ? oldStyle->backgroundLayers() : 0, m_style ? m_st
yle->backgroundLayers() : 0); |
| 1980 updateFillImages(oldStyle ? oldStyle->maskLayers() : 0, m_style ? m_style->m
askLayers() : 0); | 1981 updateFillImages(oldStyle ? oldStyle->maskLayers() : 0, m_style ? m_style->m
askLayers() : 0); |
| 1981 | 1982 |
| 1982 updateImage(oldStyle ? oldStyle->borderImage().image() : 0, m_style ? m_styl
e->borderImage().image() : 0); | 1983 updateImage(oldStyle ? oldStyle->borderImage().image() : 0, m_style ? m_styl
e->borderImage().image() : 0); |
| 1983 updateImage(oldStyle ? oldStyle->maskBoxImage().image() : 0, m_style ? m_sty
le->maskBoxImage().image() : 0); | 1984 updateImage(oldStyle ? oldStyle->maskBoxImage().image() : 0, m_style ? m_sty
le->maskBoxImage().image() : 0); |
| 1984 | 1985 |
| 1985 updateShapeImage(oldStyle ? oldStyle->shapeOutside() : 0, m_style ? m_style-
>shapeOutside() : 0); | 1986 updateShapeImage(oldStyle ? oldStyle->shapeOutside() : 0, m_style ? m_style-
>shapeOutside() : 0); |
| 1986 | 1987 |
| 1987 bool doesNotNeedLayout = !m_parent || isText(); | 1988 bool doesNotNeedLayout = !m_parent || isText(); |
| 1988 | 1989 |
| 1989 styleDidChange(diff, oldStyle.get()); | 1990 styleDidChange(diff, oldStyle.get()); |
| 1990 | 1991 |
| 1991 // FIXME: |this| might be destroyed here. This can currently happen for a Re
nderTextFragment when | 1992 // FIXME: |this| might be destroyed here. This can currently happen for a Re
nderTextFragment when |
| 1992 // its first-letter block gets an update in RenderTextFragment::styleDidChan
ge. For RenderTextFragment(s), | 1993 // its first-letter block gets an update in RenderTextFragment::styleDidChan
ge. For RenderTextFragment(s), |
| 1993 // we will safely bail out with the doesNotNeedLayout flag. We might want to
broaden this condition | 1994 // we will safely bail out with the doesNotNeedLayout flag. We might want to
broaden this condition |
| 1994 // in the future as we move renderer changes out of layout and into style ch
anges. | 1995 // in the future as we move renderer changes out of layout and into style ch
anges. |
| 1995 if (doesNotNeedLayout) | 1996 if (doesNotNeedLayout) |
| 1996 return; | 1997 return; |
| 1997 | 1998 |
| 1998 // Now that the layer (if any) has been updated, we need to adjust the diff
again, | 1999 // Now that the layer (if any) has been updated, we need to adjust the diff
again, |
| 1999 // check whether we should layout now, and decide if we need to repaint. | 2000 // check whether we should layout now, and decide if we need to repaint. |
| 2000 StyleDifference updatedDiff = adjustStyleDifference(diff, contextSensitivePr
operties); | 2001 StyleDifference updatedDiff = adjustStyleDifference(diff); |
| 2001 | 2002 |
| 2002 if (diff <= StyleDifferenceLayoutPositionedMovementOnly) { | 2003 if (!diff.needsFullLayout()) { |
| 2003 if (updatedDiff == StyleDifferenceLayout) | 2004 if (updatedDiff.needsFullLayout()) |
| 2004 setNeedsLayoutAndPrefWidthsRecalc(); | 2005 setNeedsLayoutAndPrefWidthsRecalc(); |
| 2005 else if (updatedDiff == StyleDifferenceLayoutPositionedMovementOnly) | 2006 else if (updatedDiff.needsPositionedMovementLayoutOnly()) |
| 2006 setNeedsPositionedMovementLayout(); | 2007 setNeedsPositionedMovementLayout(); |
| 2007 } | 2008 } |
| 2008 | 2009 |
| 2009 if (contextSensitiveProperties & ContextSensitivePropertyTransform && !needs
Layout()) { | 2010 if (diff.transformChanged() && !needsLayout()) { |
| 2010 if (RenderBlock* container = containingBlock()) | 2011 if (RenderBlock* container = containingBlock()) |
| 2011 container->setNeedsOverflowRecalcAfterStyleChange(); | 2012 container->setNeedsOverflowRecalcAfterStyleChange(); |
| 2012 if (isBox()) | 2013 if (isBox()) |
| 2013 toRenderBox(this)->updateLayerTransform(); | 2014 toRenderBox(this)->updateLayerTransform(); |
| 2014 } | 2015 } |
| 2015 | 2016 |
| 2016 if (updatedDiff == StyleDifferenceRepaint || updatedDiff == StyleDifferenceR
epaintLayer) { | 2017 if (updatedDiff.needsRepaint()) { |
| 2017 // Do a repaint with the new style now, e.g., for example if we go from | 2018 // Do a repaint with the new style now, e.g., for example if we go from |
| 2018 // not having an outline to having an outline. | 2019 // not having an outline to having an outline. |
| 2019 repaint(); | 2020 repaint(); |
| 2020 } | 2021 } |
| 2021 } | 2022 } |
| 2022 | 2023 |
| 2023 static inline bool rendererHasBackground(const RenderObject* renderer) | 2024 static inline bool rendererHasBackground(const RenderObject* renderer) |
| 2024 { | 2025 { |
| 2025 return renderer && renderer->hasBackground(); | 2026 return renderer && renderer->hasBackground(); |
| 2026 } | 2027 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2040 } | 2041 } |
| 2041 | 2042 |
| 2042 // Keep layer hierarchy visibility bits up to date if visibility changes
. | 2043 // Keep layer hierarchy visibility bits up to date if visibility changes
. |
| 2043 if (m_style->visibility() != newStyle.visibility()) { | 2044 if (m_style->visibility() != newStyle.visibility()) { |
| 2044 // We might not have an enclosing layer yet because we might not be
in the tree. | 2045 // We might not have an enclosing layer yet because we might not be
in the tree. |
| 2045 if (RenderLayer* layer = enclosingLayer()) { | 2046 if (RenderLayer* layer = enclosingLayer()) { |
| 2046 if (newStyle.visibility() == VISIBLE) { | 2047 if (newStyle.visibility() == VISIBLE) { |
| 2047 layer->setHasVisibleContent(); | 2048 layer->setHasVisibleContent(); |
| 2048 } else if (layer->hasVisibleContent() && (this == layer->rendere
r() || layer->renderer()->style()->visibility() != VISIBLE)) { | 2049 } else if (layer->hasVisibleContent() && (this == layer->rendere
r() || layer->renderer()->style()->visibility() != VISIBLE)) { |
| 2049 layer->dirtyVisibleContentStatus(); | 2050 layer->dirtyVisibleContentStatus(); |
| 2050 if (diff > StyleDifferenceRepaintLayer) | 2051 if (diff.needsLayout()) |
| 2051 repaint(); | 2052 repaint(); |
| 2052 } | 2053 } |
| 2053 } | 2054 } |
| 2054 } | 2055 } |
| 2055 | 2056 |
| 2056 if (m_parent && diff == StyleDifferenceRepaint) | 2057 if (m_parent && diff.needsRepaintObjectOnly()) |
| 2057 repaint(); | 2058 repaint(); |
| 2058 if (isFloating() && (m_style->floating() != newStyle.floating())) | 2059 if (isFloating() && (m_style->floating() != newStyle.floating())) |
| 2059 // For changes in float styles, we need to conceivably remove oursel
ves | 2060 // For changes in float styles, we need to conceivably remove oursel
ves |
| 2060 // from the floating objects list. | 2061 // from the floating objects list. |
| 2061 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); | 2062 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); |
| 2062 else if (isOutOfFlowPositioned() && (m_style->position() != newStyle.pos
ition())) | 2063 else if (isOutOfFlowPositioned() && (m_style->position() != newStyle.pos
ition())) |
| 2063 // For changes in positioning styles, we need to conceivably remove
ourselves | 2064 // For changes in positioning styles, we need to conceivably remove
ourselves |
| 2064 // from the positioned objects list. | 2065 // from the positioned objects list. |
| 2065 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); | 2066 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); |
| 2066 | 2067 |
| 2067 s_affectsParentBlock = isFloatingOrOutOfFlowPositioned() | 2068 s_affectsParentBlock = isFloatingOrOutOfFlowPositioned() |
| 2068 && (!newStyle.isFloating() && !newStyle.hasOutOfFlowPosition()) | 2069 && (!newStyle.isFloating() && !newStyle.hasOutOfFlowPosition()) |
| 2069 && parent() && (parent()->isRenderBlockFlow() || parent()->isRenderI
nline()); | 2070 && parent() && (parent()->isRenderBlockFlow() || parent()->isRenderI
nline()); |
| 2070 | 2071 |
| 2071 // Clearing these bits is required to avoid leaving stale renderers. | 2072 // Clearing these bits is required to avoid leaving stale renderers. |
| 2072 // FIXME: We shouldn't need that hack if our logic was totally correct. | 2073 // FIXME: We shouldn't need that hack if our logic was totally correct. |
| 2073 if (diff == StyleDifferenceLayout || diff == StyleDifferenceLayoutPositi
onedMovementOnly) { | 2074 if (diff.needsFullLayout() || diff.needsPositionedMovementLayoutOnly())
{ |
| 2074 setFloating(false); | 2075 setFloating(false); |
| 2075 clearPositionedState(); | 2076 clearPositionedState(); |
| 2076 } | 2077 } |
| 2077 } else | 2078 } else { |
| 2078 s_affectsParentBlock = false; | 2079 s_affectsParentBlock = false; |
| 2080 } |
| 2079 | 2081 |
| 2080 if (view()->frameView()) { | 2082 if (view()->frameView()) { |
| 2081 bool shouldBlitOnFixedBackgroundImage = false; | 2083 bool shouldBlitOnFixedBackgroundImage = false; |
| 2082 #if ENABLE(FAST_MOBILE_SCROLLING) | 2084 #if ENABLE(FAST_MOBILE_SCROLLING) |
| 2083 // On low-powered/mobile devices, preventing blitting on a scroll can ca
use noticeable delays | 2085 // On low-powered/mobile devices, preventing blitting on a scroll can ca
use noticeable delays |
| 2084 // when scrolling a page with a fixed background image. As an optimizati
on, assuming there are | 2086 // when scrolling a page with a fixed background image. As an optimizati
on, assuming there are |
| 2085 // no fixed positoned elements on the page, we can acclerate scrolling (
via blitting) if we | 2087 // no fixed positoned elements on the page, we can acclerate scrolling (
via blitting) if we |
| 2086 // ignore the CSS property "background-attachment: fixed". | 2088 // ignore the CSS property "background-attachment: fixed". |
| 2087 shouldBlitOnFixedBackgroundImage = true; | 2089 shouldBlitOnFixedBackgroundImage = true; |
| 2088 #endif | 2090 #endif |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2136 } | 2138 } |
| 2137 | 2139 |
| 2138 void RenderObject::styleDidChange(StyleDifference diff, const RenderStyle* oldSt
yle) | 2140 void RenderObject::styleDidChange(StyleDifference diff, const RenderStyle* oldSt
yle) |
| 2139 { | 2141 { |
| 2140 if (s_affectsParentBlock) | 2142 if (s_affectsParentBlock) |
| 2141 handleDynamicFloatPositionChange(); | 2143 handleDynamicFloatPositionChange(); |
| 2142 | 2144 |
| 2143 if (!m_parent) | 2145 if (!m_parent) |
| 2144 return; | 2146 return; |
| 2145 | 2147 |
| 2146 if (diff == StyleDifferenceLayout) { | 2148 if (diff.needsFullLayout()) { |
| 2147 RenderCounter::rendererStyleChanged(*this, oldStyle, m_style.get()); | 2149 RenderCounter::rendererStyleChanged(*this, oldStyle, m_style.get()); |
| 2148 | 2150 |
| 2149 // If the object already needs layout, then setNeedsLayout won't do | 2151 // If the object already needs layout, then setNeedsLayout won't do |
| 2150 // any work. But if the containing block has changed, then we may need | 2152 // any work. But if the containing block has changed, then we may need |
| 2151 // to mark the new containing blocks for layout. The change that can | 2153 // to mark the new containing blocks for layout. The change that can |
| 2152 // directly affect the containing block of this object is a change to | 2154 // directly affect the containing block of this object is a change to |
| 2153 // the position style. | 2155 // the position style. |
| 2154 if (needsLayout() && oldStyle->position() != m_style->position()) | 2156 if (needsLayout() && oldStyle->position() != m_style->position()) |
| 2155 markContainingBlocksForLayout(); | 2157 markContainingBlocksForLayout(); |
| 2156 | 2158 |
| 2157 // Ditto. | 2159 // Ditto. |
| 2158 if (needsOverflowRecalcAfterStyleChange() && oldStyle->position() != m_s
tyle->position()) | 2160 if (needsOverflowRecalcAfterStyleChange() && oldStyle->position() != m_s
tyle->position()) |
| 2159 markContainingBlocksForOverflowRecalc(); | 2161 markContainingBlocksForOverflowRecalc(); |
| 2160 | 2162 |
| 2161 if (diff == StyleDifferenceLayout) | 2163 setNeedsLayoutAndPrefWidthsRecalc(); |
| 2162 setNeedsLayoutAndPrefWidthsRecalc(); | 2164 } else if (diff.needsPositionedMovementLayoutOnly()) { |
| 2163 } else if (diff == StyleDifferenceLayoutPositionedMovementOnly) | |
| 2164 setNeedsPositionedMovementLayout(); | 2165 setNeedsPositionedMovementLayout(); |
| 2166 } |
| 2165 | 2167 |
| 2166 // Don't check for repaint here; we need to wait until the layer has been | 2168 // Don't check for repaint here; we need to wait until the layer has been |
| 2167 // updated by subclasses before we know if we have to repaint (in setStyle()
). | 2169 // updated by subclasses before we know if we have to repaint (in setStyle()
). |
| 2168 | 2170 |
| 2169 if (oldStyle && !areCursorsEqual(oldStyle, style())) { | 2171 if (oldStyle && !areCursorsEqual(oldStyle, style())) { |
| 2170 if (LocalFrame* frame = this->frame()) | 2172 if (LocalFrame* frame = this->frame()) |
| 2171 frame->eventHandler().scheduleCursorUpdate(); | 2173 frame->eventHandler().scheduleCursorUpdate(); |
| 2172 } | 2174 } |
| 2173 } | 2175 } |
| 2174 | 2176 |
| (...skipping 1221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3396 { | 3398 { |
| 3397 if (object1) { | 3399 if (object1) { |
| 3398 const WebCore::RenderObject* root = object1; | 3400 const WebCore::RenderObject* root = object1; |
| 3399 while (root->parent()) | 3401 while (root->parent()) |
| 3400 root = root->parent(); | 3402 root = root->parent(); |
| 3401 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 3403 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
| 3402 } | 3404 } |
| 3403 } | 3405 } |
| 3404 | 3406 |
| 3405 #endif | 3407 #endif |
| OLD | NEW |