| OLD | NEW |
| 1 /** | 1 /** |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * Copyright (C) 2003, 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. |
| 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) | 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) |
| 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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 | 113 |
| 114 // Returns the next list item with respect to the DOM order. | 114 // Returns the next list item with respect to the DOM order. |
| 115 static LayoutListItem* nextListItem(const Node* listNode, const LayoutListItem*
item = 0) | 115 static LayoutListItem* nextListItem(const Node* listNode, const LayoutListItem*
item = 0) |
| 116 { | 116 { |
| 117 if (!listNode) | 117 if (!listNode) |
| 118 return 0; | 118 return 0; |
| 119 | 119 |
| 120 const Node* current = item ? item->node() : listNode; | 120 const Node* current = item ? item->node() : listNode; |
| 121 ASSERT(current); | 121 ASSERT(current); |
| 122 ASSERT(!current->document().childNeedsDistributionRecalc()); | 122 ASSERT(!current->document().childNeedsDistributionRecalc()); |
| 123 current = NodeRenderingTraversal::next(*current, listNode); | 123 current = LayoutTreeBuilderTraversal::next(*current, listNode); |
| 124 | 124 |
| 125 while (current) { | 125 while (current) { |
| 126 if (isList(*current)) { | 126 if (isList(*current)) { |
| 127 // We've found a nested, independent list: nothing to do here. | 127 // We've found a nested, independent list: nothing to do here. |
| 128 current = NodeRenderingTraversal::nextSkippingChildren(*current, lis
tNode); | 128 current = LayoutTreeBuilderTraversal::nextSkippingChildren(*current,
listNode); |
| 129 continue; | 129 continue; |
| 130 } | 130 } |
| 131 | 131 |
| 132 LayoutObject* renderer = current->layoutObject(); | 132 LayoutObject* renderer = current->layoutObject(); |
| 133 if (renderer && renderer->isListItem()) | 133 if (renderer && renderer->isListItem()) |
| 134 return toLayoutListItem(renderer); | 134 return toLayoutListItem(renderer); |
| 135 | 135 |
| 136 // FIXME: Can this be optimized to skip the children of the elements wit
hout a renderer? | 136 // FIXME: Can this be optimized to skip the children of the elements wit
hout a renderer? |
| 137 current = NodeRenderingTraversal::next(*current, listNode); | 137 current = LayoutTreeBuilderTraversal::next(*current, listNode); |
| 138 } | 138 } |
| 139 | 139 |
| 140 return 0; | 140 return 0; |
| 141 } | 141 } |
| 142 | 142 |
| 143 // Returns the previous list item with respect to the DOM order. | 143 // Returns the previous list item with respect to the DOM order. |
| 144 static LayoutListItem* previousListItem(const Node* listNode, const LayoutListIt
em* item) | 144 static LayoutListItem* previousListItem(const Node* listNode, const LayoutListIt
em* item) |
| 145 { | 145 { |
| 146 Node* current = item->node(); | 146 Node* current = item->node(); |
| 147 ASSERT(current); | 147 ASSERT(current); |
| 148 ASSERT(!current->document().childNeedsDistributionRecalc()); | 148 ASSERT(!current->document().childNeedsDistributionRecalc()); |
| 149 for (current = NodeRenderingTraversal::previous(*current, listNode); current
&& current != listNode; current = NodeRenderingTraversal::previous(*current, li
stNode)) { | 149 for (current = LayoutTreeBuilderTraversal::previous(*current, listNode); cur
rent && current != listNode; current = LayoutTreeBuilderTraversal::previous(*cur
rent, listNode)) { |
| 150 LayoutObject* renderer = current->layoutObject(); | 150 LayoutObject* renderer = current->layoutObject(); |
| 151 if (!renderer || (renderer && !renderer->isListItem())) | 151 if (!renderer || (renderer && !renderer->isListItem())) |
| 152 continue; | 152 continue; |
| 153 Node* otherList = enclosingList(toLayoutListItem(renderer)); | 153 Node* otherList = enclosingList(toLayoutListItem(renderer)); |
| 154 // This item is part of our current list, so it's what we're looking for
. | 154 // This item is part of our current list, so it's what we're looking for
. |
| 155 if (listNode == otherList) | 155 if (listNode == otherList) |
| 156 return toLayoutListItem(renderer); | 156 return toLayoutListItem(renderer); |
| 157 // We found ourself inside another list; lets skip the rest of it. | 157 // We found ourself inside another list; lets skip the rest of it. |
| 158 // Use nextIncludingPseudo() here because the other list itself may actu
ally | 158 // Use nextIncludingPseudo() here because the other list itself may actu
ally |
| 159 // be a list item itself. We need to examine it, so we do this to counte
ract | 159 // be a list item itself. We need to examine it, so we do this to counte
ract |
| 160 // the previousIncludingPseudo() that will be done by the loop. | 160 // the previousIncludingPseudo() that will be done by the loop. |
| 161 if (otherList) | 161 if (otherList) |
| 162 current = NodeRenderingTraversal::next(*otherList, listNode); | 162 current = LayoutTreeBuilderTraversal::next(*otherList, listNode); |
| 163 } | 163 } |
| 164 return 0; | 164 return 0; |
| 165 } | 165 } |
| 166 | 166 |
| 167 void LayoutListItem::updateItemValuesForOrderedList(const HTMLOListElement* list
Node) | 167 void LayoutListItem::updateItemValuesForOrderedList(const HTMLOListElement* list
Node) |
| 168 { | 168 { |
| 169 ASSERT(listNode); | 169 ASSERT(listNode); |
| 170 | 170 |
| 171 for (LayoutListItem* listItem = nextListItem(listNode); listItem; listItem =
nextListItem(listNode, listItem)) | 171 for (LayoutListItem* listItem = nextListItem(listNode); listItem; listItem =
nextListItem(listNode, listItem)) |
| 172 listItem->updateValue(); | 172 listItem->updateValue(); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 // assume that all the following ones have too. | 528 // assume that all the following ones have too. |
| 529 // This gives us the opportunity to stop here and avoid | 529 // This gives us the opportunity to stop here and avoid |
| 530 // marking the same nodes again. | 530 // marking the same nodes again. |
| 531 break; | 531 break; |
| 532 } | 532 } |
| 533 item->updateValue(); | 533 item->updateValue(); |
| 534 } | 534 } |
| 535 } | 535 } |
| 536 | 536 |
| 537 } // namespace blink | 537 } // namespace blink |
| OLD | NEW |