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 1490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1501 } | 1501 } |
1502 } | 1502 } |
1503 | 1503 |
1504 // TODO(wangxianzhu): We may avoid subtree paint invalidation on CSS clip | 1504 // TODO(wangxianzhu): We may avoid subtree paint invalidation on CSS clip |
1505 // change for SPv2. | 1505 // change for SPv2. |
1506 if (diff.cssClipChanged()) | 1506 if (diff.cssClipChanged()) |
1507 diff.setNeedsPaintInvalidationSubtree(); | 1507 diff.setNeedsPaintInvalidationSubtree(); |
1508 | 1508 |
1509 // Optimization: for decoration/color property changes, invalidation is only | 1509 // Optimization: for decoration/color property changes, invalidation is only |
1510 // needed if we have style or text affected by these properties. | 1510 // needed if we have style or text affected by these properties. |
1511 if (diff.textDecorationOrColorChanged() && !diff.needsPaintInvalidation()) { | 1511 if (diff.textDecorationOrColorChanged() && |
| 1512 !diff.needsFullPaintInvalidation()) { |
1512 if (style()->hasBorder() || style()->hasOutline() || | 1513 if (style()->hasBorder() || style()->hasOutline() || |
1513 style()->hasBackgroundRelatedColorReferencingCurrentColor() || | 1514 style()->hasBackgroundRelatedColorReferencingCurrentColor() || |
1514 // Skip any text nodes that do not contain text boxes. Whitespace cannot | 1515 // Skip any text nodes that do not contain text boxes. Whitespace cannot |
1515 // be skipped or we will miss invalidating decorations (e.g., | 1516 // be skipped or we will miss invalidating decorations (e.g., |
1516 // underlines). | 1517 // underlines). |
1517 (isText() && !isBR() && toLayoutText(this)->hasTextBoxes()) || | 1518 (isText() && !isBR() && toLayoutText(this)->hasTextBoxes()) || |
1518 (isSVG() && style()->svgStyle().isFillColorCurrentColor()) || | 1519 (isSVG() && style()->svgStyle().isFillColorCurrentColor()) || |
1519 (isSVG() && style()->svgStyle().isStrokeColorCurrentColor()) || | 1520 (isSVG() && style()->svgStyle().isStrokeColorCurrentColor()) || |
1520 isListMarker()) | 1521 isListMarker()) |
1521 diff.setNeedsPaintInvalidationObject(); | 1522 diff.setNeedsPaintInvalidationObject(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 return; | 1558 return; |
1558 } | 1559 } |
1559 | 1560 |
1560 setStyle(std::move(pseudoStyle)); | 1561 setStyle(std::move(pseudoStyle)); |
1561 } | 1562 } |
1562 | 1563 |
1563 void LayoutObject::firstLineStyleDidChange(const ComputedStyle& oldStyle, | 1564 void LayoutObject::firstLineStyleDidChange(const ComputedStyle& oldStyle, |
1564 const ComputedStyle& newStyle) { | 1565 const ComputedStyle& newStyle) { |
1565 StyleDifference diff = oldStyle.visualInvalidationDiff(newStyle); | 1566 StyleDifference diff = oldStyle.visualInvalidationDiff(newStyle); |
1566 | 1567 |
1567 if (diff.needsPaintInvalidation() || diff.textDecorationOrColorChanged()) { | 1568 if (diff.needsFullPaintInvalidation() || |
| 1569 diff.textDecorationOrColorChanged()) { |
1568 // We need to invalidate all inline boxes in the first line, because they | 1570 // We need to invalidate all inline boxes in the first line, because they |
1569 // need to be repainted with the new style, e.g. background, font style, | 1571 // need to be repainted with the new style, e.g. background, font style, |
1570 // etc. | 1572 // etc. |
1571 LayoutBlockFlow* firstLineContainer = nullptr; | 1573 LayoutBlockFlow* firstLineContainer = nullptr; |
1572 if (behavesLikeBlockContainer()) { | 1574 if (behavesLikeBlockContainer()) { |
1573 // This object is a LayoutBlock having PseudoIdFirstLine pseudo style | 1575 // This object is a LayoutBlock having PseudoIdFirstLine pseudo style |
1574 // changed. | 1576 // changed. |
1575 firstLineContainer = | 1577 firstLineContainer = |
1576 toLayoutBlock(this)->nearestInnerBlockWithFirstLine(); | 1578 toLayoutBlock(this)->nearestInnerBlockWithFirstLine(); |
1577 } else if (isLayoutInline()) { | 1579 } else if (isLayoutInline()) { |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1896 if (oldStyle && !areCursorsEqual(oldStyle, style())) { | 1898 if (oldStyle && !areCursorsEqual(oldStyle, style())) { |
1897 if (LocalFrame* frame = this->frame()) { | 1899 if (LocalFrame* frame = this->frame()) { |
1898 // Cursor update scheduling is done by the local root, which is the main | 1900 // Cursor update scheduling is done by the local root, which is the main |
1899 // frame if there are no RemoteFrame ancestors in the frame tree. Use of | 1901 // frame if there are no RemoteFrame ancestors in the frame tree. Use of |
1900 // localFrameRoot() is discouraged but will change when cursor update | 1902 // localFrameRoot() is discouraged but will change when cursor update |
1901 // scheduling is moved from EventHandler to PageEventHandler. | 1903 // scheduling is moved from EventHandler to PageEventHandler. |
1902 frame->localFrameRoot()->eventHandler().scheduleCursorUpdate(); | 1904 frame->localFrameRoot()->eventHandler().scheduleCursorUpdate(); |
1903 } | 1905 } |
1904 } | 1906 } |
1905 | 1907 |
1906 if (diff.needsPaintInvalidation() && oldStyle) { | 1908 if (diff.needsFullPaintInvalidation() && oldStyle) { |
1907 if (resolveColor(*oldStyle, CSSPropertyBackgroundColor) != | 1909 if (resolveColor(*oldStyle, CSSPropertyBackgroundColor) != |
1908 resolveColor(CSSPropertyBackgroundColor) || | 1910 resolveColor(CSSPropertyBackgroundColor) || |
1909 oldStyle->backgroundLayers() != styleRef().backgroundLayers()) | 1911 oldStyle->backgroundLayers() != styleRef().backgroundLayers()) |
1910 setBackgroundChangedSinceLastPaintInvalidation(); | 1912 setBackgroundChangedSinceLastPaintInvalidation(); |
1911 } | 1913 } |
1912 } | 1914 } |
1913 | 1915 |
1914 void LayoutObject::propagateStyleToAnonymousChildren() { | 1916 void LayoutObject::propagateStyleToAnonymousChildren() { |
1915 // FIXME: We could save this call when the change only affected non-inherited | 1917 // FIXME: We could save this call when the change only affected non-inherited |
1916 // properties. | 1918 // properties. |
(...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3529 const blink::LayoutObject* root = object1; | 3531 const blink::LayoutObject* root = object1; |
3530 while (root->parent()) | 3532 while (root->parent()) |
3531 root = root->parent(); | 3533 root = root->parent(); |
3532 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3534 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
3533 } else { | 3535 } else { |
3534 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); | 3536 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); |
3535 } | 3537 } |
3536 } | 3538 } |
3537 | 3539 |
3538 #endif | 3540 #endif |
OLD | NEW |