| 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. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. |
| 7 * All rights reserved. | 7 * All rights reserved. |
| 8 * Copyright (C) 2009 Google Inc. All rights reserved. | 8 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. | 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. |
| 10 * (http://www.torchmobile.com/) | 10 * (http://www.torchmobile.com/) |
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 object = toLayoutScrollbarPart(this)->scrollbarStyleSource(); | 919 object = toLayoutScrollbarPart(this)->scrollbarStyleSource(); |
| 920 if (!isTextOrSVGChild()) { | 920 if (!isTextOrSVGChild()) { |
| 921 if (m_style->position() == EPosition::kFixed) | 921 if (m_style->position() == EPosition::kFixed) |
| 922 return containerForFixedPosition(skipInfo); | 922 return containerForFixedPosition(skipInfo); |
| 923 if (m_style->position() == EPosition::kAbsolute) | 923 if (m_style->position() == EPosition::kAbsolute) |
| 924 return containingBlockForAbsolutePosition(skipInfo); | 924 return containingBlockForAbsolutePosition(skipInfo); |
| 925 } | 925 } |
| 926 if (isColumnSpanAll()) { | 926 if (isColumnSpanAll()) { |
| 927 object = spannerPlaceholder()->containingBlock(); | 927 object = spannerPlaceholder()->containingBlock(); |
| 928 } else { | 928 } else { |
| 929 while (object && ((object->isInline() && !object->isAtomicInlineLevel()) || | 929 while (object && |
| 930 !object->isLayoutBlock())) { | 930 ((object->isInline() && !object->isAtomicInlineLevel()) || |
| 931 !object->isLayoutBlock())) { |
| 931 if (skipInfo) | 932 if (skipInfo) |
| 932 skipInfo->update(*object); | 933 skipInfo->update(*object); |
| 933 object = object->parent(); | 934 object = object->parent(); |
| 934 } | 935 } |
| 935 } | 936 } |
| 936 | 937 |
| 937 if (!object || !object->isLayoutBlock()) | 938 if (!object || !object->isLayoutBlock()) |
| 938 return nullptr; // This can still happen in case of an orphaned tree | 939 return nullptr; // This can still happen in case of an orphaned tree |
| 939 | 940 |
| 940 return toLayoutBlock(object); | 941 return toLayoutBlock(object); |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1456 if (!isSVGRoot()) | 1457 if (!isSVGRoot()) |
| 1457 diff.setNeedsFullLayout(); | 1458 diff.setNeedsFullLayout(); |
| 1458 } | 1459 } |
| 1459 | 1460 |
| 1460 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1461 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1461 // If transform changed, and the layer does not paint into its own separate | 1462 // If transform changed, and the layer does not paint into its own separate |
| 1462 // backing, then we need to invalidate paints. | 1463 // backing, then we need to invalidate paints. |
| 1463 if (diff.transformChanged()) { | 1464 if (diff.transformChanged()) { |
| 1464 // Text nodes share style with their parents but transforms don't apply to | 1465 // Text nodes share style with their parents but transforms don't apply to |
| 1465 // them, hence the !isText() check. | 1466 // them, hence the !isText() check. |
| 1466 if (!isText() && (!hasLayer() || | 1467 if (!isText() && |
| 1467 !toLayoutBoxModelObject(this) | 1468 (!hasLayer() || |
| 1468 ->layer() | 1469 !toLayoutBoxModelObject(this) |
| 1469 ->hasStyleDeterminedDirectCompositingReasons())) | 1470 ->layer() |
| 1471 ->hasStyleDeterminedDirectCompositingReasons())) |
| 1470 diff.setNeedsPaintInvalidationSubtree(); | 1472 diff.setNeedsPaintInvalidationSubtree(); |
| 1471 } | 1473 } |
| 1472 | 1474 |
| 1473 // If opacity or zIndex changed, and the layer does not paint into its own | 1475 // If opacity or zIndex changed, and the layer does not paint into its own |
| 1474 // separate backing, then we need to invalidate paints (also | 1476 // separate backing, then we need to invalidate paints (also |
| 1475 // ignoring text nodes). | 1477 // ignoring text nodes). |
| 1476 if (diff.opacityChanged() || diff.zIndexChanged()) { | 1478 if (diff.opacityChanged() || diff.zIndexChanged()) { |
| 1477 if (!isText() && (!hasLayer() || | 1479 if (!isText() && |
| 1478 !toLayoutBoxModelObject(this) | 1480 (!hasLayer() || |
| 1479 ->layer() | 1481 !toLayoutBoxModelObject(this) |
| 1480 ->hasStyleDeterminedDirectCompositingReasons())) | 1482 ->layer() |
| 1483 ->hasStyleDeterminedDirectCompositingReasons())) |
| 1481 diff.setNeedsPaintInvalidationSubtree(); | 1484 diff.setNeedsPaintInvalidationSubtree(); |
| 1482 } | 1485 } |
| 1483 | 1486 |
| 1484 // If filter changed, and the layer does not paint into its own separate | 1487 // If filter changed, and the layer does not paint into its own separate |
| 1485 // backing or it paints with filters, then we need to invalidate paints. | 1488 // backing or it paints with filters, then we need to invalidate paints. |
| 1486 if (diff.filterChanged() && hasLayer()) { | 1489 if (diff.filterChanged() && hasLayer()) { |
| 1487 PaintLayer* layer = toLayoutBoxModelObject(this)->layer(); | 1490 PaintLayer* layer = toLayoutBoxModelObject(this)->layer(); |
| 1488 if (!layer->hasStyleDeterminedDirectCompositingReasons() || | 1491 if (!layer->hasStyleDeterminedDirectCompositingReasons() || |
| 1489 layer->paintsWithFilters()) | 1492 layer->paintsWithFilters()) |
| 1490 diff.setNeedsPaintInvalidationSubtree(); | 1493 diff.setNeedsPaintInvalidationSubtree(); |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1814 } | 1817 } |
| 1815 | 1818 |
| 1816 static bool areNonIdenticalCursorListsEqual(const ComputedStyle* a, | 1819 static bool areNonIdenticalCursorListsEqual(const ComputedStyle* a, |
| 1817 const ComputedStyle* b) { | 1820 const ComputedStyle* b) { |
| 1818 ASSERT(a->cursors() != b->cursors()); | 1821 ASSERT(a->cursors() != b->cursors()); |
| 1819 return a->cursors() && b->cursors() && *a->cursors() == *b->cursors(); | 1822 return a->cursors() && b->cursors() && *a->cursors() == *b->cursors(); |
| 1820 } | 1823 } |
| 1821 | 1824 |
| 1822 static inline bool areCursorsEqual(const ComputedStyle* a, | 1825 static inline bool areCursorsEqual(const ComputedStyle* a, |
| 1823 const ComputedStyle* b) { | 1826 const ComputedStyle* b) { |
| 1824 return a->cursor() == b->cursor() && (a->cursors() == b->cursors() || | 1827 return a->cursor() == b->cursor() && |
| 1825 areNonIdenticalCursorListsEqual(a, b)); | 1828 (a->cursors() == b->cursors() || |
| 1829 areNonIdenticalCursorListsEqual(a, b)); |
| 1826 } | 1830 } |
| 1827 | 1831 |
| 1828 void LayoutObject::setScrollAnchorDisablingStyleChangedOnAncestor() { | 1832 void LayoutObject::setScrollAnchorDisablingStyleChangedOnAncestor() { |
| 1829 // Walk up the parent chain and find the first scrolling block to disable | 1833 // Walk up the parent chain and find the first scrolling block to disable |
| 1830 // scroll anchoring on. | 1834 // scroll anchoring on. |
| 1831 LayoutObject* object = parent(); | 1835 LayoutObject* object = parent(); |
| 1832 Element* viewportDefiningElement = document().viewportDefiningElement(); | 1836 Element* viewportDefiningElement = document().viewportDefiningElement(); |
| 1833 while (object) { | 1837 while (object) { |
| 1834 if (object->isLayoutBlock()) { | 1838 if (object->isLayoutBlock()) { |
| 1835 LayoutBlock* block = toLayoutBlock(object); | 1839 LayoutBlock* block = toLayoutBlock(object); |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2084 | 2088 |
| 2085 // Text objects just copy their parent's computed style, so we need to ignore | 2089 // Text objects just copy their parent's computed style, so we need to ignore |
| 2086 // them. | 2090 // them. |
| 2087 bool preserve3D = | 2091 bool preserve3D = |
| 2088 mode & UseTransforms && | 2092 mode & UseTransforms && |
| 2089 ((container->style()->preserves3D() && !container->isText()) || | 2093 ((container->style()->preserves3D() && !container->isText()) || |
| 2090 (style()->preserves3D() && !isText())); | 2094 (style()->preserves3D() && !isText())); |
| 2091 if (mode & UseTransforms && shouldUseTransformFromContainer(container)) { | 2095 if (mode & UseTransforms && shouldUseTransformFromContainer(container)) { |
| 2092 TransformationMatrix t; | 2096 TransformationMatrix t; |
| 2093 getTransformFromContainer(container, containerOffset, t); | 2097 getTransformFromContainer(container, containerOffset, t); |
| 2094 transformState.applyTransform(t, preserve3D | 2098 transformState.applyTransform(t, |
| 2095 ? TransformState::AccumulateTransform | 2099 preserve3D |
| 2096 : TransformState::FlattenTransform); | 2100 ? TransformState::AccumulateTransform |
| 2101 : TransformState::FlattenTransform); |
| 2097 } else { | 2102 } else { |
| 2098 transformState.move(containerOffset.width(), containerOffset.height(), | 2103 transformState.move(containerOffset.width(), containerOffset.height(), |
| 2099 preserve3D ? TransformState::AccumulateTransform | 2104 preserve3D ? TransformState::AccumulateTransform |
| 2100 : TransformState::FlattenTransform); | 2105 : TransformState::FlattenTransform); |
| 2101 } | 2106 } |
| 2102 | 2107 |
| 2103 if (skipInfo.ancestorSkipped()) { | 2108 if (skipInfo.ancestorSkipped()) { |
| 2104 // There can't be a transform between |ancestor| and |o|, because transforms | 2109 // There can't be a transform between |ancestor| and |o|, because transforms |
| 2105 // create containers, so it should be safe to just subtract the delta | 2110 // create containers, so it should be safe to just subtract the delta |
| 2106 // between the ancestor and |o|. | 2111 // between the ancestor and |o|. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2154 if (!skipInfo.ancestorSkipped()) | 2159 if (!skipInfo.ancestorSkipped()) |
| 2155 container->mapAncestorToLocal(ancestor, transformState, mode); | 2160 container->mapAncestorToLocal(ancestor, transformState, mode); |
| 2156 | 2161 |
| 2157 LayoutSize containerOffset = offsetFromContainer(container); | 2162 LayoutSize containerOffset = offsetFromContainer(container); |
| 2158 bool preserve3D = | 2163 bool preserve3D = |
| 2159 mode & UseTransforms && | 2164 mode & UseTransforms && |
| 2160 (container->style()->preserves3D() || style()->preserves3D()); | 2165 (container->style()->preserves3D() || style()->preserves3D()); |
| 2161 if (mode & UseTransforms && shouldUseTransformFromContainer(container)) { | 2166 if (mode & UseTransforms && shouldUseTransformFromContainer(container)) { |
| 2162 TransformationMatrix t; | 2167 TransformationMatrix t; |
| 2163 getTransformFromContainer(container, containerOffset, t); | 2168 getTransformFromContainer(container, containerOffset, t); |
| 2164 transformState.applyTransform(t, preserve3D | 2169 transformState.applyTransform(t, |
| 2165 ? TransformState::AccumulateTransform | 2170 preserve3D |
| 2166 : TransformState::FlattenTransform); | 2171 ? TransformState::AccumulateTransform |
| 2172 : TransformState::FlattenTransform); |
| 2167 } else { | 2173 } else { |
| 2168 transformState.move(containerOffset.width(), containerOffset.height(), | 2174 transformState.move(containerOffset.width(), containerOffset.height(), |
| 2169 preserve3D ? TransformState::AccumulateTransform | 2175 preserve3D ? TransformState::AccumulateTransform |
| 2170 : TransformState::FlattenTransform); | 2176 : TransformState::FlattenTransform); |
| 2171 } | 2177 } |
| 2172 | 2178 |
| 2173 if (isLayoutFlowThread()) { | 2179 if (isLayoutFlowThread()) { |
| 2174 // Descending into a flow thread. Convert to the local coordinate space, | 2180 // Descending into a flow thread. Convert to the local coordinate space, |
| 2175 // i.e. flow thread coordinates. | 2181 // i.e. flow thread coordinates. |
| 2176 LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint()); | 2182 LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint()); |
| (...skipping 1318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3495 const blink::LayoutObject* root = object1; | 3501 const blink::LayoutObject* root = object1; |
| 3496 while (root->parent()) | 3502 while (root->parent()) |
| 3497 root = root->parent(); | 3503 root = root->parent(); |
| 3498 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3504 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
| 3499 } else { | 3505 } else { |
| 3500 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); | 3506 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); |
| 3501 } | 3507 } |
| 3502 } | 3508 } |
| 3503 | 3509 |
| 3504 #endif | 3510 #endif |
| OLD | NEW |