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. |
(...skipping 10 matching lines...) Expand all Loading... |
21 * | 21 * |
22 */ | 22 */ |
23 | 23 |
24 #include "config.h" | 24 #include "config.h" |
25 #include "core/rendering/line/TrailingObjects.h" | 25 #include "core/rendering/line/TrailingObjects.h" |
26 | 26 |
27 #include "core/rendering/InlineIterator.h" | 27 #include "core/rendering/InlineIterator.h" |
28 | 28 |
29 namespace WebCore { | 29 namespace WebCore { |
30 | 30 |
31 void TrailingObjects::updateMidpointsForTrailingObjects(LineMidpointState& lineM
idpointState, const InlineIterator& lBreak, CollapseFirstSpaceOrNot collapseFirs
tSpace) | 31 void TrailingObjects::updateMidpointsForTrailingBoxes(LineMidpointState& lineMid
pointState, const InlineIterator& lBreak, CollapseFirstSpaceOrNot collapseFirstS
pace) |
32 { | 32 { |
33 if (!m_whitespace) | 33 if (!m_whitespace) |
34 return; | 34 return; |
35 | 35 |
36 // This object is either going to be part of the last midpoint, or it is goi
ng to be the actual endpoint. | 36 // 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. | 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 if (lineMidpointState.numMidpoints() % 2) { | 38 if (lineMidpointState.numMidpoints() % 2) { |
39 // Find the trailing space object's midpoint. | 39 // Find the trailing space object's midpoint. |
40 int trailingSpaceMidpoint = lineMidpointState.numMidpoints() - 1; | 40 int trailingSpaceMidpoint = lineMidpointState.numMidpoints() - 1; |
41 for ( ; trailingSpaceMidpoint > 0 && lineMidpointState.midpoints()[trail
ingSpaceMidpoint].object() != m_whitespace; --trailingSpaceMidpoint) { } | 41 for ( ; trailingSpaceMidpoint > 0 && lineMidpointState.midpoints()[trail
ingSpaceMidpoint].object() != m_whitespace; --trailingSpaceMidpoint) { } |
42 ASSERT(trailingSpaceMidpoint >= 0); | 42 ASSERT(trailingSpaceMidpoint >= 0); |
43 if (collapseFirstSpace == CollapseFirstSpace) | 43 if (collapseFirstSpace == CollapseFirstSpace) |
44 lineMidpointState.midpoints()[trailingSpaceMidpoint].setOffset(lineM
idpointState.midpoints()[trailingSpaceMidpoint].offset() -1); | 44 lineMidpointState.midpoints()[trailingSpaceMidpoint].setOffset(lineM
idpointState.midpoints()[trailingSpaceMidpoint].offset() -1); |
45 | 45 |
46 // Now make sure every single trailingPositionedBox following the traili
ngSpaceMidpoint properly stops and starts | 46 // Now make sure every single trailingPositionedBox following the traili
ngSpaceMidpoint properly stops and starts |
47 // ignoring spaces. | 47 // ignoring spaces. |
48 size_t currentMidpoint = trailingSpaceMidpoint + 1; | 48 size_t currentMidpoint = trailingSpaceMidpoint + 1; |
49 for (size_t i = 0; i < m_objects.size(); ++i) { | 49 for (size_t i = 0; i < m_boxes.size(); ++i) { |
50 if (currentMidpoint >= lineMidpointState.numMidpoints()) { | 50 if (currentMidpoint >= lineMidpointState.numMidpoints()) { |
51 // We don't have a midpoint for this box yet. | 51 // We don't have a midpoint for this box yet. |
52 lineMidpointState.ensureLineBoxInsideIgnoredSpaces(m_objects[i])
; | 52 lineMidpointState.ensureLineBoxInsideIgnoredSpaces(m_boxes[i]); |
53 } else { | 53 } else { |
54 ASSERT(lineMidpointState.midpoints()[currentMidpoint].object() =
= m_objects[i]); | 54 ASSERT(lineMidpointState.midpoints()[currentMidpoint].object() =
= m_boxes[i]); |
55 ASSERT(lineMidpointState.midpoints()[currentMidpoint + 1].object
() == m_objects[i]); | 55 ASSERT(lineMidpointState.midpoints()[currentMidpoint + 1].object
() == m_boxes[i]); |
56 } | 56 } |
57 currentMidpoint += 2; | 57 currentMidpoint += 2; |
58 } | 58 } |
59 } else if (!lBreak.object()) { | 59 } else if (!lBreak.object()) { |
60 ASSERT(m_whitespace->isText()); | 60 ASSERT(m_whitespace->isText()); |
61 ASSERT(collapseFirstSpace == CollapseFirstSpace); | 61 ASSERT(collapseFirstSpace == CollapseFirstSpace); |
62 // 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. |
63 unsigned length = m_whitespace->textLength(); | 63 unsigned length = m_whitespace->textLength(); |
64 unsigned pos = length >= 2 ? length - 2 : UINT_MAX; | 64 unsigned pos = length >= 2 ? length - 2 : UINT_MAX; |
65 InlineIterator endMid(0, m_whitespace, pos); | 65 InlineIterator endMid(0, m_whitespace, pos); |
66 lineMidpointState.startIgnoringSpaces(endMid); | 66 lineMidpointState.startIgnoringSpaces(endMid); |
67 for (size_t i = 0; i < m_objects.size(); ++i) { | 67 for (size_t i = 0; i < m_boxes.size(); ++i) { |
68 lineMidpointState.ensureLineBoxInsideIgnoredSpaces(m_objects[i]); | 68 lineMidpointState.ensureLineBoxInsideIgnoredSpaces(m_boxes[i]); |
69 } | 69 } |
70 } | 70 } |
71 } | 71 } |
72 | 72 |
73 } | 73 } |
OLD | NEW |