| 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 * Copyright (C) 2013 Adobe Systems Incorporated. | 5 * Copyright (C) 2013 Adobe Systems Incorporated. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 return false; | 207 return false; |
| 208 | 208 |
| 209 if (!shouldCollapseWhiteSpace(it.object().styleRef(), lineInfo, whitespacePo
sition) || it.object().isBR()) | 209 if (!shouldCollapseWhiteSpace(it.object().styleRef(), lineInfo, whitespacePo
sition) || it.object().isBR()) |
| 210 return true; | 210 return true; |
| 211 | 211 |
| 212 UChar current = it.current(); | 212 UChar current = it.current(); |
| 213 bool notJustWhitespace = current != spaceCharacter && current != tabulationC
haracter && current != softHyphenCharacter && (current != newlineCharacter || it
.object().preservesNewline()); | 213 bool notJustWhitespace = current != spaceCharacter && current != tabulationC
haracter && current != softHyphenCharacter && (current != newlineCharacter || it
.object().preservesNewline()); |
| 214 return notJustWhitespace || isEmptyInline(it.object()); | 214 return notJustWhitespace || isEmptyInline(it.object()); |
| 215 } | 215 } |
| 216 | 216 |
| 217 inline void setStaticPositions(LineLayoutBlockFlow block, LineLayoutBox child, b
ool shouldIndentText) | 217 inline void setStaticPositions(LineLayoutBlockFlow block, LineLayoutBox child, I
ndentTextOrNot indentText) |
| 218 { | 218 { |
| 219 ASSERT(child.isOutOfFlowPositioned()); | 219 ASSERT(child.isOutOfFlowPositioned()); |
| 220 // FIXME: The math here is actually not really right. It's a best-guess appr
oximation that | 220 // FIXME: The math here is actually not really right. It's a best-guess appr
oximation that |
| 221 // will work for the common cases | 221 // will work for the common cases |
| 222 LineLayoutItem containerBlock = child.container(); | 222 LineLayoutItem containerBlock = child.container(); |
| 223 LayoutUnit blockHeight = block.logicalHeight(); | 223 LayoutUnit blockHeight = block.logicalHeight(); |
| 224 if (containerBlock.isLayoutInline()) { | 224 if (containerBlock.isLayoutInline()) { |
| 225 // A relative positioned inline encloses us. In this case, we also have
to determine our | 225 // A relative positioned inline encloses us. In this case, we also have
to determine our |
| 226 // position as though we were an inline. Set |staticInlinePosition| and
|staticBlockPosition| on the relative positioned | 226 // position as though we were an inline. Set |staticInlinePosition| and
|staticBlockPosition| on the relative positioned |
| 227 // inline so that we can obtain the value later. | 227 // inline so that we can obtain the value later. |
| 228 LineLayoutInline(containerBlock).layer()->setStaticInlinePosition(block.
startAlignedOffsetForLine(blockHeight, shouldIndentText)); | 228 LineLayoutInline(containerBlock).layer()->setStaticInlinePosition(block.
startAlignedOffsetForLine(blockHeight, indentText)); |
| 229 LineLayoutInline(containerBlock).layer()->setStaticBlockPosition(blockHe
ight); | 229 LineLayoutInline(containerBlock).layer()->setStaticBlockPosition(blockHe
ight); |
| 230 | 230 |
| 231 // If |child| is a leading or trailing positioned object this is its onl
y opportunity to ensure it moves with an inline | 231 // If |child| is a leading or trailing positioned object this is its onl
y opportunity to ensure it moves with an inline |
| 232 // container changing width. | 232 // container changing width. |
| 233 child.moveWithEdgeOfInlineContainerIfNecessary(child.isHorizontalWriting
Mode()); | 233 child.moveWithEdgeOfInlineContainerIfNecessary(child.isHorizontalWriting
Mode()); |
| 234 } | 234 } |
| 235 block.updateStaticInlinePositionForChild(child, blockHeight, shouldIndentTex
t); | 235 block.updateStaticInlinePositionForChild(child, blockHeight, indentText); |
| 236 child.layer()->setStaticBlockPosition(blockHeight); | 236 child.layer()->setStaticBlockPosition(blockHeight); |
| 237 } | 237 } |
| 238 | 238 |
| 239 // FIXME: The entire concept of the skipTrailingWhitespace function is flawed, s
ince we really need to be building | 239 // FIXME: The entire concept of the skipTrailingWhitespace function is flawed, s
ince we really need to be building |
| 240 // line boxes even for containers that may ultimately collapse away. Otherwise w
e'll never get positioned | 240 // line boxes even for containers that may ultimately collapse away. Otherwise w
e'll never get positioned |
| 241 // elements quite right. In other words, we need to build this function's work i
nto the normal line | 241 // elements quite right. In other words, we need to build this function's work i
nto the normal line |
| 242 // object iteration process. | 242 // object iteration process. |
| 243 // NB. this function will insert any floating elements that would otherwise | 243 // NB. this function will insert any floating elements that would otherwise |
| 244 // be skipped but it will not position them. | 244 // be skipped but it will not position them. |
| 245 inline void BreakingContext::skipTrailingWhitespace(InlineIterator& iterator, co
nst LineInfo& lineInfo) | 245 inline void BreakingContext::skipTrailingWhitespace(InlineIterator& iterator, co
nst LineInfo& lineInfo) |
| 246 { | 246 { |
| 247 while (!iterator.atEnd() && !requiresLineBox(iterator, lineInfo, TrailingWhi
tespace)) { | 247 while (!iterator.atEnd() && !requiresLineBox(iterator, lineInfo, TrailingWhi
tespace)) { |
| 248 LineLayoutItem item = iterator.object(); | 248 LineLayoutItem item = iterator.object(); |
| 249 if (item.isOutOfFlowPositioned()) | 249 if (item.isOutOfFlowPositioned()) |
| 250 setStaticPositions(m_block, LineLayoutBox(item), false); | 250 setStaticPositions(m_block, LineLayoutBox(item), DoNotIndentText); |
| 251 else if (item.isFloating()) | 251 else if (item.isFloating()) |
| 252 m_block.insertFloatingObject(LineLayoutBox(item)); | 252 m_block.insertFloatingObject(LineLayoutBox(item)); |
| 253 iterator.increment(); | 253 iterator.increment(); |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 | 256 |
| 257 inline void BreakingContext::initializeForCurrentObject() | 257 inline void BreakingContext::initializeForCurrentObject() |
| 258 { | 258 { |
| 259 m_currentStyle = m_current.object().style(); | 259 m_currentStyle = m_current.object().style(); |
| 260 m_nextObject = bidiNextSkippingEmptyInlines(m_block, m_current.object()); | 260 m_nextObject = bidiNextSkippingEmptyInlines(m_block, m_current.object()); |
| (...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 if (m_lastObject.isAtomicInlineLevel() && m_autoWrap && (!m_lastObject.i
sImage() || m_allowImagesToBreak) && (!m_lastObject.isListMarker() || LineLayout
ListMarker(m_lastObject).isInside()) | 967 if (m_lastObject.isAtomicInlineLevel() && m_autoWrap && (!m_lastObject.i
sImage() || m_allowImagesToBreak) && (!m_lastObject.isListMarker() || LineLayout
ListMarker(m_lastObject).isInside()) |
| 968 && !m_lastObject.isRubyRun()) { | 968 && !m_lastObject.isRubyRun()) { |
| 969 m_width.commit(); | 969 m_width.commit(); |
| 970 m_lineBreak.moveToStartOf(m_nextObject); | 970 m_lineBreak.moveToStartOf(m_nextObject); |
| 971 } | 971 } |
| 972 } | 972 } |
| 973 } | 973 } |
| 974 | 974 |
| 975 inline IndentTextOrNot requiresIndent(bool isFirstLine, bool isAfterHardLineBrea
k, const ComputedStyle& style) | 975 inline IndentTextOrNot requiresIndent(bool isFirstLine, bool isAfterHardLineBrea
k, const ComputedStyle& style) |
| 976 { | 976 { |
| 977 IndentTextOrNot shouldIndentText = DoNotIndentText; | 977 IndentTextOrNot indentText = DoNotIndentText; |
| 978 if (isFirstLine || (isAfterHardLineBreak && style.textIndentLine()) == TextI
ndentEachLine) | 978 if (isFirstLine || (isAfterHardLineBreak && style.textIndentLine()) == TextI
ndentEachLine) |
| 979 shouldIndentText = IndentText; | 979 indentText = IndentText; |
| 980 | 980 |
| 981 if (style.textIndentType() == TextIndentHanging) | 981 if (style.textIndentType() == TextIndentHanging) |
| 982 shouldIndentText = shouldIndentText == IndentText ? DoNotIndentText : In
dentText; | 982 indentText = indentText == IndentText ? DoNotIndentText : IndentText; |
| 983 | 983 |
| 984 return shouldIndentText; | 984 return indentText; |
| 985 } | 985 } |
| 986 | 986 |
| 987 } | 987 } |
| 988 | 988 |
| 989 #endif // BreakingContextInlineHeaders_h | 989 #endif // BreakingContextInlineHeaders_h |
| OLD | NEW |