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