Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: Source/core/layout/LayoutObject.cpp

Issue 1033943002: Rename LayoutStyle to papayawhip (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ensureComputedStyle Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/layout/LayoutObject.h ('k') | Source/core/layout/LayoutObjectChildList.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 ASSERT(isMainThread()); 144 ASSERT(isMainThread());
145 return partitionAlloc(Partitions::getRenderingPartition(), sz); 145 return partitionAlloc(Partitions::getRenderingPartition(), sz);
146 } 146 }
147 147
148 void LayoutObject::operator delete(void* ptr) 148 void LayoutObject::operator delete(void* ptr)
149 { 149 {
150 ASSERT(isMainThread()); 150 ASSERT(isMainThread());
151 partitionFree(ptr); 151 partitionFree(ptr);
152 } 152 }
153 153
154 LayoutObject* LayoutObject::createObject(Element* element, const LayoutStyle& st yle) 154 LayoutObject* LayoutObject::createObject(Element* element, const ComputedStyle& style)
155 { 155 {
156 ASSERT(isAllowedToModifyRenderTreeStructure(element->document())); 156 ASSERT(isAllowedToModifyRenderTreeStructure(element->document()));
157 157
158 // Minimal support for content properties replacing an entire element. 158 // Minimal support for content properties replacing an entire element.
159 // Works only if we have exactly one piece of content and it's a URL. 159 // Works only if we have exactly one piece of content and it's a URL.
160 // Otherwise acts as if we didn't support this feature. 160 // Otherwise acts as if we didn't support this feature.
161 const ContentData* contentData = style.contentData(); 161 const ContentData* contentData = style.contentData();
162 if (contentData && !contentData->next() && contentData->isImage() && !elemen t->isPseudoElement()) { 162 if (contentData && !contentData->next() && contentData->isImage() && !elemen t->isPseudoElement()) {
163 LayoutImage* image = new LayoutImage(element); 163 LayoutImage* image = new LayoutImage(element);
164 // LayoutImageResourceStyleImage requires a style being present on the i mage but we don't want to 164 // LayoutImageResourceStyleImage requires a style being present on the i mage but we don't want to
165 // trigger a style change now as the node is not fully attached. Moving this code to style change 165 // trigger a style change now as the node is not fully attached. Moving this code to style change
166 // doesn't make sense as it should be run once at renderer creation. 166 // doesn't make sense as it should be run once at renderer creation.
167 image->setStyleInternal(const_cast<LayoutStyle*>(&style)); 167 image->setStyleInternal(const_cast<ComputedStyle*>(&style));
168 if (const StyleImage* styleImage = toImageContentData(contentData)->imag e()) { 168 if (const StyleImage* styleImage = toImageContentData(contentData)->imag e()) {
169 image->setImageResource(LayoutImageResourceStyleImage::create(const_ cast<StyleImage*>(styleImage))); 169 image->setImageResource(LayoutImageResourceStyleImage::create(const_ cast<StyleImage*>(styleImage)));
170 image->setIsGeneratedContent(); 170 image->setIsGeneratedContent();
171 } else { 171 } else {
172 image->setImageResource(LayoutImageResource::create()); 172 image->setImageResource(LayoutImageResource::create());
173 } 173 }
174 image->setStyleInternal(nullptr); 174 image->setStyleInternal(nullptr);
175 return image; 175 return image;
176 } 176 }
177 177
(...skipping 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1516 bool LayoutObject::isSelectable() const 1516 bool LayoutObject::isSelectable() const
1517 { 1517 {
1518 return !isInert() && !(style()->userSelect() == SELECT_NONE && style()->user Modify() == READ_ONLY); 1518 return !isInert() && !(style()->userSelect() == SELECT_NONE && style()->user Modify() == READ_ONLY);
1519 } 1519 }
1520 1520
1521 Color LayoutObject::selectionBackgroundColor() const 1521 Color LayoutObject::selectionBackgroundColor() const
1522 { 1522 {
1523 if (!isSelectable()) 1523 if (!isSelectable())
1524 return Color::transparent; 1524 return Color::transparent;
1525 1525
1526 if (RefPtr<LayoutStyle> pseudoStyle = getUncachedPseudoStyleFromParentOrShad owHost()) 1526 if (RefPtr<ComputedStyle> pseudoStyle = getUncachedPseudoStyleFromParentOrSh adowHost())
1527 return resolveColor(*pseudoStyle, CSSPropertyBackgroundColor).blendWithW hite(); 1527 return resolveColor(*pseudoStyle, CSSPropertyBackgroundColor).blendWithW hite();
1528 return frame()->selection().isFocusedAndActive() ? 1528 return frame()->selection().isFocusedAndActive() ?
1529 LayoutTheme::theme().activeSelectionBackgroundColor() : 1529 LayoutTheme::theme().activeSelectionBackgroundColor() :
1530 LayoutTheme::theme().inactiveSelectionBackgroundColor(); 1530 LayoutTheme::theme().inactiveSelectionBackgroundColor();
1531 } 1531 }
1532 1532
1533 Color LayoutObject::selectionColor(int colorProperty) const 1533 Color LayoutObject::selectionColor(int colorProperty) const
1534 { 1534 {
1535 // If the element is unselectable, or we are only painting the selection, 1535 // If the element is unselectable, or we are only painting the selection,
1536 // don't override the foreground color with the selection foreground color. 1536 // don't override the foreground color with the selection foreground color.
1537 if (!isSelectable() || (frame()->view()->paintBehavior() & PaintBehaviorSele ctionOnly)) 1537 if (!isSelectable() || (frame()->view()->paintBehavior() & PaintBehaviorSele ctionOnly))
1538 return resolveColor(colorProperty); 1538 return resolveColor(colorProperty);
1539 1539
1540 if (RefPtr<LayoutStyle> pseudoStyle = getUncachedPseudoStyleFromParentOrShad owHost()) 1540 if (RefPtr<ComputedStyle> pseudoStyle = getUncachedPseudoStyleFromParentOrSh adowHost())
1541 return resolveColor(*pseudoStyle, colorProperty); 1541 return resolveColor(*pseudoStyle, colorProperty);
1542 if (!LayoutTheme::theme().supportsSelectionForegroundColors()) 1542 if (!LayoutTheme::theme().supportsSelectionForegroundColors())
1543 return resolveColor(colorProperty); 1543 return resolveColor(colorProperty);
1544 return frame()->selection().isFocusedAndActive() ? 1544 return frame()->selection().isFocusedAndActive() ?
1545 LayoutTheme::theme().activeSelectionForegroundColor() : 1545 LayoutTheme::theme().activeSelectionForegroundColor() :
1546 LayoutTheme::theme().inactiveSelectionForegroundColor(); 1546 LayoutTheme::theme().inactiveSelectionForegroundColor();
1547 } 1547 }
1548 1548
1549 Color LayoutObject::selectionForegroundColor() const 1549 Color LayoutObject::selectionForegroundColor() const
1550 { 1550 {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 1624
1625 // If we have no layer(), just treat a PaintInvalidationLayer hint as a norm al paint invalidation. 1625 // If we have no layer(), just treat a PaintInvalidationLayer hint as a norm al paint invalidation.
1626 if (diff.needsPaintInvalidationLayer() && !hasLayer()) { 1626 if (diff.needsPaintInvalidationLayer() && !hasLayer()) {
1627 diff.clearNeedsPaintInvalidation(); 1627 diff.clearNeedsPaintInvalidation();
1628 diff.setNeedsPaintInvalidationObject(); 1628 diff.setNeedsPaintInvalidationObject();
1629 } 1629 }
1630 1630
1631 return diff; 1631 return diff;
1632 } 1632 }
1633 1633
1634 void LayoutObject::setPseudoStyle(PassRefPtr<LayoutStyle> pseudoStyle) 1634 void LayoutObject::setPseudoStyle(PassRefPtr<ComputedStyle> pseudoStyle)
1635 { 1635 {
1636 ASSERT(pseudoStyle->styleType() == BEFORE || pseudoStyle->styleType() == AFT ER || pseudoStyle->styleType() == FIRST_LETTER); 1636 ASSERT(pseudoStyle->styleType() == BEFORE || pseudoStyle->styleType() == AFT ER || pseudoStyle->styleType() == FIRST_LETTER);
1637 1637
1638 // FIXME: We should consider just making all pseudo items use an inherited s tyle. 1638 // FIXME: We should consider just making all pseudo items use an inherited s tyle.
1639 1639
1640 // Images are special and must inherit the pseudoStyle so the width and heig ht of 1640 // Images are special and must inherit the pseudoStyle so the width and heig ht of
1641 // the pseudo element doesn't change the size of the image. In all other cas es we 1641 // the pseudo element doesn't change the size of the image. In all other cas es we
1642 // can just share the style. 1642 // can just share the style.
1643 // 1643 //
1644 // Quotes are also LayoutInline, so we need to create an inherited style to avoid 1644 // Quotes are also LayoutInline, so we need to create an inherited style to avoid
1645 // getting an inline with positioning or an invalid display. 1645 // getting an inline with positioning or an invalid display.
1646 // 1646 //
1647 if (isImage() || isQuote()) { 1647 if (isImage() || isQuote()) {
1648 RefPtr<LayoutStyle> style = LayoutStyle::create(); 1648 RefPtr<ComputedStyle> style = ComputedStyle::create();
1649 style->inheritFrom(*pseudoStyle); 1649 style->inheritFrom(*pseudoStyle);
1650 setStyle(style.release()); 1650 setStyle(style.release());
1651 return; 1651 return;
1652 } 1652 }
1653 1653
1654 setStyle(pseudoStyle); 1654 setStyle(pseudoStyle);
1655 } 1655 }
1656 1656
1657 void LayoutObject::markContainingBlocksForOverflowRecalc() 1657 void LayoutObject::markContainingBlocksForOverflowRecalc()
1658 { 1658 {
1659 for (LayoutBlock* container = containingBlock(); container && !container->ch ildNeedsOverflowRecalcAfterStyleChange(); container = container->containingBlock ()) 1659 for (LayoutBlock* container = containingBlock(); container && !container->ch ildNeedsOverflowRecalcAfterStyleChange(); container = container->containingBlock ())
1660 container->setChildNeedsOverflowRecalcAfterStyleChange(true); 1660 container->setChildNeedsOverflowRecalcAfterStyleChange(true);
1661 } 1661 }
1662 1662
1663 void LayoutObject::setNeedsOverflowRecalcAfterStyleChange() 1663 void LayoutObject::setNeedsOverflowRecalcAfterStyleChange()
1664 { 1664 {
1665 bool neededRecalc = needsOverflowRecalcAfterStyleChange(); 1665 bool neededRecalc = needsOverflowRecalcAfterStyleChange();
1666 setSelfNeedsOverflowRecalcAfterStyleChange(true); 1666 setSelfNeedsOverflowRecalcAfterStyleChange(true);
1667 if (!neededRecalc) 1667 if (!neededRecalc)
1668 markContainingBlocksForOverflowRecalc(); 1668 markContainingBlocksForOverflowRecalc();
1669 } 1669 }
1670 1670
1671 void LayoutObject::setStyle(PassRefPtr<LayoutStyle> style) 1671 void LayoutObject::setStyle(PassRefPtr<ComputedStyle> style)
1672 { 1672 {
1673 ASSERT(style); 1673 ASSERT(style);
1674 1674
1675 if (m_style == style) { 1675 if (m_style == style) {
1676 // We need to run through adjustStyleDifference() for iframes, plugins, and canvas so 1676 // We need to run through adjustStyleDifference() for iframes, plugins, and canvas so
1677 // style sharing is disabled for them. That should ensure that we never hit this code path. 1677 // style sharing is disabled for them. That should ensure that we never hit this code path.
1678 ASSERT(!isLayoutIFrame() && !isEmbeddedObject() && !isCanvas()); 1678 ASSERT(!isLayoutIFrame() && !isEmbeddedObject() && !isCanvas());
1679 return; 1679 return;
1680 } 1680 }
1681 1681
1682 StyleDifference diff; 1682 StyleDifference diff;
1683 if (m_style) 1683 if (m_style)
1684 diff = m_style->visualInvalidationDiff(*style); 1684 diff = m_style->visualInvalidationDiff(*style);
1685 1685
1686 diff = adjustStyleDifference(diff); 1686 diff = adjustStyleDifference(diff);
1687 1687
1688 styleWillChange(diff, *style); 1688 styleWillChange(diff, *style);
1689 1689
1690 RefPtr<LayoutStyle> oldStyle = m_style.release(); 1690 RefPtr<ComputedStyle> oldStyle = m_style.release();
1691 setStyleInternal(style); 1691 setStyleInternal(style);
1692 1692
1693 updateFillImages(oldStyle ? &oldStyle->backgroundLayers() : 0, m_style->back groundLayers()); 1693 updateFillImages(oldStyle ? &oldStyle->backgroundLayers() : 0, m_style->back groundLayers());
1694 updateFillImages(oldStyle ? &oldStyle->maskLayers() : 0, m_style->maskLayers ()); 1694 updateFillImages(oldStyle ? &oldStyle->maskLayers() : 0, m_style->maskLayers ());
1695 1695
1696 updateImage(oldStyle ? oldStyle->borderImage().image() : 0, m_style->borderI mage().image()); 1696 updateImage(oldStyle ? oldStyle->borderImage().image() : 0, m_style->borderI mage().image());
1697 updateImage(oldStyle ? oldStyle->maskBoxImage().image() : 0, m_style->maskBo xImage().image()); 1697 updateImage(oldStyle ? oldStyle->maskBoxImage().image() : 0, m_style->maskBo xImage().image());
1698 1698
1699 updateShapeImage(oldStyle ? oldStyle->shapeOutside() : 0, m_style->shapeOuts ide()); 1699 updateShapeImage(oldStyle ? oldStyle->shapeOutside() : 0, m_style->shapeOuts ide());
1700 1700
(...skipping 28 matching lines...) Expand all
1729 toLayoutBoxModelObject(this)->layer()->setShouldDoFullPaintInvalidationI ncludingNonCompositingDescendants(); 1729 toLayoutBoxModelObject(this)->layer()->setShouldDoFullPaintInvalidationI ncludingNonCompositingDescendants();
1730 else if (diff.needsPaintInvalidationObject() || updatedDiff.needsPaintInvali dationObject()) 1730 else if (diff.needsPaintInvalidationObject() || updatedDiff.needsPaintInvali dationObject())
1731 setShouldDoFullPaintInvalidation(); 1731 setShouldDoFullPaintInvalidation();
1732 } 1732 }
1733 1733
1734 static inline bool rendererHasBackground(const LayoutObject* renderer) 1734 static inline bool rendererHasBackground(const LayoutObject* renderer)
1735 { 1735 {
1736 return renderer && renderer->hasBackground(); 1736 return renderer && renderer->hasBackground();
1737 } 1737 }
1738 1738
1739 void LayoutObject::styleWillChange(StyleDifference diff, const LayoutStyle& newS tyle) 1739 void LayoutObject::styleWillChange(StyleDifference diff, const ComputedStyle& ne wStyle)
1740 { 1740 {
1741 if (m_style) { 1741 if (m_style) {
1742 // If our z-index changes value or our visibility changes, 1742 // If our z-index changes value or our visibility changes,
1743 // we need to dirty our stacking context's z-order list. 1743 // we need to dirty our stacking context's z-order list.
1744 bool visibilityChanged = m_style->visibility() != newStyle.visibility() 1744 bool visibilityChanged = m_style->visibility() != newStyle.visibility()
1745 || m_style->zIndex() != newStyle.zIndex() 1745 || m_style->zIndex() != newStyle.zIndex()
1746 || m_style->hasAutoZIndex() != newStyle.hasAutoZIndex(); 1746 || m_style->hasAutoZIndex() != newStyle.hasAutoZIndex();
1747 if (visibilityChanged) { 1747 if (visibilityChanged) {
1748 document().setAnnotatedRegionsDirty(true); 1748 document().setAnnotatedRegionsDirty(true);
1749 if (AXObjectCache* cache = document().existingAXObjectCache()) 1749 if (AXObjectCache* cache = document().existingAXObjectCache())
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1821 TouchAction oldTouchAction = m_style ? m_style->touchAction() : TouchActionA uto; 1821 TouchAction oldTouchAction = m_style ? m_style->touchAction() : TouchActionA uto;
1822 if (node() && !node()->isTextNode() && (oldTouchAction == TouchActionAuto) ! = (newStyle.touchAction() == TouchActionAuto)) { 1822 if (node() && !node()->isTextNode() && (oldTouchAction == TouchActionAuto) ! = (newStyle.touchAction() == TouchActionAuto)) {
1823 EventHandlerRegistry& registry = document().frameHost()->eventHandlerReg istry(); 1823 EventHandlerRegistry& registry = document().frameHost()->eventHandlerReg istry();
1824 if (newStyle.touchAction() != TouchActionAuto) 1824 if (newStyle.touchAction() != TouchActionAuto)
1825 registry.didAddEventHandler(*node(), EventHandlerRegistry::TouchEven t); 1825 registry.didAddEventHandler(*node(), EventHandlerRegistry::TouchEven t);
1826 else 1826 else
1827 registry.didRemoveEventHandler(*node(), EventHandlerRegistry::TouchE vent); 1827 registry.didRemoveEventHandler(*node(), EventHandlerRegistry::TouchE vent);
1828 } 1828 }
1829 } 1829 }
1830 1830
1831 static bool areNonIdenticalCursorListsEqual(const LayoutStyle* a, const LayoutSt yle* b) 1831 static bool areNonIdenticalCursorListsEqual(const ComputedStyle* a, const Comput edStyle* b)
1832 { 1832 {
1833 ASSERT(a->cursors() != b->cursors()); 1833 ASSERT(a->cursors() != b->cursors());
1834 return a->cursors() && b->cursors() && *a->cursors() == *b->cursors(); 1834 return a->cursors() && b->cursors() && *a->cursors() == *b->cursors();
1835 } 1835 }
1836 1836
1837 static inline bool areCursorsEqual(const LayoutStyle* a, const LayoutStyle* b) 1837 static inline bool areCursorsEqual(const ComputedStyle* a, const ComputedStyle* b)
1838 { 1838 {
1839 return a->cursor() == b->cursor() && (a->cursors() == b->cursors() || areNon IdenticalCursorListsEqual(a, b)); 1839 return a->cursor() == b->cursor() && (a->cursors() == b->cursors() || areNon IdenticalCursorListsEqual(a, b));
1840 } 1840 }
1841 1841
1842 void LayoutObject::styleDidChange(StyleDifference diff, const LayoutStyle* oldSt yle) 1842 void LayoutObject::styleDidChange(StyleDifference diff, const ComputedStyle* old Style)
1843 { 1843 {
1844 if (s_affectsParentBlock) 1844 if (s_affectsParentBlock)
1845 handleDynamicFloatPositionChange(); 1845 handleDynamicFloatPositionChange();
1846 1846
1847 if (!m_parent) 1847 if (!m_parent)
1848 return; 1848 return;
1849 1849
1850 if (diff.needsFullLayout()) { 1850 if (diff.needsFullLayout()) {
1851 LayoutCounter::rendererStyleChanged(*this, oldStyle, *m_style); 1851 LayoutCounter::rendererStyleChanged(*this, oldStyle, *m_style);
1852 1852
(...skipping 30 matching lines...) Expand all
1883 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { 1883 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) {
1884 if (!child->isAnonymous() || child->style()->styleType() != NOPSEUDO) 1884 if (!child->isAnonymous() || child->style()->styleType() != NOPSEUDO)
1885 continue; 1885 continue;
1886 1886
1887 if (blockChildrenOnly && !child->isLayoutBlock()) 1887 if (blockChildrenOnly && !child->isLayoutBlock())
1888 continue; 1888 continue;
1889 1889
1890 if (child->isLayoutFullScreen() || child->isLayoutFullScreenPlaceholder( )) 1890 if (child->isLayoutFullScreen() || child->isLayoutFullScreenPlaceholder( ))
1891 continue; 1891 continue;
1892 1892
1893 RefPtr<LayoutStyle> newStyle = LayoutStyle::createAnonymousStyleWithDisp lay(styleRef(), child->style()->display()); 1893 RefPtr<ComputedStyle> newStyle = ComputedStyle::createAnonymousStyleWith Display(styleRef(), child->style()->display());
1894 if (!RuntimeEnabledFeatures::regionBasedColumnsEnabled()) { 1894 if (!RuntimeEnabledFeatures::regionBasedColumnsEnabled()) {
1895 if (style()->specifiesColumns()) { 1895 if (style()->specifiesColumns()) {
1896 if (child->style()->specifiesColumns()) 1896 if (child->style()->specifiesColumns())
1897 newStyle->inheritColumnPropertiesFrom(styleRef()); 1897 newStyle->inheritColumnPropertiesFrom(styleRef());
1898 if (child->style()->columnSpan()) 1898 if (child->style()->columnSpan())
1899 newStyle->setColumnSpan(ColumnSpanAll); 1899 newStyle->setColumnSpan(ColumnSpanAll);
1900 } 1900 }
1901 } 1901 }
1902 1902
1903 // Preserve the position style of anonymous block continuations as they can have relative position when 1903 // Preserve the position style of anonymous block continuations as they can have relative position when
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after
2647 { 2647 {
2648 setNormalChildNeedsLayout(true); 2648 setNormalChildNeedsLayout(true);
2649 layout(); 2649 layout();
2650 } 2650 }
2651 2651
2652 enum StyleCacheState { 2652 enum StyleCacheState {
2653 Cached, 2653 Cached,
2654 Uncached 2654 Uncached
2655 }; 2655 };
2656 2656
2657 static PassRefPtr<LayoutStyle> firstLineStyleForCachedUncachedType(StyleCacheSta te type, const LayoutObject* renderer, LayoutStyle* style) 2657 static PassRefPtr<ComputedStyle> firstLineStyleForCachedUncachedType(StyleCacheS tate type, const LayoutObject* renderer, ComputedStyle* style)
2658 { 2658 {
2659 const LayoutObject* rendererForFirstLineStyle = renderer; 2659 const LayoutObject* rendererForFirstLineStyle = renderer;
2660 if (renderer->isBeforeOrAfterContent()) 2660 if (renderer->isBeforeOrAfterContent())
2661 rendererForFirstLineStyle = renderer->parent(); 2661 rendererForFirstLineStyle = renderer->parent();
2662 2662
2663 if (rendererForFirstLineStyle->isLayoutBlockFlow() || rendererForFirstLineSt yle->isLayoutButton()) { 2663 if (rendererForFirstLineStyle->isLayoutBlockFlow() || rendererForFirstLineSt yle->isLayoutButton()) {
2664 if (LayoutBlock* firstLineBlock = rendererForFirstLineStyle->firstLineBl ock()) { 2664 if (LayoutBlock* firstLineBlock = rendererForFirstLineStyle->firstLineBl ock()) {
2665 if (type == Cached) 2665 if (type == Cached)
2666 return firstLineBlock->getCachedPseudoStyle(FIRST_LINE, style); 2666 return firstLineBlock->getCachedPseudoStyle(FIRST_LINE, style);
2667 return firstLineBlock->getUncachedPseudoStyle(PseudoStyleRequest(FIR ST_LINE), style, firstLineBlock == renderer ? style : 0); 2667 return firstLineBlock->getUncachedPseudoStyle(PseudoStyleRequest(FIR ST_LINE), style, firstLineBlock == renderer ? style : 0);
2668 } 2668 }
2669 } else if (!rendererForFirstLineStyle->isAnonymous() && rendererForFirstLine Style->isLayoutInline() 2669 } else if (!rendererForFirstLineStyle->isAnonymous() && rendererForFirstLine Style->isLayoutInline()
2670 && !rendererForFirstLineStyle->node()->isFirstLetterPseudoElement()) { 2670 && !rendererForFirstLineStyle->node()->isFirstLetterPseudoElement()) {
2671 const LayoutStyle* parentStyle = rendererForFirstLineStyle->parent()->fi rstLineStyle(); 2671 const ComputedStyle* parentStyle = rendererForFirstLineStyle->parent()-> firstLineStyle();
2672 if (parentStyle != rendererForFirstLineStyle->parent()->style()) { 2672 if (parentStyle != rendererForFirstLineStyle->parent()->style()) {
2673 if (type == Cached) { 2673 if (type == Cached) {
2674 // A first-line style is in effect. Cache a first-line style for ourselves. 2674 // A first-line style is in effect. Cache a first-line style for ourselves.
2675 rendererForFirstLineStyle->mutableStyleRef().setHasPseudoStyle(F IRST_LINE_INHERITED); 2675 rendererForFirstLineStyle->mutableStyleRef().setHasPseudoStyle(F IRST_LINE_INHERITED);
2676 return rendererForFirstLineStyle->getCachedPseudoStyle(FIRST_LIN E_INHERITED, parentStyle); 2676 return rendererForFirstLineStyle->getCachedPseudoStyle(FIRST_LIN E_INHERITED, parentStyle);
2677 } 2677 }
2678 return rendererForFirstLineStyle->getUncachedPseudoStyle(PseudoStyle Request(FIRST_LINE_INHERITED), parentStyle, style); 2678 return rendererForFirstLineStyle->getUncachedPseudoStyle(PseudoStyle Request(FIRST_LINE_INHERITED), parentStyle, style);
2679 } 2679 }
2680 } 2680 }
2681 return nullptr; 2681 return nullptr;
2682 } 2682 }
2683 2683
2684 PassRefPtr<LayoutStyle> LayoutObject::uncachedFirstLineStyle(LayoutStyle* style) const 2684 PassRefPtr<ComputedStyle> LayoutObject::uncachedFirstLineStyle(ComputedStyle* st yle) const
2685 { 2685 {
2686 if (!document().styleEngine().usesFirstLineRules()) 2686 if (!document().styleEngine().usesFirstLineRules())
2687 return nullptr; 2687 return nullptr;
2688 2688
2689 ASSERT(!isText()); 2689 ASSERT(!isText());
2690 2690
2691 return firstLineStyleForCachedUncachedType(Uncached, this, style); 2691 return firstLineStyleForCachedUncachedType(Uncached, this, style);
2692 } 2692 }
2693 2693
2694 LayoutStyle* LayoutObject::cachedFirstLineStyle() const 2694 ComputedStyle* LayoutObject::cachedFirstLineStyle() const
2695 { 2695 {
2696 ASSERT(document().styleEngine().usesFirstLineRules()); 2696 ASSERT(document().styleEngine().usesFirstLineRules());
2697 2697
2698 if (RefPtr<LayoutStyle> style = firstLineStyleForCachedUncachedType(Cached, isText() ? parent() : this, m_style.get())) 2698 if (RefPtr<ComputedStyle> style = firstLineStyleForCachedUncachedType(Cached , isText() ? parent() : this, m_style.get()))
2699 return style.get(); 2699 return style.get();
2700 2700
2701 return m_style.get(); 2701 return m_style.get();
2702 } 2702 }
2703 2703
2704 LayoutStyle* LayoutObject::getCachedPseudoStyle(PseudoId pseudo, const LayoutSty le* parentStyle) const 2704 ComputedStyle* LayoutObject::getCachedPseudoStyle(PseudoId pseudo, const Compute dStyle* parentStyle) const
2705 { 2705 {
2706 if (pseudo < FIRST_INTERNAL_PSEUDOID && !style()->hasPseudoStyle(pseudo)) 2706 if (pseudo < FIRST_INTERNAL_PSEUDOID && !style()->hasPseudoStyle(pseudo))
2707 return 0; 2707 return 0;
2708 2708
2709 LayoutStyle* cachedStyle = style()->getCachedPseudoStyle(pseudo); 2709 ComputedStyle* cachedStyle = style()->getCachedPseudoStyle(pseudo);
2710 if (cachedStyle) 2710 if (cachedStyle)
2711 return cachedStyle; 2711 return cachedStyle;
2712 2712
2713 RefPtr<LayoutStyle> result = getUncachedPseudoStyle(PseudoStyleRequest(pseud o), parentStyle); 2713 RefPtr<ComputedStyle> result = getUncachedPseudoStyle(PseudoStyleRequest(pse udo), parentStyle);
2714 if (result) 2714 if (result)
2715 return mutableStyleRef().addCachedPseudoStyle(result.release()); 2715 return mutableStyleRef().addCachedPseudoStyle(result.release());
2716 return 0; 2716 return 0;
2717 } 2717 }
2718 2718
2719 PassRefPtr<LayoutStyle> LayoutObject::getUncachedPseudoStyle(const PseudoStyleRe quest& pseudoStyleRequest, const LayoutStyle* parentStyle, const LayoutStyle* ow nStyle) const 2719 PassRefPtr<ComputedStyle> LayoutObject::getUncachedPseudoStyle(const PseudoStyle Request& pseudoStyleRequest, const ComputedStyle* parentStyle, const ComputedSty le* ownStyle) const
2720 { 2720 {
2721 if (pseudoStyleRequest.pseudoId < FIRST_INTERNAL_PSEUDOID && !ownStyle && !s tyle()->hasPseudoStyle(pseudoStyleRequest.pseudoId)) 2721 if (pseudoStyleRequest.pseudoId < FIRST_INTERNAL_PSEUDOID && !ownStyle && !s tyle()->hasPseudoStyle(pseudoStyleRequest.pseudoId))
2722 return nullptr; 2722 return nullptr;
2723 2723
2724 if (!parentStyle) { 2724 if (!parentStyle) {
2725 ASSERT(!ownStyle); 2725 ASSERT(!ownStyle);
2726 parentStyle = style(); 2726 parentStyle = style();
2727 } 2727 }
2728 2728
2729 if (!node()) 2729 if (!node())
2730 return nullptr; 2730 return nullptr;
2731 2731
2732 Element* element = Traversal<Element>::firstAncestorOrSelf(*node()); 2732 Element* element = Traversal<Element>::firstAncestorOrSelf(*node());
2733 if (!element) 2733 if (!element)
2734 return nullptr; 2734 return nullptr;
2735 2735
2736 if (pseudoStyleRequest.pseudoId == FIRST_LINE_INHERITED) { 2736 if (pseudoStyleRequest.pseudoId == FIRST_LINE_INHERITED) {
2737 RefPtr<LayoutStyle> result = document().ensureStyleResolver().styleForEl ement(element, parentStyle, DisallowStyleSharing); 2737 RefPtr<ComputedStyle> result = document().ensureStyleResolver().styleFor Element(element, parentStyle, DisallowStyleSharing);
2738 result->setStyleType(FIRST_LINE_INHERITED); 2738 result->setStyleType(FIRST_LINE_INHERITED);
2739 return result.release(); 2739 return result.release();
2740 } 2740 }
2741 2741
2742 return document().ensureStyleResolver().pseudoStyleForElement(element, pseud oStyleRequest, parentStyle); 2742 return document().ensureStyleResolver().pseudoStyleForElement(element, pseud oStyleRequest, parentStyle);
2743 } 2743 }
2744 2744
2745 PassRefPtr<LayoutStyle> LayoutObject::getUncachedPseudoStyleFromParentOrShadowHo st() const 2745 PassRefPtr<ComputedStyle> LayoutObject::getUncachedPseudoStyleFromParentOrShadow Host() const
2746 { 2746 {
2747 if (!node()) 2747 if (!node())
2748 return nullptr; 2748 return nullptr;
2749 2749
2750 if (ShadowRoot* root = node()->containingShadowRoot()) { 2750 if (ShadowRoot* root = node()->containingShadowRoot()) {
2751 if (root->type() == ShadowRoot::ClosedShadowRoot) { 2751 if (root->type() == ShadowRoot::ClosedShadowRoot) {
2752 if (Element* shadowHost = node()->shadowHost()) { 2752 if (Element* shadowHost = node()->shadowHost()) {
2753 return shadowHost->layoutObject()->getUncachedPseudoStyle(Pseudo StyleRequest(SELECTION)); 2753 return shadowHost->layoutObject()->getUncachedPseudoStyle(Pseudo StyleRequest(SELECTION));
2754 } 2754 }
2755 } 2755 }
2756 } 2756 }
2757 2757
2758 return getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); 2758 return getUncachedPseudoStyle(PseudoStyleRequest(SELECTION));
2759 } 2759 }
2760 2760
2761 void LayoutObject::getTextDecorations(unsigned decorations, AppliedTextDecoratio n& underline, AppliedTextDecoration& overline, AppliedTextDecoration& linethroug h, bool quirksMode, bool firstlineStyle) 2761 void LayoutObject::getTextDecorations(unsigned decorations, AppliedTextDecoratio n& underline, AppliedTextDecoration& overline, AppliedTextDecoration& linethroug h, bool quirksMode, bool firstlineStyle)
2762 { 2762 {
2763 LayoutObject* curr = this; 2763 LayoutObject* curr = this;
2764 const LayoutStyle* styleToUse = 0; 2764 const ComputedStyle* styleToUse = 0;
2765 unsigned currDecs = TextDecorationNone; 2765 unsigned currDecs = TextDecorationNone;
2766 Color resultColor; 2766 Color resultColor;
2767 TextDecorationStyle resultStyle; 2767 TextDecorationStyle resultStyle;
2768 do { 2768 do {
2769 styleToUse = curr->style(firstlineStyle); 2769 styleToUse = curr->style(firstlineStyle);
2770 currDecs = styleToUse->textDecoration(); 2770 currDecs = styleToUse->textDecoration();
2771 currDecs &= decorations; 2771 currDecs &= decorations;
2772 resultColor = styleToUse->visitedDependentColor(CSSPropertyTextDecoratio nColor); 2772 resultColor = styleToUse->visitedDependentColor(CSSPropertyTextDecoratio nColor);
2773 resultStyle = styleToUse->textDecorationStyle(); 2773 resultStyle = styleToUse->textDecorationStyle();
2774 // Parameter 'decorations' is cast as an int to enable the bitwise opera tions below. 2774 // Parameter 'decorations' is cast as an int to enable the bitwise opera tions below.
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
3230 { 3230 {
3231 if (object1) { 3231 if (object1) {
3232 const blink::LayoutObject* root = object1; 3232 const blink::LayoutObject* root = object1;
3233 while (root->parent()) 3233 while (root->parent())
3234 root = root->parent(); 3234 root = root->parent();
3235 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); 3235 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0);
3236 } 3236 }
3237 } 3237 }
3238 3238
3239 #endif 3239 #endif
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutObject.h ('k') | Source/core/layout/LayoutObjectChildList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698