OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 if (child->isText()) { | 109 if (child->isText()) { |
110 if (child->renderer().parent() == renderer()) | 110 if (child->renderer().parent() == renderer()) |
111 m_hasTextChildren = true; | 111 m_hasTextChildren = true; |
112 setHasTextDescendantsOnAncestors(this); | 112 setHasTextDescendantsOnAncestors(this); |
113 } else if (child->isInlineFlowBox()) { | 113 } else if (child->isInlineFlowBox()) { |
114 if (toInlineFlowBox(child)->hasTextDescendants()) | 114 if (toInlineFlowBox(child)->hasTextDescendants()) |
115 setHasTextDescendantsOnAncestors(this); | 115 setHasTextDescendantsOnAncestors(this); |
116 } | 116 } |
117 | 117 |
118 if (descendantsHaveSameLineHeightAndBaseline() && !child->renderer().isOutOf
FlowPositioned()) { | 118 if (descendantsHaveSameLineHeightAndBaseline() && !child->renderer().isOutOf
FlowPositioned()) { |
119 RenderStyle* parentStyle = renderer().style(isFirstLineStyle()); | 119 RenderStyle* parentStyle = renderer().styleOrFirstLineStyle(isFirstLineS
tyle()); |
120 RenderStyle* childStyle = child->renderer().style(isFirstLineStyle()); | 120 RenderStyle* childStyle = child->renderer().styleOrFirstLineStyle(isFirs
tLineStyle()); |
121 bool shouldClearDescendantsHaveSameLineHeightAndBaseline = false; | 121 bool shouldClearDescendantsHaveSameLineHeightAndBaseline = false; |
122 if (child->renderer().isReplaced()) | 122 if (child->renderer().isReplaced()) |
123 shouldClearDescendantsHaveSameLineHeightAndBaseline = true; | 123 shouldClearDescendantsHaveSameLineHeightAndBaseline = true; |
124 else if (child->isText()) { | 124 else if (child->isText()) { |
125 if (child->renderer().isBR() || child->renderer().parent() != render
er()) { | 125 if (child->renderer().isBR() || child->renderer().parent() != render
er()) { |
126 if (!parentStyle->font().fontMetrics().hasIdenticalAscentDescent
AndLineGap(childStyle->font().fontMetrics()) | 126 if (!parentStyle->font().fontMetrics().hasIdenticalAscentDescent
AndLineGap(childStyle->font().fontMetrics()) |
127 || parentStyle->lineHeight() != childStyle->lineHeight() | 127 || parentStyle->lineHeight() != childStyle->lineHeight() |
128 || (parentStyle->verticalAlign() != BASELINE && !isRootInlin
eBox()) || childStyle->verticalAlign() != BASELINE) | 128 || (parentStyle->verticalAlign() != BASELINE && !isRootInlin
eBox()) || childStyle->verticalAlign() != BASELINE) |
129 shouldClearDescendantsHaveSameLineHeightAndBaseline = true; | 129 shouldClearDescendantsHaveSameLineHeightAndBaseline = true; |
130 } | 130 } |
(...skipping 16 matching lines...) Expand all Loading... |
147 shouldClearDescendantsHaveSameLineHeightAndBaseline = true; | 147 shouldClearDescendantsHaveSameLineHeightAndBaseline = true; |
148 } | 148 } |
149 } | 149 } |
150 | 150 |
151 if (shouldClearDescendantsHaveSameLineHeightAndBaseline) | 151 if (shouldClearDescendantsHaveSameLineHeightAndBaseline) |
152 clearDescendantsHaveSameLineHeightAndBaseline(); | 152 clearDescendantsHaveSameLineHeightAndBaseline(); |
153 } | 153 } |
154 | 154 |
155 if (!child->renderer().isOutOfFlowPositioned()) { | 155 if (!child->renderer().isOutOfFlowPositioned()) { |
156 if (child->isText()) { | 156 if (child->isText()) { |
157 RenderStyle* childStyle = child->renderer().style(isFirstLineStyle()
); | 157 RenderStyle* childStyle = child->renderer().styleOrFirstLineStyle(is
FirstLineStyle()); |
158 if (childStyle->letterSpacing() < 0 || childStyle->textShadow() || c
hildStyle->textEmphasisMark() != TextEmphasisMarkNone || childStyle->textStrokeW
idth()) | 158 if (childStyle->letterSpacing() < 0 || childStyle->textShadow() || c
hildStyle->textEmphasisMark() != TextEmphasisMarkNone || childStyle->textStrokeW
idth()) |
159 child->clearKnownToHaveNoOverflow(); | 159 child->clearKnownToHaveNoOverflow(); |
160 } else if (child->renderer().isReplaced()) { | 160 } else if (child->renderer().isReplaced()) { |
161 RenderBox& box = toRenderBox(child->renderer()); | 161 RenderBox& box = toRenderBox(child->renderer()); |
162 if (box.hasRenderOverflow() || box.hasSelfPaintingLayer()) | 162 if (box.hasRenderOverflow() || box.hasSelfPaintingLayer()) |
163 child->clearKnownToHaveNoOverflow(); | 163 child->clearKnownToHaveNoOverflow(); |
164 } else if (!child->renderer().isBR() && (child->renderer().style(isFirst
LineStyle())->boxShadow() || child->boxModelObject()->hasSelfPaintingLayer() | 164 } else if (!child->renderer().isBR() && (child->renderer().styleOrFirstL
ineStyle(isFirstLineStyle())->boxShadow() || child->boxModelObject()->hasSelfPai
ntingLayer() |
165 || (child->renderer().isListMarker() && !toRenderListMarker(child->r
enderer()).isInside()) | 165 || (child->renderer().isListMarker() && !toRenderListMarker(child->r
enderer()).isInside()) |
166 || child->renderer().style(isFirstLineStyle())->hasBorderImageOutset
s() | 166 || child->renderer().styleOrFirstLineStyle(isFirstLineStyle())->hasB
orderImageOutsets() |
167 || child->renderer().style(isFirstLineStyle())->hasOutline())) { | 167 || child->renderer().styleOrFirstLineStyle(isFirstLineStyle())->hasO
utline())) { |
168 child->clearKnownToHaveNoOverflow(); | 168 child->clearKnownToHaveNoOverflow(); |
169 } | 169 } |
170 | 170 |
171 if (knownToHaveNoOverflow() && child->isInlineFlowBox() && !toInlineFlow
Box(child)->knownToHaveNoOverflow()) | 171 if (knownToHaveNoOverflow() && child->isInlineFlowBox() && !toInlineFlow
Box(child)->knownToHaveNoOverflow()) |
172 clearKnownToHaveNoOverflow(); | 172 clearKnownToHaveNoOverflow(); |
173 } | 173 } |
174 | 174 |
175 checkConsistency(); | 175 checkConsistency(); |
176 } | 176 } |
177 | 177 |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 } | 375 } |
376 | 376 |
377 float InlineFlowBox::placeBoxRangeInInlineDirection(InlineBox* firstChild, Inlin
eBox* lastChild, float& logicalLeft, float& minLogicalLeft, float& maxLogicalRig
ht, bool& needsWordSpacing, GlyphOverflowAndFallbackFontsMap& textBoxDataMap) | 377 float InlineFlowBox::placeBoxRangeInInlineDirection(InlineBox* firstChild, Inlin
eBox* lastChild, float& logicalLeft, float& minLogicalLeft, float& maxLogicalRig
ht, bool& needsWordSpacing, GlyphOverflowAndFallbackFontsMap& textBoxDataMap) |
378 { | 378 { |
379 for (InlineBox* curr = firstChild; curr && curr != lastChild; curr = curr->n
extOnLine()) { | 379 for (InlineBox* curr = firstChild; curr && curr != lastChild; curr = curr->n
extOnLine()) { |
380 if (curr->renderer().isText()) { | 380 if (curr->renderer().isText()) { |
381 InlineTextBox* text = toInlineTextBox(curr); | 381 InlineTextBox* text = toInlineTextBox(curr); |
382 RenderText& rt = toRenderText(text->renderer()); | 382 RenderText& rt = toRenderText(text->renderer()); |
383 if (rt.textLength()) { | 383 if (rt.textLength()) { |
384 if (needsWordSpacing && isSpaceOrNewline(rt.characterAt(text->st
art()))) | 384 if (needsWordSpacing && isSpaceOrNewline(rt.characterAt(text->st
art()))) |
385 logicalLeft += rt.style(isFirstLineStyle())->font().fontDesc
ription().wordSpacing(); | 385 logicalLeft += rt.styleOrFirstLineStyle(isFirstLineStyle())-
>font().fontDescription().wordSpacing(); |
386 needsWordSpacing = !isSpaceOrNewline(rt.characterAt(text->end())
); | 386 needsWordSpacing = !isSpaceOrNewline(rt.characterAt(text->end())
); |
387 } | 387 } |
388 text->setLogicalLeft(logicalLeft); | 388 text->setLogicalLeft(logicalLeft); |
389 if (knownToHaveNoOverflow()) | 389 if (knownToHaveNoOverflow()) |
390 minLogicalLeft = std::min(logicalLeft, minLogicalLeft); | 390 minLogicalLeft = std::min(logicalLeft, minLogicalLeft); |
391 logicalLeft += text->logicalWidth(); | 391 logicalLeft += text->logicalWidth(); |
392 if (knownToHaveNoOverflow()) | 392 if (knownToHaveNoOverflow()) |
393 maxLogicalRight = std::max(logicalLeft, maxLogicalRight); | 393 maxLogicalRight = std::max(logicalLeft, maxLogicalRight); |
394 } else { | 394 } else { |
395 if (curr->renderer().isOutOfFlowPositioned()) { | 395 if (curr->renderer().isOutOfFlowPositioned()) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 } | 432 } |
433 } | 433 } |
434 return logicalLeft; | 434 return logicalLeft; |
435 } | 435 } |
436 | 436 |
437 bool InlineFlowBox::requiresIdeographicBaseline(const GlyphOverflowAndFallbackFo
ntsMap& textBoxDataMap) const | 437 bool InlineFlowBox::requiresIdeographicBaseline(const GlyphOverflowAndFallbackFo
ntsMap& textBoxDataMap) const |
438 { | 438 { |
439 if (isHorizontal()) | 439 if (isHorizontal()) |
440 return false; | 440 return false; |
441 | 441 |
442 if (renderer().style(isFirstLineStyle())->fontDescription().nonCJKGlyphOrien
tation() == NonCJKGlyphOrientationUpright | 442 if (renderer().styleOrFirstLineStyle(isFirstLineStyle())->fontDescription().
nonCJKGlyphOrientation() == NonCJKGlyphOrientationUpright |
443 || renderer().style(isFirstLineStyle())->font().primaryFont()->hasVertic
alGlyphs()) | 443 || renderer().styleOrFirstLineStyle(isFirstLineStyle())->font().primaryF
ont()->hasVerticalGlyphs()) |
444 return true; | 444 return true; |
445 | 445 |
446 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { | 446 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { |
447 if (curr->renderer().isOutOfFlowPositioned()) | 447 if (curr->renderer().isOutOfFlowPositioned()) |
448 continue; // Positioned placeholders don't affect calculations. | 448 continue; // Positioned placeholders don't affect calculations. |
449 | 449 |
450 if (curr->isInlineFlowBox()) { | 450 if (curr->isInlineFlowBox()) { |
451 if (toInlineFlowBox(curr)->requiresIdeographicBaseline(textBoxDataMa
p)) | 451 if (toInlineFlowBox(curr)->requiresIdeographicBaseline(textBoxDataMa
p)) |
452 return true; | 452 return true; |
453 } else { | 453 } else { |
454 if (curr->renderer().style(isFirstLineStyle())->font().primaryFont()
->hasVerticalGlyphs()) | 454 if (curr->renderer().styleOrFirstLineStyle(isFirstLineStyle())->font
().primaryFont()->hasVerticalGlyphs()) |
455 return true; | 455 return true; |
456 | 456 |
457 const Vector<const SimpleFontData*>* usedFonts = 0; | 457 const Vector<const SimpleFontData*>* usedFonts = 0; |
458 if (curr->isInlineTextBox()) { | 458 if (curr->isInlineTextBox()) { |
459 GlyphOverflowAndFallbackFontsMap::const_iterator it = textBoxDat
aMap.find(toInlineTextBox(curr)); | 459 GlyphOverflowAndFallbackFontsMap::const_iterator it = textBoxDat
aMap.find(toInlineTextBox(curr)); |
460 usedFonts = it == textBoxDataMap.end() ? 0 : &it->value.first; | 460 usedFonts = it == textBoxDataMap.end() ? 0 : &it->value.first; |
461 } | 461 } |
462 | 462 |
463 if (usedFonts) { | 463 if (usedFonts) { |
464 for (size_t i = 0; i < usedFonts->size(); ++i) { | 464 for (size_t i = 0; i < usedFonts->size(); ++i) { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 setMaxAscent, setMaxDescent,
strictMode, textBoxDataMap, | 594 setMaxAscent, setMaxDescent,
strictMode, textBoxDataMap, |
595 baselineType, verticalPositi
onCache); | 595 baselineType, verticalPositi
onCache); |
596 } | 596 } |
597 } | 597 } |
598 | 598 |
599 void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
ght, int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom
, LayoutUnit& selectionBottom, bool& setLineTop, | 599 void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
ght, int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom
, LayoutUnit& selectionBottom, bool& setLineTop, |
600 LayoutUnit& lineTopIncludingMargi
ns, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& ha
sAnnotationsAfter, FontBaseline baselineType) | 600 LayoutUnit& lineTopIncludingMargi
ns, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& ha
sAnnotationsAfter, FontBaseline baselineType) |
601 { | 601 { |
602 bool isRootBox = isRootInlineBox(); | 602 bool isRootBox = isRootInlineBox(); |
603 if (isRootBox) { | 603 if (isRootBox) { |
604 const FontMetrics& fontMetrics = renderer().style(isFirstLineStyle())->f
ontMetrics(); | 604 const FontMetrics& fontMetrics = renderer().styleOrFirstLineStyle(isFirs
tLineStyle())->fontMetrics(); |
605 // RootInlineBoxes are always placed on at pixel boundaries in their log
ical y direction. Not doing | 605 // RootInlineBoxes are always placed on at pixel boundaries in their log
ical y direction. Not doing |
606 // so results in incorrect rendering of text decorations, most notably u
nderlines. | 606 // so results in incorrect rendering of text decorations, most notably u
nderlines. |
607 setLogicalTop(roundToInt(top + maxAscent - fontMetrics.ascent(baselineTy
pe))); | 607 setLogicalTop(roundToInt(top + maxAscent - fontMetrics.ascent(baselineTy
pe))); |
608 } | 608 } |
609 | 609 |
610 LayoutUnit adjustmentForChildrenWithSameLineHeightAndBaseline = 0; | 610 LayoutUnit adjustmentForChildrenWithSameLineHeightAndBaseline = 0; |
611 if (descendantsHaveSameLineHeightAndBaseline()) { | 611 if (descendantsHaveSameLineHeightAndBaseline()) { |
612 adjustmentForChildrenWithSameLineHeightAndBaseline = logicalTop(); | 612 adjustmentForChildrenWithSameLineHeightAndBaseline = logicalTop(); |
613 if (parent()) | 613 if (parent()) |
614 adjustmentForChildrenWithSameLineHeightAndBaseline += (boxModelObjec
t()->borderBefore() + boxModelObject()->paddingBefore()); | 614 adjustmentForChildrenWithSameLineHeightAndBaseline += (boxModelObjec
t()->borderBefore() + boxModelObject()->paddingBefore()); |
(...skipping 21 matching lines...) Expand all Loading... |
636 LayoutUnit posAdjust = maxAscent - curr->baselinePosition(baselineTy
pe); | 636 LayoutUnit posAdjust = maxAscent - curr->baselinePosition(baselineTy
pe); |
637 curr->setLogicalTop(curr->logicalTop() + top + posAdjust); | 637 curr->setLogicalTop(curr->logicalTop() + top + posAdjust); |
638 } | 638 } |
639 | 639 |
640 LayoutUnit newLogicalTop = curr->logicalTop(); | 640 LayoutUnit newLogicalTop = curr->logicalTop(); |
641 LayoutUnit newLogicalTopIncludingMargins = newLogicalTop; | 641 LayoutUnit newLogicalTopIncludingMargins = newLogicalTop; |
642 LayoutUnit boxHeight = curr->logicalHeight(); | 642 LayoutUnit boxHeight = curr->logicalHeight(); |
643 LayoutUnit boxHeightIncludingMargins = boxHeight; | 643 LayoutUnit boxHeightIncludingMargins = boxHeight; |
644 LayoutUnit borderPaddingHeight = 0; | 644 LayoutUnit borderPaddingHeight = 0; |
645 if (curr->isText() || curr->isInlineFlowBox()) { | 645 if (curr->isText() || curr->isInlineFlowBox()) { |
646 const FontMetrics& fontMetrics = curr->renderer().style(isFirstLineS
tyle())->fontMetrics(); | 646 const FontMetrics& fontMetrics = curr->renderer().styleOrFirstLineSt
yle(isFirstLineStyle())->fontMetrics(); |
647 newLogicalTop += curr->baselinePosition(baselineType) - fontMetrics.
ascent(baselineType); | 647 newLogicalTop += curr->baselinePosition(baselineType) - fontMetrics.
ascent(baselineType); |
648 if (curr->isInlineFlowBox()) { | 648 if (curr->isInlineFlowBox()) { |
649 RenderBoxModelObject& boxObject = toRenderBoxModelObject(curr->r
enderer()); | 649 RenderBoxModelObject& boxObject = toRenderBoxModelObject(curr->r
enderer()); |
650 newLogicalTop -= boxObject.style(isFirstLineStyle())->isHorizont
alWritingMode() ? boxObject.borderTop() + boxObject.paddingTop() : | 650 newLogicalTop -= boxObject.styleOrFirstLineStyle(isFirstLineStyl
e())->isHorizontalWritingMode() ? boxObject.borderTop() + boxObject.paddingTop()
: |
651 boxObject.borderRight() + boxObject.paddingRight(); | 651 boxObject.borderRight() + boxObject.paddingRight(); |
652 borderPaddingHeight = boxObject.borderAndPaddingLogicalHeight(); | 652 borderPaddingHeight = boxObject.borderAndPaddingLogicalHeight(); |
653 } | 653 } |
654 newLogicalTopIncludingMargins = newLogicalTop; | 654 newLogicalTopIncludingMargins = newLogicalTop; |
655 } else if (!curr->renderer().isBR()) { | 655 } else if (!curr->renderer().isBR()) { |
656 RenderBox& box = toRenderBox(curr->renderer()); | 656 RenderBox& box = toRenderBox(curr->renderer()); |
657 newLogicalTopIncludingMargins = newLogicalTop; | 657 newLogicalTopIncludingMargins = newLogicalTop; |
658 LayoutUnit overSideMargin = curr->isHorizontal() ? box.marginTop() :
box.marginRight(); | 658 LayoutUnit overSideMargin = curr->isHorizontal() ? box.marginTop() :
box.marginRight(); |
659 LayoutUnit underSideMargin = curr->isHorizontal() ? box.marginBottom
() : box.marginLeft(); | 659 LayoutUnit underSideMargin = curr->isHorizontal() ? box.marginBottom
() : box.marginLeft(); |
660 newLogicalTop += overSideMargin; | 660 newLogicalTop += overSideMargin; |
(...skipping 15 matching lines...) Expand all Loading... |
676 RenderRubyRun& rubyRun = toRenderRubyRun(curr->renderer()); | 676 RenderRubyRun& rubyRun = toRenderRubyRun(curr->renderer()); |
677 if (RenderRubyBase* rubyBase = rubyRun.rubyBase()) { | 677 if (RenderRubyBase* rubyBase = rubyRun.rubyBase()) { |
678 LayoutUnit bottomRubyBaseLeading = (curr->logicalHeight() -
rubyBase->logicalBottom()) + rubyBase->logicalHeight() - (rubyBase->lastRootBox(
) ? rubyBase->lastRootBox()->lineBottom() : LayoutUnit()); | 678 LayoutUnit bottomRubyBaseLeading = (curr->logicalHeight() -
rubyBase->logicalBottom()) + rubyBase->logicalHeight() - (rubyBase->lastRootBox(
) ? rubyBase->lastRootBox()->lineBottom() : LayoutUnit()); |
679 LayoutUnit topRubyBaseLeading = rubyBase->logicalTop() + (ru
byBase->firstRootBox() ? rubyBase->firstRootBox()->lineTop() : LayoutUnit()); | 679 LayoutUnit topRubyBaseLeading = rubyBase->logicalTop() + (ru
byBase->firstRootBox() ? rubyBase->firstRootBox()->lineTop() : LayoutUnit()); |
680 newLogicalTop += !renderer().style()->isFlippedLinesWritingM
ode() ? topRubyBaseLeading : bottomRubyBaseLeading; | 680 newLogicalTop += !renderer().style()->isFlippedLinesWritingM
ode() ? topRubyBaseLeading : bottomRubyBaseLeading; |
681 boxHeight -= (topRubyBaseLeading + bottomRubyBaseLeading); | 681 boxHeight -= (topRubyBaseLeading + bottomRubyBaseLeading); |
682 } | 682 } |
683 } | 683 } |
684 if (curr->isInlineTextBox()) { | 684 if (curr->isInlineTextBox()) { |
685 TextEmphasisPosition emphasisMarkPosition; | 685 TextEmphasisPosition emphasisMarkPosition; |
686 if (toInlineTextBox(curr)->getEmphasisMarkPosition(curr->rendere
r().style(isFirstLineStyle()), emphasisMarkPosition)) { | 686 if (toInlineTextBox(curr)->getEmphasisMarkPosition(curr->rendere
r().styleOrFirstLineStyle(isFirstLineStyle()), emphasisMarkPosition)) { |
687 bool emphasisMarkIsOver = emphasisMarkPosition == TextEmphas
isPositionOver; | 687 bool emphasisMarkIsOver = emphasisMarkPosition == TextEmphas
isPositionOver; |
688 if (emphasisMarkIsOver != curr->renderer().style(isFirstLine
Style())->isFlippedLinesWritingMode()) | 688 if (emphasisMarkIsOver != curr->renderer().styleOrFirstLineS
tyle(isFirstLineStyle())->isFlippedLinesWritingMode()) |
689 hasAnnotationsBefore = true; | 689 hasAnnotationsBefore = true; |
690 else | 690 else |
691 hasAnnotationsAfter = true; | 691 hasAnnotationsAfter = true; |
692 } | 692 } |
693 } | 693 } |
694 | 694 |
695 if (!setLineTop) { | 695 if (!setLineTop) { |
696 setLineTop = true; | 696 setLineTop = true; |
697 lineTop = newLogicalTop; | 697 lineTop = newLogicalTop; |
698 lineTopIncludingMargins = std::min(lineTop, newLogicalTopIncludi
ngMargins); | 698 lineTopIncludingMargins = std::min(lineTop, newLogicalTopIncludi
ngMargins); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 curr->setLogicalTop(lineBottom - (curr->logicalTop() - lineTop) - cu
rr->logicalHeight()); | 764 curr->setLogicalTop(lineBottom - (curr->logicalTop() - lineTop) - cu
rr->logicalHeight()); |
765 } | 765 } |
766 } | 766 } |
767 | 767 |
768 inline void InlineFlowBox::addBoxShadowVisualOverflow(LayoutRect& logicalVisualO
verflow) | 768 inline void InlineFlowBox::addBoxShadowVisualOverflow(LayoutRect& logicalVisualO
verflow) |
769 { | 769 { |
770 // box-shadow on root line boxes is applying to the block and not to the lin
es. | 770 // box-shadow on root line boxes is applying to the block and not to the lin
es. |
771 if (!parent()) | 771 if (!parent()) |
772 return; | 772 return; |
773 | 773 |
774 RenderStyle* style = renderer().style(isFirstLineStyle()); | 774 RenderStyle* style = renderer().styleOrFirstLineStyle(isFirstLineStyle()); |
775 if (!style->boxShadow()) | 775 if (!style->boxShadow()) |
776 return; | 776 return; |
777 | 777 |
778 LayoutUnit boxShadowLogicalTop; | 778 LayoutUnit boxShadowLogicalTop; |
779 LayoutUnit boxShadowLogicalBottom; | 779 LayoutUnit boxShadowLogicalBottom; |
780 style->getBoxShadowBlockDirectionExtent(boxShadowLogicalTop, boxShadowLogica
lBottom); | 780 style->getBoxShadowBlockDirectionExtent(boxShadowLogicalTop, boxShadowLogica
lBottom); |
781 | 781 |
782 // Similar to how glyph overflow works, if our lines are flipped, then it's
actually the opposite shadow that applies, since | 782 // Similar to how glyph overflow works, if our lines are flipped, then it's
actually the opposite shadow that applies, since |
783 // the line is "upside down" in terms of block coordinates. | 783 // the line is "upside down" in terms of block coordinates. |
784 LayoutUnit shadowLogicalTop = style->isFlippedLinesWritingMode() ? -boxShado
wLogicalBottom : boxShadowLogicalTop; | 784 LayoutUnit shadowLogicalTop = style->isFlippedLinesWritingMode() ? -boxShado
wLogicalBottom : boxShadowLogicalTop; |
(...skipping 12 matching lines...) Expand all Loading... |
797 logicalVisualOverflow = LayoutRect(logicalLeftVisualOverflow, logicalTopVisu
alOverflow, | 797 logicalVisualOverflow = LayoutRect(logicalLeftVisualOverflow, logicalTopVisu
alOverflow, |
798 logicalRightVisualOverflow - logicalLeftV
isualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); | 798 logicalRightVisualOverflow - logicalLeftV
isualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); |
799 } | 799 } |
800 | 800 |
801 inline void InlineFlowBox::addBorderOutsetVisualOverflow(LayoutRect& logicalVisu
alOverflow) | 801 inline void InlineFlowBox::addBorderOutsetVisualOverflow(LayoutRect& logicalVisu
alOverflow) |
802 { | 802 { |
803 // border-image-outset on root line boxes is applying to the block and not t
o the lines. | 803 // border-image-outset on root line boxes is applying to the block and not t
o the lines. |
804 if (!parent()) | 804 if (!parent()) |
805 return; | 805 return; |
806 | 806 |
807 RenderStyle* style = renderer().style(isFirstLineStyle()); | 807 RenderStyle* style = renderer().styleOrFirstLineStyle(isFirstLineStyle()); |
808 if (!style->hasBorderImageOutsets()) | 808 if (!style->hasBorderImageOutsets()) |
809 return; | 809 return; |
810 | 810 |
811 LayoutBoxExtent borderOutsets = style->borderImageOutsets(); | 811 LayoutBoxExtent borderOutsets = style->borderImageOutsets(); |
812 | 812 |
813 LayoutUnit borderOutsetLogicalTop = borderOutsets.logicalTop(style->writingM
ode()); | 813 LayoutUnit borderOutsetLogicalTop = borderOutsets.logicalTop(style->writingM
ode()); |
814 LayoutUnit borderOutsetLogicalBottom = borderOutsets.logicalBottom(style->wr
itingMode()); | 814 LayoutUnit borderOutsetLogicalBottom = borderOutsets.logicalBottom(style->wr
itingMode()); |
815 LayoutUnit borderOutsetLogicalLeft = borderOutsets.logicalLeft(style->writin
gMode()); | 815 LayoutUnit borderOutsetLogicalLeft = borderOutsets.logicalLeft(style->writin
gMode()); |
816 LayoutUnit borderOutsetLogicalRight = borderOutsets.logicalRight(style->writ
ingMode()); | 816 LayoutUnit borderOutsetLogicalRight = borderOutsets.logicalRight(style->writ
ingMode()); |
817 | 817 |
(...skipping 14 matching lines...) Expand all Loading... |
832 logicalVisualOverflow = LayoutRect(logicalLeftVisualOverflow, logicalTopVisu
alOverflow, | 832 logicalVisualOverflow = LayoutRect(logicalLeftVisualOverflow, logicalTopVisu
alOverflow, |
833 logicalRightVisualOverflow - logicalLeftV
isualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); | 833 logicalRightVisualOverflow - logicalLeftV
isualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); |
834 } | 834 } |
835 | 835 |
836 inline void InlineFlowBox::addOutlineVisualOverflow(LayoutRect& logicalVisualOve
rflow) | 836 inline void InlineFlowBox::addOutlineVisualOverflow(LayoutRect& logicalVisualOve
rflow) |
837 { | 837 { |
838 // Outline on root line boxes is applied to the block and not to the lines. | 838 // Outline on root line boxes is applied to the block and not to the lines. |
839 if (!parent()) | 839 if (!parent()) |
840 return; | 840 return; |
841 | 841 |
842 RenderStyle* style = renderer().style(isFirstLineStyle()); | 842 RenderStyle* style = renderer().styleOrFirstLineStyle(isFirstLineStyle()); |
843 if (!style->hasOutline()) | 843 if (!style->hasOutline()) |
844 return; | 844 return; |
845 | 845 |
846 logicalVisualOverflow.inflate(style->outlineSize()); | 846 logicalVisualOverflow.inflate(style->outlineSize()); |
847 } | 847 } |
848 | 848 |
849 inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, Glyp
hOverflowAndFallbackFontsMap& textBoxDataMap, LayoutRect& logicalVisualOverflow) | 849 inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, Glyp
hOverflowAndFallbackFontsMap& textBoxDataMap, LayoutRect& logicalVisualOverflow) |
850 { | 850 { |
851 if (textBox->knownToHaveNoOverflow()) | 851 if (textBox->knownToHaveNoOverflow()) |
852 return; | 852 return; |
853 | 853 |
854 RenderStyle* style = textBox->renderer().style(isFirstLineStyle()); | 854 RenderStyle* style = textBox->renderer().styleOrFirstLineStyle(isFirstLineSt
yle()); |
855 | 855 |
856 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(textBox)
; | 856 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(textBox)
; |
857 GlyphOverflow* glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.s
econd; | 857 GlyphOverflow* glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.s
econd; |
858 bool isFlippedLine = style->isFlippedLinesWritingMode(); | 858 bool isFlippedLine = style->isFlippedLinesWritingMode(); |
859 | 859 |
860 int topGlyphEdge = glyphOverflow ? (isFlippedLine ? glyphOverflow->bottom :
glyphOverflow->top) : 0; | 860 int topGlyphEdge = glyphOverflow ? (isFlippedLine ? glyphOverflow->bottom :
glyphOverflow->top) : 0; |
861 int bottomGlyphEdge = glyphOverflow ? (isFlippedLine ? glyphOverflow->top :
glyphOverflow->bottom) : 0; | 861 int bottomGlyphEdge = glyphOverflow ? (isFlippedLine ? glyphOverflow->top :
glyphOverflow->bottom) : 0; |
862 int leftGlyphEdge = glyphOverflow ? glyphOverflow->left : 0; | 862 int leftGlyphEdge = glyphOverflow ? glyphOverflow->left : 0; |
863 int rightGlyphEdge = glyphOverflow ? glyphOverflow->right : 0; | 863 int rightGlyphEdge = glyphOverflow ? glyphOverflow->right : 0; |
864 | 864 |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1291 | 1291 |
1292 // Move x/y to our coordinates. | 1292 // Move x/y to our coordinates. |
1293 LayoutRect localRect(frameRect); | 1293 LayoutRect localRect(frameRect); |
1294 flipForWritingMode(localRect); | 1294 flipForWritingMode(localRect); |
1295 LayoutPoint adjustedPaintoffset = paintOffset + localRect.location(); | 1295 LayoutPoint adjustedPaintoffset = paintOffset + localRect.location(); |
1296 | 1296 |
1297 GraphicsContext* context = paintInfo.context; | 1297 GraphicsContext* context = paintInfo.context; |
1298 | 1298 |
1299 // You can use p::first-line to specify a background. If so, the root line b
oxes for | 1299 // You can use p::first-line to specify a background. If so, the root line b
oxes for |
1300 // a line may actually have to paint a background. | 1300 // a line may actually have to paint a background. |
1301 RenderStyle* styleToUse = renderer().style(isFirstLineStyle()); | 1301 RenderStyle* styleToUse = renderer().styleOrFirstLineStyle(isFirstLineStyle(
)); |
1302 if ((!parent() && isFirstLineStyle() && styleToUse != renderer().style()) ||
(parent() && renderer().hasBoxDecorations())) { | 1302 if ((!parent() && isFirstLineStyle() && styleToUse != renderer().style()) ||
(parent() && renderer().hasBoxDecorations())) { |
1303 LayoutRect paintRect = LayoutRect(adjustedPaintoffset, frameRect.size())
; | 1303 LayoutRect paintRect = LayoutRect(adjustedPaintoffset, frameRect.size())
; |
1304 // Shadow comes first and is behind the background and border. | 1304 // Shadow comes first and is behind the background and border. |
1305 if (!boxModelObject()->boxShadowShouldBeAppliedToBackground(BackgroundBl
eedNone, this)) | 1305 if (!boxModelObject()->boxShadowShouldBeAppliedToBackground(BackgroundBl
eedNone, this)) |
1306 paintBoxShadow(paintInfo, styleToUse, Normal, paintRect); | 1306 paintBoxShadow(paintInfo, styleToUse, Normal, paintRect); |
1307 | 1307 |
1308 Color c = renderer().resolveColor(styleToUse, CSSPropertyBackgroundColor
); | 1308 Color c = renderer().resolveColor(styleToUse, CSSPropertyBackgroundColor
); |
1309 paintFillLayers(paintInfo, c, styleToUse->backgroundLayers(), paintRect)
; | 1309 paintFillLayers(paintInfo, c, styleToUse->backgroundLayers(), paintRect)
; |
1310 paintBoxShadow(paintInfo, styleToUse, Inset, paintRect); | 1310 paintBoxShadow(paintInfo, styleToUse, Inset, paintRect); |
1311 | 1311 |
1312 // :first-line cannot be used to put borders on a line. Always paint bor
ders with our | 1312 // :first-line cannot be used to put borders on a line. Always paint bor
ders with our |
1313 // non-first-line style. | 1313 // non-first-line style. |
1314 if (parent() && renderer().style()->hasBorder()) { | 1314 if (parent() && renderer().style()->hasBorder()) { |
1315 const NinePieceImage& borderImage = renderer().style()->borderImage(
); | 1315 const NinePieceImage& borderImage = renderer().style()->borderImage(
); |
1316 StyleImage* borderImageSource = borderImage.image(); | 1316 StyleImage* borderImageSource = borderImage.image(); |
1317 bool hasBorderImage = borderImageSource && borderImageSource->canRen
der(renderer(), styleToUse->effectiveZoom()); | 1317 bool hasBorderImage = borderImageSource && borderImageSource->canRen
der(renderer(), styleToUse->effectiveZoom()); |
1318 if (hasBorderImage && !borderImageSource->isLoaded()) | 1318 if (hasBorderImage && !borderImageSource->isLoaded()) |
1319 return; // Don't paint anything while we wait for the image to l
oad. | 1319 return; // Don't paint anything while we wait for the image to l
oad. |
1320 | 1320 |
1321 // The simple case is where we either have no border image or we are
the only box for this object. In those | 1321 // The simple case is where we either have no border image or we are
the only box for this object. In those |
1322 // cases only a single call to draw is required. | 1322 // cases only a single call to draw is required. |
1323 if (!hasBorderImage || (!prevLineBox() && !nextLineBox())) | 1323 if (!hasBorderImage || (!prevLineBox() && !nextLineBox())) |
1324 boxModelObject()->paintBorder(paintInfo, paintRect, renderer().s
tyle(isFirstLineStyle()), BackgroundBleedNone, includeLogicalLeftEdge(), include
LogicalRightEdge()); | 1324 boxModelObject()->paintBorder(paintInfo, paintRect, renderer().s
tyleOrFirstLineStyle(isFirstLineStyle()), BackgroundBleedNone, includeLogicalLef
tEdge(), includeLogicalRightEdge()); |
1325 else { | 1325 else { |
1326 // We have a border image that spans multiple lines. | 1326 // We have a border image that spans multiple lines. |
1327 // We need to adjust tx and ty by the width of all previous line
s. | 1327 // We need to adjust tx and ty by the width of all previous line
s. |
1328 // Think of border image painting on inlines as though you had o
ne long line, a single continuous | 1328 // Think of border image painting on inlines as though you had o
ne long line, a single continuous |
1329 // strip. Even though that strip has been broken up across mult
iple lines, you still paint it | 1329 // strip. Even though that strip has been broken up across mult
iple lines, you still paint it |
1330 // as though you had one single line. This means each line has
to pick up the image where | 1330 // as though you had one single line. This means each line has
to pick up the image where |
1331 // the previous line left off. | 1331 // the previous line left off. |
1332 // FIXME: What the heck do we do with RTL here? The math we're u
sing is obviously not right, | 1332 // FIXME: What the heck do we do with RTL here? The math we're u
sing is obviously not right, |
1333 // but it isn't even clear how this should work at all. | 1333 // but it isn't even clear how this should work at all. |
1334 LayoutUnit logicalOffsetOnLine = 0; | 1334 LayoutUnit logicalOffsetOnLine = 0; |
1335 for (InlineFlowBox* curr = prevLineBox(); curr; curr = curr->pre
vLineBox()) | 1335 for (InlineFlowBox* curr = prevLineBox(); curr; curr = curr->pre
vLineBox()) |
1336 logicalOffsetOnLine += curr->logicalWidth(); | 1336 logicalOffsetOnLine += curr->logicalWidth(); |
1337 LayoutUnit totalLogicalWidth = logicalOffsetOnLine; | 1337 LayoutUnit totalLogicalWidth = logicalOffsetOnLine; |
1338 for (InlineFlowBox* curr = this; curr; curr = curr->nextLineBox(
)) | 1338 for (InlineFlowBox* curr = this; curr; curr = curr->nextLineBox(
)) |
1339 totalLogicalWidth += curr->logicalWidth(); | 1339 totalLogicalWidth += curr->logicalWidth(); |
1340 LayoutUnit stripX = adjustedPaintoffset.x() - (isHorizontal() ?
logicalOffsetOnLine : LayoutUnit()); | 1340 LayoutUnit stripX = adjustedPaintoffset.x() - (isHorizontal() ?
logicalOffsetOnLine : LayoutUnit()); |
1341 LayoutUnit stripY = adjustedPaintoffset.y() - (isHorizontal() ?
LayoutUnit() : logicalOffsetOnLine); | 1341 LayoutUnit stripY = adjustedPaintoffset.y() - (isHorizontal() ?
LayoutUnit() : logicalOffsetOnLine); |
1342 LayoutUnit stripWidth = isHorizontal() ? totalLogicalWidth : fra
meRect.width(); | 1342 LayoutUnit stripWidth = isHorizontal() ? totalLogicalWidth : fra
meRect.width(); |
1343 LayoutUnit stripHeight = isHorizontal() ? frameRect.height() : t
otalLogicalWidth; | 1343 LayoutUnit stripHeight = isHorizontal() ? frameRect.height() : t
otalLogicalWidth; |
1344 | 1344 |
1345 LayoutRect clipRect = clipRectForNinePieceImageStrip(this, borde
rImage, paintRect); | 1345 LayoutRect clipRect = clipRectForNinePieceImageStrip(this, borde
rImage, paintRect); |
1346 GraphicsContextStateSaver stateSaver(*context); | 1346 GraphicsContextStateSaver stateSaver(*context); |
1347 context->clip(clipRect); | 1347 context->clip(clipRect); |
1348 boxModelObject()->paintBorder(paintInfo, LayoutRect(stripX, stri
pY, stripWidth, stripHeight), renderer().style(isFirstLineStyle())); | 1348 boxModelObject()->paintBorder(paintInfo, LayoutRect(stripX, stri
pY, stripWidth, stripHeight), renderer().styleOrFirstLineStyle(isFirstLineStyle(
))); |
1349 } | 1349 } |
1350 } | 1350 } |
1351 } | 1351 } |
1352 } | 1352 } |
1353 | 1353 |
1354 void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffs
et) | 1354 void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffs
et) |
1355 { | 1355 { |
1356 if (!paintInfo.shouldPaintWithinRoot(&renderer()) || renderer().style()->vis
ibility() != VISIBLE || paintInfo.phase != PaintPhaseMask) | 1356 if (!paintInfo.shouldPaintWithinRoot(&renderer()) || renderer().style()->vis
ibility() != VISIBLE || paintInfo.phase != PaintPhaseMask) |
1357 return; | 1357 return; |
1358 | 1358 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1515 } else { | 1515 } else { |
1516 LayoutUnit bottomOfLastRubyTextLine = rubyText->logicalTop() + (
rubyText->lastRootBox() ? rubyText->lastRootBox()->lineBottom() : rubyText->logi
calHeight()); | 1516 LayoutUnit bottomOfLastRubyTextLine = rubyText->logicalTop() + (
rubyText->lastRootBox() ? rubyText->lastRootBox()->lineBottom() : rubyText->logi
calHeight()); |
1517 if (bottomOfLastRubyTextLine <= curr->logicalHeight()) | 1517 if (bottomOfLastRubyTextLine <= curr->logicalHeight()) |
1518 continue; | 1518 continue; |
1519 bottomOfLastRubyTextLine += curr->logicalTop(); | 1519 bottomOfLastRubyTextLine += curr->logicalTop(); |
1520 result = std::max(result, bottomOfLastRubyTextLine - allowedPosi
tion); | 1520 result = std::max(result, bottomOfLastRubyTextLine - allowedPosi
tion); |
1521 } | 1521 } |
1522 } | 1522 } |
1523 | 1523 |
1524 if (curr->isInlineTextBox()) { | 1524 if (curr->isInlineTextBox()) { |
1525 RenderStyle* style = curr->renderer().style(isFirstLineStyle()); | 1525 RenderStyle* style = curr->renderer().styleOrFirstLineStyle(isFirstL
ineStyle()); |
1526 TextEmphasisPosition emphasisMarkPosition; | 1526 TextEmphasisPosition emphasisMarkPosition; |
1527 if (style->textEmphasisMark() != TextEmphasisMarkNone && toInlineTex
tBox(curr)->getEmphasisMarkPosition(style, emphasisMarkPosition) && emphasisMark
Position == TextEmphasisPositionOver) { | 1527 if (style->textEmphasisMark() != TextEmphasisMarkNone && toInlineTex
tBox(curr)->getEmphasisMarkPosition(style, emphasisMarkPosition) && emphasisMark
Position == TextEmphasisPositionOver) { |
1528 if (!style->isFlippedLinesWritingMode()) { | 1528 if (!style->isFlippedLinesWritingMode()) { |
1529 int topOfEmphasisMark = curr->logicalTop() - style->font().e
mphasisMarkHeight(style->textEmphasisMarkString()); | 1529 int topOfEmphasisMark = curr->logicalTop() - style->font().e
mphasisMarkHeight(style->textEmphasisMarkString()); |
1530 result = std::max(result, allowedPosition - topOfEmphasisMar
k); | 1530 result = std::max(result, allowedPosition - topOfEmphasisMar
k); |
1531 } else { | 1531 } else { |
1532 int bottomOfEmphasisMark = curr->logicalBottom() + style->fo
nt().emphasisMarkHeight(style->textEmphasisMarkString()); | 1532 int bottomOfEmphasisMark = curr->logicalBottom() + style->fo
nt().emphasisMarkHeight(style->textEmphasisMarkString()); |
1533 result = std::max(result, bottomOfEmphasisMark - allowedPosi
tion); | 1533 result = std::max(result, bottomOfEmphasisMark - allowedPosi
tion); |
1534 } | 1534 } |
1535 } | 1535 } |
(...skipping 27 matching lines...) Expand all Loading... |
1563 } else { | 1563 } else { |
1564 LayoutUnit bottomOfLastRubyTextLine = rubyText->logicalTop() + (
rubyText->lastRootBox() ? rubyText->lastRootBox()->lineBottom() : rubyText->logi
calHeight()); | 1564 LayoutUnit bottomOfLastRubyTextLine = rubyText->logicalTop() + (
rubyText->lastRootBox() ? rubyText->lastRootBox()->lineBottom() : rubyText->logi
calHeight()); |
1565 if (bottomOfLastRubyTextLine <= curr->logicalHeight()) | 1565 if (bottomOfLastRubyTextLine <= curr->logicalHeight()) |
1566 continue; | 1566 continue; |
1567 bottomOfLastRubyTextLine += curr->logicalTop(); | 1567 bottomOfLastRubyTextLine += curr->logicalTop(); |
1568 result = std::max(result, bottomOfLastRubyTextLine - allowedPosi
tion); | 1568 result = std::max(result, bottomOfLastRubyTextLine - allowedPosi
tion); |
1569 } | 1569 } |
1570 } | 1570 } |
1571 | 1571 |
1572 if (curr->isInlineTextBox()) { | 1572 if (curr->isInlineTextBox()) { |
1573 RenderStyle* style = curr->renderer().style(isFirstLineStyle()); | 1573 RenderStyle* style = curr->renderer().styleOrFirstLineStyle(isFirstL
ineStyle()); |
1574 if (style->textEmphasisMark() != TextEmphasisMarkNone && style->text
EmphasisPosition() == TextEmphasisPositionUnder) { | 1574 if (style->textEmphasisMark() != TextEmphasisMarkNone && style->text
EmphasisPosition() == TextEmphasisPositionUnder) { |
1575 if (!style->isFlippedLinesWritingMode()) { | 1575 if (!style->isFlippedLinesWritingMode()) { |
1576 LayoutUnit bottomOfEmphasisMark = curr->logicalBottom() + st
yle->font().emphasisMarkHeight(style->textEmphasisMarkString()); | 1576 LayoutUnit bottomOfEmphasisMark = curr->logicalBottom() + st
yle->font().emphasisMarkHeight(style->textEmphasisMarkString()); |
1577 result = std::max(result, bottomOfEmphasisMark - allowedPosi
tion); | 1577 result = std::max(result, bottomOfEmphasisMark - allowedPosi
tion); |
1578 } else { | 1578 } else { |
1579 LayoutUnit topOfEmphasisMark = curr->logicalTop() - style->f
ont().emphasisMarkHeight(style->textEmphasisMarkString()); | 1579 LayoutUnit topOfEmphasisMark = curr->logicalTop() - style->f
ont().emphasisMarkHeight(style->textEmphasisMarkString()); |
1580 result = std::max(result, allowedPosition - topOfEmphasisMar
k); | 1580 result = std::max(result, allowedPosition - topOfEmphasisMar
k); |
1581 } | 1581 } |
1582 } | 1582 } |
1583 } | 1583 } |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1662 ASSERT(child->prevOnLine() == prev); | 1662 ASSERT(child->prevOnLine() == prev); |
1663 prev = child; | 1663 prev = child; |
1664 } | 1664 } |
1665 ASSERT(prev == m_lastChild); | 1665 ASSERT(prev == m_lastChild); |
1666 #endif | 1666 #endif |
1667 } | 1667 } |
1668 | 1668 |
1669 #endif | 1669 #endif |
1670 | 1670 |
1671 } // namespace WebCore | 1671 } // namespace WebCore |
OLD | NEW |