| 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 14 matching lines...) Expand all Loading... |
| 25 #include "core/layout/HitTestResult.h" | 25 #include "core/layout/HitTestResult.h" |
| 26 #include "core/layout/LayoutBlock.h" | 26 #include "core/layout/LayoutBlock.h" |
| 27 #include "core/layout/LayoutInline.h" | 27 #include "core/layout/LayoutInline.h" |
| 28 #include "core/layout/LayoutListMarker.h" | 28 #include "core/layout/LayoutListMarker.h" |
| 29 #include "core/layout/LayoutObjectInlines.h" | 29 #include "core/layout/LayoutObjectInlines.h" |
| 30 #include "core/layout/LayoutRubyBase.h" | 30 #include "core/layout/LayoutRubyBase.h" |
| 31 #include "core/layout/LayoutRubyRun.h" | 31 #include "core/layout/LayoutRubyRun.h" |
| 32 #include "core/layout/LayoutRubyText.h" | 32 #include "core/layout/LayoutRubyText.h" |
| 33 #include "core/layout/LayoutView.h" | 33 #include "core/layout/LayoutView.h" |
| 34 #include "core/layout/api/LineLayoutBox.h" | 34 #include "core/layout/api/LineLayoutBox.h" |
| 35 #include "core/layout/api/LineLayoutRubyRun.h" |
| 35 #include "core/layout/line/GlyphOverflow.h" | 36 #include "core/layout/line/GlyphOverflow.h" |
| 36 #include "core/layout/line/InlineTextBox.h" | 37 #include "core/layout/line/InlineTextBox.h" |
| 37 #include "core/layout/line/RootInlineBox.h" | 38 #include "core/layout/line/RootInlineBox.h" |
| 38 #include "core/paint/BoxPainter.h" | 39 #include "core/paint/BoxPainter.h" |
| 39 #include "core/paint/InlineFlowBoxPainter.h" | 40 #include "core/paint/InlineFlowBoxPainter.h" |
| 40 #include "core/style/ShadowList.h" | 41 #include "core/style/ShadowList.h" |
| 41 #include "platform/fonts/Font.h" | 42 #include "platform/fonts/Font.h" |
| 42 | 43 |
| 43 #include <math.h> | 44 #include <math.h> |
| 44 | 45 |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 if (childAffectsTopBottomPos) { | 644 if (childAffectsTopBottomPos) { |
| 644 if (curr->layoutObject().isRubyRun()) { | 645 if (curr->layoutObject().isRubyRun()) { |
| 645 // Treat the leading on the first and last lines of ruby runs as
not being part of the overall lineTop/lineBottom. | 646 // Treat the leading on the first and last lines of ruby runs as
not being part of the overall lineTop/lineBottom. |
| 646 // Really this is a workaround hack for the fact that ruby shoul
d have been done as line layout and not done using | 647 // Really this is a workaround hack for the fact that ruby shoul
d have been done as line layout and not done using |
| 647 // inline-block. | 648 // inline-block. |
| 648 if (layoutObject().style()->isFlippedLinesWritingMode() == (curr
->layoutObject().style()->rubyPosition() == RubyPositionAfter)) | 649 if (layoutObject().style()->isFlippedLinesWritingMode() == (curr
->layoutObject().style()->rubyPosition() == RubyPositionAfter)) |
| 649 hasAnnotationsBefore = true; | 650 hasAnnotationsBefore = true; |
| 650 else | 651 else |
| 651 hasAnnotationsAfter = true; | 652 hasAnnotationsAfter = true; |
| 652 | 653 |
| 653 LayoutRubyRun& rubyRun = toLayoutRubyRun(curr->layoutObject()); | 654 LineLayoutRubyRun rubyRun = LineLayoutRubyRun(curr->lineLayoutIt
em()); |
| 654 if (LayoutRubyBase* rubyBase = rubyRun.rubyBase()) { | 655 if (LayoutRubyBase* rubyBase = rubyRun.rubyBase()) { |
| 655 LayoutUnit bottomRubyBaseLeading = (curr->logicalHeight() -
rubyBase->logicalBottom()) + rubyBase->logicalHeight() - (rubyBase->lastRootBox(
) ? rubyBase->lastRootBox()->lineBottom() : LayoutUnit()); | 656 LayoutUnit bottomRubyBaseLeading = (curr->logicalHeight() -
rubyBase->logicalBottom()) + rubyBase->logicalHeight() - (rubyBase->lastRootBox(
) ? rubyBase->lastRootBox()->lineBottom() : LayoutUnit()); |
| 656 LayoutUnit topRubyBaseLeading = rubyBase->logicalTop() + (ru
byBase->firstRootBox() ? rubyBase->firstRootBox()->lineTop() : LayoutUnit()); | 657 LayoutUnit topRubyBaseLeading = rubyBase->logicalTop() + (ru
byBase->firstRootBox() ? rubyBase->firstRootBox()->lineTop() : LayoutUnit()); |
| 657 newLogicalTop += !layoutObject().style()->isFlippedLinesWrit
ingMode() ? topRubyBaseLeading : bottomRubyBaseLeading; | 658 newLogicalTop += !layoutObject().style()->isFlippedLinesWrit
ingMode() ? topRubyBaseLeading : bottomRubyBaseLeading; |
| 658 boxHeight -= (topRubyBaseLeading + bottomRubyBaseLeading); | 659 boxHeight -= (topRubyBaseLeading + bottomRubyBaseLeading); |
| 659 } | 660 } |
| 660 } | 661 } |
| 661 if (curr->isInlineTextBox()) { | 662 if (curr->isInlineTextBox()) { |
| 662 TextEmphasisPosition emphasisMarkPosition; | 663 TextEmphasisPosition emphasisMarkPosition; |
| 663 if (toInlineTextBox(curr)->getEmphasisMarkPosition(curr->layoutO
bject().styleRef(isFirstLineStyle()), emphasisMarkPosition)) { | 664 if (toInlineTextBox(curr)->getEmphasisMarkPosition(curr->layoutO
bject().styleRef(isFirstLineStyle()), emphasisMarkPosition)) { |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1136 { | 1137 { |
| 1137 LayoutUnit result = 0; | 1138 LayoutUnit result = 0; |
| 1138 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { | 1139 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { |
| 1139 if (curr->layoutObject().isOutOfFlowPositioned()) | 1140 if (curr->layoutObject().isOutOfFlowPositioned()) |
| 1140 continue; // Positioned placeholders don't affect calculations. | 1141 continue; // Positioned placeholders don't affect calculations. |
| 1141 | 1142 |
| 1142 if (curr->isInlineFlowBox()) | 1143 if (curr->isInlineFlowBox()) |
| 1143 result = std::max(result, toInlineFlowBox(curr)->computeOverAnnotati
onAdjustment(allowedPosition)); | 1144 result = std::max(result, toInlineFlowBox(curr)->computeOverAnnotati
onAdjustment(allowedPosition)); |
| 1144 | 1145 |
| 1145 if (curr->layoutObject().isReplaced() && curr->layoutObject().isRubyRun(
) && curr->layoutObject().style()->rubyPosition() == RubyPositionBefore) { | 1146 if (curr->layoutObject().isReplaced() && curr->layoutObject().isRubyRun(
) && curr->layoutObject().style()->rubyPosition() == RubyPositionBefore) { |
| 1146 LayoutRubyRun& rubyRun = toLayoutRubyRun(curr->layoutObject()); | 1147 LineLayoutRubyRun rubyRun = LineLayoutRubyRun(curr->lineLayoutItem()
); |
| 1147 LayoutRubyText* rubyText = rubyRun.rubyText(); | 1148 LayoutRubyText* rubyText = rubyRun.rubyText(); |
| 1148 if (!rubyText) | 1149 if (!rubyText) |
| 1149 continue; | 1150 continue; |
| 1150 | 1151 |
| 1151 if (!rubyRun.style()->isFlippedLinesWritingMode()) { | 1152 if (!rubyRun.style()->isFlippedLinesWritingMode()) { |
| 1152 LayoutUnit topOfFirstRubyTextLine = rubyText->logicalTop() + (ru
byText->firstRootBox() ? rubyText->firstRootBox()->lineTop() : LayoutUnit()); | 1153 LayoutUnit topOfFirstRubyTextLine = rubyText->logicalTop() + (ru
byText->firstRootBox() ? rubyText->firstRootBox()->lineTop() : LayoutUnit()); |
| 1153 if (topOfFirstRubyTextLine >= 0) | 1154 if (topOfFirstRubyTextLine >= 0) |
| 1154 continue; | 1155 continue; |
| 1155 topOfFirstRubyTextLine += curr->logicalTop(); | 1156 topOfFirstRubyTextLine += curr->logicalTop(); |
| 1156 result = std::max(result, allowedPosition - topOfFirstRubyTextLi
ne); | 1157 result = std::max(result, allowedPosition - topOfFirstRubyTextLi
ne); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1184 { | 1185 { |
| 1185 LayoutUnit result = 0; | 1186 LayoutUnit result = 0; |
| 1186 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { | 1187 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { |
| 1187 if (curr->layoutObject().isOutOfFlowPositioned()) | 1188 if (curr->layoutObject().isOutOfFlowPositioned()) |
| 1188 continue; // Positioned placeholders don't affect calculations. | 1189 continue; // Positioned placeholders don't affect calculations. |
| 1189 | 1190 |
| 1190 if (curr->isInlineFlowBox()) | 1191 if (curr->isInlineFlowBox()) |
| 1191 result = std::max(result, toInlineFlowBox(curr)->computeUnderAnnotat
ionAdjustment(allowedPosition)); | 1192 result = std::max(result, toInlineFlowBox(curr)->computeUnderAnnotat
ionAdjustment(allowedPosition)); |
| 1192 | 1193 |
| 1193 if (curr->layoutObject().isReplaced() && curr->layoutObject().isRubyRun(
) && curr->layoutObject().style()->rubyPosition() == RubyPositionAfter) { | 1194 if (curr->layoutObject().isReplaced() && curr->layoutObject().isRubyRun(
) && curr->layoutObject().style()->rubyPosition() == RubyPositionAfter) { |
| 1194 LayoutRubyRun& rubyRun = toLayoutRubyRun(curr->layoutObject()); | 1195 LineLayoutRubyRun rubyRun = LineLayoutRubyRun(curr->lineLayoutItem()
); |
| 1195 LayoutRubyText* rubyText = rubyRun.rubyText(); | 1196 LayoutRubyText* rubyText = rubyRun.rubyText(); |
| 1196 if (!rubyText) | 1197 if (!rubyText) |
| 1197 continue; | 1198 continue; |
| 1198 | 1199 |
| 1199 if (rubyRun.style()->isFlippedLinesWritingMode()) { | 1200 if (rubyRun.style()->isFlippedLinesWritingMode()) { |
| 1200 LayoutUnit topOfFirstRubyTextLine = rubyText->logicalTop() + (ru
byText->firstRootBox() ? rubyText->firstRootBox()->lineTop() : LayoutUnit()); | 1201 LayoutUnit topOfFirstRubyTextLine = rubyText->logicalTop() + (ru
byText->firstRootBox() ? rubyText->firstRootBox()->lineTop() : LayoutUnit()); |
| 1201 if (topOfFirstRubyTextLine >= 0) | 1202 if (topOfFirstRubyTextLine >= 0) |
| 1202 continue; | 1203 continue; |
| 1203 topOfFirstRubyTextLine += curr->logicalTop(); | 1204 topOfFirstRubyTextLine += curr->logicalTop(); |
| 1204 result = std::max(result, allowedPosition - topOfFirstRubyTextLi
ne); | 1205 result = std::max(result, allowedPosition - topOfFirstRubyTextLi
ne); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1308 ASSERT(child->prevOnLine() == prev); | 1309 ASSERT(child->prevOnLine() == prev); |
| 1309 prev = child; | 1310 prev = child; |
| 1310 } | 1311 } |
| 1311 ASSERT(prev == m_lastChild); | 1312 ASSERT(prev == m_lastChild); |
| 1312 #endif | 1313 #endif |
| 1313 } | 1314 } |
| 1314 | 1315 |
| 1315 #endif | 1316 #endif |
| 1316 | 1317 |
| 1317 } // namespace blink | 1318 } // namespace blink |
| OLD | NEW |