| 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) 2014 Adobe Systems Inc. | 5 * Copyright (C) 2014 Adobe Systems Inc. |
| 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. |
| 11 * | 11 * |
| 12 * This library is distributed in the hope that it will be useful, | 12 * This library is distributed in the hope that it will be useful, |
| 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 * Library General Public License for more details. | 15 * Library General Public License for more details. |
| 16 * | 16 * |
| 17 * You should have received a copy of the GNU Library General Public License | 17 * You should have received a copy of the GNU Library General Public License |
| 18 * along with this library; see the file COPYING.LIB. If not, write to | 18 * along with this library; see the file COPYING.LIB. If not, write to |
| 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 20 * Boston, MA 02110-1301, USA. | 20 * Boston, MA 02110-1301, USA. |
| 21 * | 21 * |
| 22 */ | 22 */ |
| 23 | 23 |
| 24 #include "config.h" | 24 #include "config.h" |
| 25 #include "core/layout/line/TrailingObjects.h" | 25 #include "core/layout/line/TrailingObjects.h" |
| 26 | 26 |
| 27 #include "core/layout/line/BreakingContextInlineHeaders.h" |
| 27 #include "core/layout/line/InlineIterator.h" | 28 #include "core/layout/line/InlineIterator.h" |
| 28 | 29 |
| 29 namespace blink { | 30 namespace blink { |
| 30 | 31 |
| 31 void TrailingObjects::updateMidpointsForTrailingObjects(LineMidpointState& lineM
idpointState, const InlineIterator& lBreak, CollapseFirstSpaceOrNot collapseFirs
tSpace) | 32 void TrailingObjects::updateMidpointsForTrailingObjects(LineMidpointState& lineM
idpointState, const InlineIterator& lBreak, CollapseFirstSpaceOrNot collapseFirs
tSpace) |
| 32 { | 33 { |
| 33 if (!m_whitespace) | 34 if (!m_whitespace) |
| 34 return; | 35 return; |
| 35 | 36 |
| 36 // This object is either going to be part of the last midpoint, or it is goi
ng to be the actual endpoint. | 37 // This object is either going to be part of the last midpoint, or it is goi
ng to be the actual endpoint. |
| 37 // In both cases we just decrease our pos by 1 level to exclude the space, a
llowing it to - in effect - collapse into the newline. | 38 // In both cases we just decrease our pos by 1 level to exclude the space, a
llowing it to - in effect - collapse into the newline. |
| 38 if (lineMidpointState.numMidpoints() % 2) { | 39 if (lineMidpointState.numMidpoints() % 2) { |
| 39 // Find the trailing space object's midpoint. | 40 // Find the trailing space object's midpoint. |
| 40 int trailingSpaceMidpoint = lineMidpointState.numMidpoints() - 1; | 41 int trailingSpaceMidpoint = lineMidpointState.numMidpoints() - 1; |
| 41 for ( ; trailingSpaceMidpoint > 0 && lineMidpointState.midpoints()[trail
ingSpaceMidpoint].object() != m_whitespace; --trailingSpaceMidpoint) { } | 42 for ( ; trailingSpaceMidpoint > 0 && lineMidpointState.midpoints()[trail
ingSpaceMidpoint].object() != m_whitespace; --trailingSpaceMidpoint) { } |
| 42 ASSERT(trailingSpaceMidpoint >= 0); | 43 ASSERT(trailingSpaceMidpoint >= 0); |
| 43 if (collapseFirstSpace == CollapseFirstSpace) | 44 if (collapseFirstSpace == CollapseFirstSpace) |
| 44 lineMidpointState.midpoints()[trailingSpaceMidpoint].setOffset(lineM
idpointState.midpoints()[trailingSpaceMidpoint].offset() -1); | 45 lineMidpointState.midpoints()[trailingSpaceMidpoint].setOffset(lineM
idpointState.midpoints()[trailingSpaceMidpoint].offset() -1); |
| 45 | 46 |
| 46 // Now make sure every single trailingPositionedBox following the traili
ngSpaceMidpoint properly stops and starts | 47 // Now make sure every single trailingPositionedBox following the traili
ngSpaceMidpoint properly stops and starts |
| 47 // ignoring spaces. | 48 // ignoring spaces. |
| 48 size_t currentMidpoint = trailingSpaceMidpoint + 1; | 49 size_t currentMidpoint = trailingSpaceMidpoint + 1; |
| 49 for (size_t i = 0; i < m_objects.size(); ++i) { | 50 for (size_t i = 0; i < m_objects.size(); ++i) { |
| 50 if (currentMidpoint >= lineMidpointState.numMidpoints()) { | 51 if (currentMidpoint >= lineMidpointState.numMidpoints()) { |
| 51 // We don't have a midpoint for this box yet. | 52 // We don't have a midpoint for this box yet. |
| 52 lineMidpointState.ensureLineBoxInsideIgnoredSpaces(m_objects[i])
; | 53 ensureLineBoxInsideIgnoredSpaces(&lineMidpointState, m_objects[i
]); |
| 53 } else { | 54 } else { |
| 54 ASSERT(lineMidpointState.midpoints()[currentMidpoint].object() =
= m_objects[i]); | 55 ASSERT(lineMidpointState.midpoints()[currentMidpoint].object() =
= m_objects[i]); |
| 55 ASSERT(lineMidpointState.midpoints()[currentMidpoint + 1].object
() == m_objects[i]); | 56 ASSERT(lineMidpointState.midpoints()[currentMidpoint + 1].object
() == m_objects[i]); |
| 56 } | 57 } |
| 57 currentMidpoint += 2; | 58 currentMidpoint += 2; |
| 58 } | 59 } |
| 59 } else if (!lBreak.object()) { | 60 } else if (!lBreak.object()) { |
| 60 ASSERT(collapseFirstSpace == CollapseFirstSpace); | 61 ASSERT(collapseFirstSpace == CollapseFirstSpace); |
| 61 // Add a new end midpoint that stops right at the very end. | 62 // Add a new end midpoint that stops right at the very end. |
| 62 unsigned length = m_whitespace->textLength(); | 63 unsigned length = m_whitespace->textLength(); |
| 63 unsigned pos = length >= 2 ? length - 2 : UINT_MAX; | 64 unsigned pos = length >= 2 ? length - 2 : UINT_MAX; |
| 64 InlineIterator endMid(0, m_whitespace, pos); | 65 InlineIterator endMid(0, LineLayoutItem(m_whitespace), pos); |
| 65 lineMidpointState.startIgnoringSpaces(endMid); | 66 lineMidpointState.startIgnoringSpaces(endMid); |
| 66 for (size_t i = 0; i < m_objects.size(); ++i) { | 67 for (size_t i = 0; i < m_objects.size(); ++i) { |
| 67 lineMidpointState.ensureLineBoxInsideIgnoredSpaces(m_objects[i]); | 68 ensureLineBoxInsideIgnoredSpaces(&lineMidpointState, m_objects[i]); |
| 68 } | 69 } |
| 69 } | 70 } |
| 70 } | 71 } |
| 71 | 72 |
| 72 } | 73 } |
| OLD | NEW |