| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. |
| 4 * Copyright (C) 2010 Google Inc. All rights reserved. | 4 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1003 else | 1003 else |
| 1004 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirectio
n(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | 1004 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirectio
n(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); |
| 1005 break; | 1005 break; |
| 1006 } | 1006 } |
| 1007 } | 1007 } |
| 1008 | 1008 |
| 1009 static IndentTextOrNot requiresIndent(bool isFirstLine, bool isAfterHardLineBrea
k, RenderStyle* style) | 1009 static IndentTextOrNot requiresIndent(bool isFirstLine, bool isAfterHardLineBrea
k, RenderStyle* style) |
| 1010 { | 1010 { |
| 1011 if (isFirstLine) | 1011 if (isFirstLine) |
| 1012 return IndentText; | 1012 return IndentText; |
| 1013 #if ENABLE(CSS3_TEXT) | |
| 1014 if (isAfterHardLineBreak && style->textIndentLine() == TextIndentEachLine) | 1013 if (isAfterHardLineBreak && style->textIndentLine() == TextIndentEachLine) |
| 1015 return IndentText; | 1014 return IndentText; |
| 1016 #else | 1015 |
| 1017 UNUSED_PARAM(isAfterHardLineBreak); | |
| 1018 UNUSED_PARAM(style); | |
| 1019 #endif | |
| 1020 return DoNotIndentText; | 1016 return DoNotIndentText; |
| 1021 } | 1017 } |
| 1022 | 1018 |
| 1023 static void updateLogicalInlinePositions(RenderBlock* block, float& lineLogicalL
eft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine, Inde
ntTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight) | 1019 static void updateLogicalInlinePositions(RenderBlock* block, float& lineLogicalL
eft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine, Inde
ntTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight) |
| 1024 { | 1020 { |
| 1025 LayoutUnit lineLogicalHeight = logicalHeightForLine(block, firstLine, boxLog
icalHeight); | 1021 LayoutUnit lineLogicalHeight = logicalHeightForLine(block, firstLine, boxLog
icalHeight); |
| 1026 lineLogicalLeft = block->pixelSnappedLogicalLeftOffsetForLine(block->logical
Height(), shouldIndentText == IndentText, lineLogicalHeight); | 1022 lineLogicalLeft = block->pixelSnappedLogicalLeftOffsetForLine(block->logical
Height(), shouldIndentText == IndentText, lineLogicalHeight); |
| 1027 lineLogicalRight = block->pixelSnappedLogicalRightOffsetForLine(block->logic
alHeight(), shouldIndentText == IndentText, lineLogicalHeight); | 1023 lineLogicalRight = block->pixelSnappedLogicalRightOffsetForLine(block->logic
alHeight(), shouldIndentText == IndentText, lineLogicalHeight); |
| 1028 availableLogicalWidth = lineLogicalRight - lineLogicalLeft; | 1024 availableLogicalWidth = lineLogicalRight - lineLogicalLeft; |
| 1029 } | 1025 } |
| 1030 | 1026 |
| 1031 void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
const LineInfo& lineInfo, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool re
achedEnd, | 1027 void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
const LineInfo& lineInfo, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool re
achedEnd, |
| 1032 GlyphOverflowAndFallbac
kFontsMap& textBoxDataMap, VerticalPositionCache& verticalPositionCache, WordMea
surements& wordMeasurements) | 1028 GlyphOverflowAndFallbac
kFontsMap& textBoxDataMap, VerticalPositionCache& verticalPositionCache, WordMea
surements& wordMeasurements) |
| 1033 { | 1029 { |
| 1034 ETextAlign textAlign = textAlignmentForLine(!reachedEnd && !lineBox->endsWit
hBreak()); | 1030 ETextAlign textAlign = textAlignmentForLine(!reachedEnd && !lineBox->endsWit
hBreak()); |
| 1035 | 1031 |
| 1036 // CSS 2.1: "'Text-indent' only affects a line if it is the first formatted
line of an element. For example, the first line of an anonymous block | 1032 // CSS 2.1: "'Text-indent' only affects a line if it is the first formatted
line of an element. For example, the first line of an anonymous block |
| 1037 // box is only affected if it is the first child of its parent element." | 1033 // box is only affected if it is the first child of its parent element." |
| 1038 // CSS3 "text-indent", "-webkit-each-line" affects the first line of the blo
ck container as well as each line after a forced line break, | 1034 // CSS3 "text-indent", "each-line" affects the first line of the block conta
iner as well as each line after a forced line break, |
| 1039 // but does not affect lines after a soft wrap break. | 1035 // but does not affect lines after a soft wrap break. |
| 1040 bool isFirstLine = lineInfo.isFirstLine() && !(isAnonymousBlock() && parent(
)->firstChild() != this); | 1036 bool isFirstLine = lineInfo.isFirstLine() && !(isAnonymousBlock() && parent(
)->firstChild() != this); |
| 1041 bool isAfterHardLineBreak = lineBox->prevRootBox() && lineBox->prevRootBox()
->endsWithBreak(); | 1037 bool isAfterHardLineBreak = lineBox->prevRootBox() && lineBox->prevRootBox()
->endsWithBreak(); |
| 1042 IndentTextOrNot shouldIndentText = requiresIndent(isFirstLine, isAfterHardLi
neBreak, style()); | 1038 IndentTextOrNot shouldIndentText = requiresIndent(isFirstLine, isAfterHardLi
neBreak, style()); |
| 1043 float lineLogicalLeft; | 1039 float lineLogicalLeft; |
| 1044 float lineLogicalRight; | 1040 float lineLogicalRight; |
| 1045 float availableLogicalWidth; | 1041 float availableLogicalWidth; |
| 1046 updateLogicalInlinePositions(this, lineLogicalLeft, lineLogicalRight, availa
bleLogicalWidth, isFirstLine, shouldIndentText, 0); | 1042 updateLogicalInlinePositions(this, lineLogicalLeft, lineLogicalRight, availa
bleLogicalWidth, isFirstLine, shouldIndentText, 0); |
| 1047 bool needsWordSpacing; | 1043 bool needsWordSpacing; |
| 1048 ShapeInsideInfo* shapeInsideInfo = layoutShapeInsideInfo(); | 1044 ShapeInsideInfo* shapeInsideInfo = layoutShapeInsideInfo(); |
| (...skipping 2484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3533 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver
ticalPositionCache); | 3529 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver
ticalPositionCache); |
| 3534 | 3530 |
| 3535 setLineGridBox(lineGridBox); | 3531 setLineGridBox(lineGridBox); |
| 3536 | 3532 |
| 3537 // FIXME: If any of the characteristics of the box change compared to the ol
d one, then we need to do a deep dirtying | 3533 // FIXME: If any of the characteristics of the box change compared to the ol
d one, then we need to do a deep dirtying |
| 3538 // (similar to what happens when the page height changes). Ideally, though,
we only do this if someone is actually snapping | 3534 // (similar to what happens when the page height changes). Ideally, though,
we only do this if someone is actually snapping |
| 3539 // to this grid. | 3535 // to this grid. |
| 3540 } | 3536 } |
| 3541 | 3537 |
| 3542 } | 3538 } |
| OLD | NEW |