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 * |
11 * This library is distributed in the hope that it will be useful, | 11 * This library is distributed in the hope that it will be useful, |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 * Library General Public License for more details. | 14 * Library General Public License for more details. |
15 * | 15 * |
16 * You should have received a copy of the GNU Library General Public License | 16 * You should have received a copy of the GNU Library General Public License |
17 * along with this library; see the file COPYING.LIB. If not, write to | 17 * along with this library; see the file COPYING.LIB. If not, write to |
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 * Boston, MA 02110-1301, USA. | 19 * Boston, MA 02110-1301, USA. |
20 * | 20 * |
21 */ | 21 */ |
22 | 22 |
23 #include "config.h" | 23 #include "config.h" |
24 | 24 |
25 #include "RuntimeEnabledFeatures.h" | |
25 #include "core/platform/text/BidiResolver.h" | 26 #include "core/platform/text/BidiResolver.h" |
26 #include "core/rendering/InlineIterator.h" | 27 #include "core/rendering/InlineIterator.h" |
27 #include "core/rendering/InlineTextBox.h" | 28 #include "core/rendering/InlineTextBox.h" |
28 #include "core/rendering/RenderCombineText.h" | 29 #include "core/rendering/RenderCombineText.h" |
29 #include "core/rendering/RenderCounter.h" | 30 #include "core/rendering/RenderCounter.h" |
30 #include "core/rendering/RenderFlowThread.h" | 31 #include "core/rendering/RenderFlowThread.h" |
31 #include "core/rendering/RenderInline.h" | 32 #include "core/rendering/RenderInline.h" |
32 #include "core/rendering/RenderLayer.h" | 33 #include "core/rendering/RenderLayer.h" |
33 #include "core/rendering/RenderListMarker.h" | 34 #include "core/rendering/RenderListMarker.h" |
34 #include "core/rendering/RenderRegion.h" | 35 #include "core/rendering/RenderRegion.h" |
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
951 else | 952 else |
952 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirectio n(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | 953 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirectio n(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); |
953 break; | 954 break; |
954 } | 955 } |
955 } | 956 } |
956 | 957 |
957 static IndentTextOrNot requiresIndent(bool isFirstLine, bool isAfterHardLineBrea k, RenderStyle* style) | 958 static IndentTextOrNot requiresIndent(bool isFirstLine, bool isAfterHardLineBrea k, RenderStyle* style) |
958 { | 959 { |
959 if (isFirstLine) | 960 if (isFirstLine) |
960 return IndentText; | 961 return IndentText; |
961 #if ENABLE(CSS3_TEXT) | 962 if (RuntimeEnabledFeatures::css3TextEnabled() && isAfterHardLineBreak && sty le->textIndentLine() == TextIndentEachLine) |
Julien - ping for review
2013/08/21 01:50:08
This is unneeded. If CSS3 Text is not enabled, we
jaehun
2013/08/21 05:51:02
Done.
| |
962 if (isAfterHardLineBreak && style->textIndentLine() == TextIndentEachLine) | |
963 return IndentText; | 963 return IndentText; |
964 #else | 964 |
965 UNUSED_PARAM(isAfterHardLineBreak); | |
966 UNUSED_PARAM(style); | |
967 #endif | |
968 return DoNotIndentText; | 965 return DoNotIndentText; |
969 } | 966 } |
970 | 967 |
971 static void updateLogicalInlinePositions(RenderBlock* block, float& lineLogicalL eft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine, Inde ntTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight) | 968 static void updateLogicalInlinePositions(RenderBlock* block, float& lineLogicalL eft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine, Inde ntTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight) |
972 { | 969 { |
973 LayoutUnit lineLogicalHeight = logicalHeightForLine(block, firstLine, boxLog icalHeight); | 970 LayoutUnit lineLogicalHeight = logicalHeightForLine(block, firstLine, boxLog icalHeight); |
974 lineLogicalLeft = block->pixelSnappedLogicalLeftOffsetForLine(block->logical Height(), shouldIndentText == IndentText, lineLogicalHeight); | 971 lineLogicalLeft = block->pixelSnappedLogicalLeftOffsetForLine(block->logical Height(), shouldIndentText == IndentText, lineLogicalHeight); |
975 lineLogicalRight = block->pixelSnappedLogicalRightOffsetForLine(block->logic alHeight(), shouldIndentText == IndentText, lineLogicalHeight); | 972 lineLogicalRight = block->pixelSnappedLogicalRightOffsetForLine(block->logic alHeight(), shouldIndentText == IndentText, lineLogicalHeight); |
976 availableLogicalWidth = lineLogicalRight - lineLogicalLeft; | 973 availableLogicalWidth = lineLogicalRight - lineLogicalLeft; |
977 } | 974 } |
978 | 975 |
979 void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox, const LineInfo& lineInfo, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool re achedEnd, | 976 void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox, const LineInfo& lineInfo, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool re achedEnd, |
980 GlyphOverflowAndFallbac kFontsMap& textBoxDataMap, VerticalPositionCache& verticalPositionCache, WordMea surements& wordMeasurements) | 977 GlyphOverflowAndFallbac kFontsMap& textBoxDataMap, VerticalPositionCache& verticalPositionCache, WordMea surements& wordMeasurements) |
981 { | 978 { |
982 ETextAlign textAlign = textAlignmentForLine(!reachedEnd && !lineBox->endsWit hBreak()); | 979 ETextAlign textAlign = textAlignmentForLine(!reachedEnd && !lineBox->endsWit hBreak()); |
983 | 980 |
984 // 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 | 981 // 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 |
985 // box is only affected if it is the first child of its parent element." | 982 // box is only affected if it is the first child of its parent element." |
986 // 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, | 983 // CSS3 "text-indent", "each-line" affects the first line of the block conta iner as well as each line after a forced line break, |
987 // but does not affect lines after a soft wrap break. | 984 // but does not affect lines after a soft wrap break. |
988 bool isFirstLine = lineInfo.isFirstLine() && !(isAnonymousBlock() && parent( )->firstChild() != this); | 985 bool isFirstLine = lineInfo.isFirstLine() && !(isAnonymousBlock() && parent( )->firstChild() != this); |
989 bool isAfterHardLineBreak = lineBox->prevRootBox() && lineBox->prevRootBox() ->endsWithBreak(); | 986 bool isAfterHardLineBreak = lineBox->prevRootBox() && lineBox->prevRootBox() ->endsWithBreak(); |
990 IndentTextOrNot shouldIndentText = requiresIndent(isFirstLine, isAfterHardLi neBreak, style()); | 987 IndentTextOrNot shouldIndentText = requiresIndent(isFirstLine, isAfterHardLi neBreak, style()); |
991 float lineLogicalLeft; | 988 float lineLogicalLeft; |
992 float lineLogicalRight; | 989 float lineLogicalRight; |
993 float availableLogicalWidth; | 990 float availableLogicalWidth; |
994 updateLogicalInlinePositions(this, lineLogicalLeft, lineLogicalRight, availa bleLogicalWidth, isFirstLine, shouldIndentText, 0); | 991 updateLogicalInlinePositions(this, lineLogicalLeft, lineLogicalRight, availa bleLogicalWidth, isFirstLine, shouldIndentText, 0); |
995 bool needsWordSpacing; | 992 bool needsWordSpacing; |
996 ShapeInsideInfo* shapeInsideInfo = layoutShapeInsideInfo(); | 993 ShapeInsideInfo* shapeInsideInfo = layoutShapeInsideInfo(); |
(...skipping 2482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3479 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver ticalPositionCache); | 3476 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver ticalPositionCache); |
3480 | 3477 |
3481 setLineGridBox(lineGridBox); | 3478 setLineGridBox(lineGridBox); |
3482 | 3479 |
3483 // FIXME: If any of the characteristics of the box change compared to the ol d one, then we need to do a deep dirtying | 3480 // FIXME: If any of the characteristics of the box change compared to the ol d one, then we need to do a deep dirtying |
3484 // (similar to what happens when the page height changes). Ideally, though, we only do this if someone is actually snapping | 3481 // (similar to what happens when the page height changes). Ideally, though, we only do this if someone is actually snapping |
3485 // to this grid. | 3482 // to this grid. |
3486 } | 3483 } |
3487 | 3484 |
3488 } | 3485 } |
OLD | NEW |