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 2602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2613 rendererForFirstLineStyle = renderer->parent(); | 2613 rendererForFirstLineStyle = renderer->parent(); |
2614 | 2614 |
2615 if (rendererForFirstLineStyle->isRenderBlockFlow() || rendererForFirstLineSt
yle->isRenderButton()) { | 2615 if (rendererForFirstLineStyle->isRenderBlockFlow() || rendererForFirstLineSt
yle->isRenderButton()) { |
2616 if (RenderBlock* firstLineBlock = rendererForFirstLineStyle->firstLineBl
ock()) { | 2616 if (RenderBlock* firstLineBlock = rendererForFirstLineStyle->firstLineBl
ock()) { |
2617 if (type == Cached) | 2617 if (type == Cached) |
2618 return firstLineBlock->getCachedPseudoStyle(FIRST_LINE, style); | 2618 return firstLineBlock->getCachedPseudoStyle(FIRST_LINE, style); |
2619 return firstLineBlock->getUncachedPseudoStyle(PseudoStyleRequest(FIR
ST_LINE), style, firstLineBlock == renderer ? style : 0); | 2619 return firstLineBlock->getUncachedPseudoStyle(PseudoStyleRequest(FIR
ST_LINE), style, firstLineBlock == renderer ? style : 0); |
2620 } | 2620 } |
2621 } else if (!rendererForFirstLineStyle->isAnonymous() && rendererForFirstLine
Style->isRenderInline() | 2621 } else if (!rendererForFirstLineStyle->isAnonymous() && rendererForFirstLine
Style->isRenderInline() |
2622 && !rendererForFirstLineStyle->node()->isFirstLetterPseudoElement()) { | 2622 && !rendererForFirstLineStyle->node()->isFirstLetterPseudoElement()) { |
2623 LayoutStyle* parentStyle = rendererForFirstLineStyle->parent()->firstLin
eStyle(); | 2623 const LayoutStyle* parentStyle = rendererForFirstLineStyle->parent()->fi
rstLineStyle(); |
2624 if (parentStyle != rendererForFirstLineStyle->parent()->style()) { | 2624 if (parentStyle != rendererForFirstLineStyle->parent()->style()) { |
2625 if (type == Cached) { | 2625 if (type == Cached) { |
2626 // A first-line style is in effect. Cache a first-line style for
ourselves. | 2626 // A first-line style is in effect. Cache a first-line style for
ourselves. |
2627 rendererForFirstLineStyle->style()->setHasPseudoStyle(FIRST_LINE
_INHERITED); | 2627 rendererForFirstLineStyle->mutableStyle()->setHasPseudoStyle(FIR
ST_LINE_INHERITED); |
2628 return rendererForFirstLineStyle->getCachedPseudoStyle(FIRST_LIN
E_INHERITED, parentStyle); | 2628 return rendererForFirstLineStyle->getCachedPseudoStyle(FIRST_LIN
E_INHERITED, parentStyle); |
2629 } | 2629 } |
2630 return rendererForFirstLineStyle->getUncachedPseudoStyle(PseudoStyle
Request(FIRST_LINE_INHERITED), parentStyle, style); | 2630 return rendererForFirstLineStyle->getUncachedPseudoStyle(PseudoStyle
Request(FIRST_LINE_INHERITED), parentStyle, style); |
2631 } | 2631 } |
2632 } | 2632 } |
2633 return nullptr; | 2633 return nullptr; |
2634 } | 2634 } |
2635 | 2635 |
2636 PassRefPtr<LayoutStyle> LayoutObject::uncachedFirstLineStyle(LayoutStyle* style)
const | 2636 PassRefPtr<LayoutStyle> LayoutObject::uncachedFirstLineStyle(LayoutStyle* style)
const |
2637 { | 2637 { |
2638 if (!document().styleEngine()->usesFirstLineRules()) | 2638 if (!document().styleEngine()->usesFirstLineRules()) |
2639 return nullptr; | 2639 return nullptr; |
2640 | 2640 |
2641 ASSERT(!isText()); | 2641 ASSERT(!isText()); |
2642 | 2642 |
2643 return firstLineStyleForCachedUncachedType(Uncached, this, style); | 2643 return firstLineStyleForCachedUncachedType(Uncached, this, style); |
2644 } | 2644 } |
2645 | 2645 |
2646 LayoutStyle* LayoutObject::cachedFirstLineStyle() const | 2646 LayoutStyle* LayoutObject::cachedFirstLineStyle() const |
2647 { | 2647 { |
2648 ASSERT(document().styleEngine()->usesFirstLineRules()); | 2648 ASSERT(document().styleEngine()->usesFirstLineRules()); |
2649 | 2649 |
2650 if (RefPtr<LayoutStyle> style = firstLineStyleForCachedUncachedType(Cached,
isText() ? parent() : this, m_style.get())) | 2650 if (RefPtr<LayoutStyle> style = firstLineStyleForCachedUncachedType(Cached,
isText() ? parent() : this, m_style.get())) |
2651 return style.get(); | 2651 return style.get(); |
2652 | 2652 |
2653 return m_style.get(); | 2653 return m_style.get(); |
2654 } | 2654 } |
2655 | 2655 |
2656 LayoutStyle* LayoutObject::getCachedPseudoStyle(PseudoId pseudo, LayoutStyle* pa
rentStyle) const | 2656 LayoutStyle* LayoutObject::getCachedPseudoStyle(PseudoId pseudo, const LayoutSty
le* parentStyle) const |
2657 { | 2657 { |
2658 if (pseudo < FIRST_INTERNAL_PSEUDOID && !style()->hasPseudoStyle(pseudo)) | 2658 if (pseudo < FIRST_INTERNAL_PSEUDOID && !style()->hasPseudoStyle(pseudo)) |
2659 return 0; | 2659 return 0; |
2660 | 2660 |
2661 LayoutStyle* cachedStyle = style()->getCachedPseudoStyle(pseudo); | 2661 LayoutStyle* cachedStyle = style()->getCachedPseudoStyle(pseudo); |
2662 if (cachedStyle) | 2662 if (cachedStyle) |
2663 return cachedStyle; | 2663 return cachedStyle; |
2664 | 2664 |
2665 RefPtr<LayoutStyle> result = getUncachedPseudoStyle(PseudoStyleRequest(pseud
o), parentStyle); | 2665 RefPtr<LayoutStyle> result = getUncachedPseudoStyle(PseudoStyleRequest(pseud
o), parentStyle); |
2666 if (result) | 2666 if (result) |
2667 return style()->addCachedPseudoStyle(result.release()); | 2667 return mutableStyle()->addCachedPseudoStyle(result.release()); |
2668 return 0; | 2668 return 0; |
2669 } | 2669 } |
2670 | 2670 |
2671 PassRefPtr<LayoutStyle> LayoutObject::getUncachedPseudoStyle(const PseudoStyleRe
quest& pseudoStyleRequest, LayoutStyle* parentStyle, LayoutStyle* ownStyle) cons
t | 2671 PassRefPtr<LayoutStyle> LayoutObject::getUncachedPseudoStyle(const PseudoStyleRe
quest& pseudoStyleRequest, const LayoutStyle* parentStyle, const LayoutStyle* ow
nStyle) const |
2672 { | 2672 { |
2673 if (pseudoStyleRequest.pseudoId < FIRST_INTERNAL_PSEUDOID && !ownStyle && !s
tyle()->hasPseudoStyle(pseudoStyleRequest.pseudoId)) | 2673 if (pseudoStyleRequest.pseudoId < FIRST_INTERNAL_PSEUDOID && !ownStyle && !s
tyle()->hasPseudoStyle(pseudoStyleRequest.pseudoId)) |
2674 return nullptr; | 2674 return nullptr; |
2675 | 2675 |
2676 if (!parentStyle) { | 2676 if (!parentStyle) { |
2677 ASSERT(!ownStyle); | 2677 ASSERT(!ownStyle); |
2678 parentStyle = style(); | 2678 parentStyle = style(); |
2679 } | 2679 } |
2680 | 2680 |
2681 if (!node()) | 2681 if (!node()) |
(...skipping 24 matching lines...) Expand all Loading... |
2706 } | 2706 } |
2707 } | 2707 } |
2708 } | 2708 } |
2709 | 2709 |
2710 return getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); | 2710 return getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); |
2711 } | 2711 } |
2712 | 2712 |
2713 void LayoutObject::getTextDecorations(unsigned decorations, AppliedTextDecoratio
n& underline, AppliedTextDecoration& overline, AppliedTextDecoration& linethroug
h, bool quirksMode, bool firstlineStyle) | 2713 void LayoutObject::getTextDecorations(unsigned decorations, AppliedTextDecoratio
n& underline, AppliedTextDecoration& overline, AppliedTextDecoration& linethroug
h, bool quirksMode, bool firstlineStyle) |
2714 { | 2714 { |
2715 LayoutObject* curr = this; | 2715 LayoutObject* curr = this; |
2716 LayoutStyle* styleToUse = 0; | 2716 const LayoutStyle* styleToUse = 0; |
2717 unsigned currDecs = TextDecorationNone; | 2717 unsigned currDecs = TextDecorationNone; |
2718 Color resultColor; | 2718 Color resultColor; |
2719 TextDecorationStyle resultStyle; | 2719 TextDecorationStyle resultStyle; |
2720 do { | 2720 do { |
2721 styleToUse = curr->style(firstlineStyle); | 2721 styleToUse = curr->style(firstlineStyle); |
2722 currDecs = styleToUse->textDecoration(); | 2722 currDecs = styleToUse->textDecoration(); |
2723 currDecs &= decorations; | 2723 currDecs &= decorations; |
2724 resultColor = styleToUse->visitedDependentColor(CSSPropertyTextDecoratio
nColor); | 2724 resultColor = styleToUse->visitedDependentColor(CSSPropertyTextDecoratio
nColor); |
2725 resultStyle = styleToUse->textDecorationStyle(); | 2725 resultStyle = styleToUse->textDecorationStyle(); |
2726 // Parameter 'decorations' is cast as an int to enable the bitwise opera
tions below. | 2726 // Parameter 'decorations' is cast as an int to enable the bitwise opera
tions below. |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3175 { | 3175 { |
3176 if (object1) { | 3176 if (object1) { |
3177 const blink::LayoutObject* root = object1; | 3177 const blink::LayoutObject* root = object1; |
3178 while (root->parent()) | 3178 while (root->parent()) |
3179 root = root->parent(); | 3179 root = root->parent(); |
3180 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 3180 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
3181 } | 3181 } |
3182 } | 3182 } |
3183 | 3183 |
3184 #endif | 3184 #endif |
OLD | NEW |