| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 ASSERT((*it)->ownerList() == this); | 178 ASSERT((*it)->ownerList() == this); |
| 179 (*it)->setOwnerList(nullptr); | 179 (*it)->setOwnerList(nullptr); |
| 180 } | 180 } |
| 181 | 181 |
| 182 m_values.clear(); | 182 m_values.clear(); |
| 183 } | 183 } |
| 184 | 184 |
| 185 template <typename Derived, typename ItemProperty> | 185 template <typename Derived, typename ItemProperty> |
| 186 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::initialize( | 186 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::initialize( |
| 187 ItemProperty* newItem) { | 187 ItemProperty* newItem) { |
| 188 // Spec: Clears all existing current items from the list and re-initializes th
e list to hold the single item specified by the parameter. | 188 // Spec: Clears all existing current items from the list and re-initializes |
| 189 // the list to hold the single item specified by the parameter. |
| 189 clear(); | 190 clear(); |
| 190 append(newItem); | 191 append(newItem); |
| 191 return newItem; | 192 return newItem; |
| 192 } | 193 } |
| 193 | 194 |
| 194 template <typename Derived, typename ItemProperty> | 195 template <typename Derived, typename ItemProperty> |
| 195 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::getItem( | 196 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::getItem( |
| 196 size_t index, | 197 size_t index, |
| 197 ExceptionState& exceptionState) { | 198 ExceptionState& exceptionState) { |
| 198 if (!checkIndexBound(index, exceptionState)) | 199 if (!checkIndexBound(index, exceptionState)) |
| 199 return nullptr; | 200 return nullptr; |
| 200 | 201 |
| 201 ASSERT(index < m_values.size()); | 202 ASSERT(index < m_values.size()); |
| 202 ASSERT(m_values.at(index)->ownerList() == this); | 203 ASSERT(m_values.at(index)->ownerList() == this); |
| 203 return m_values.at(index); | 204 return m_values.at(index); |
| 204 } | 205 } |
| 205 | 206 |
| 206 template <typename Derived, typename ItemProperty> | 207 template <typename Derived, typename ItemProperty> |
| 207 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::insertItemBefore( | 208 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::insertItemBefore( |
| 208 ItemProperty* newItem, | 209 ItemProperty* newItem, |
| 209 size_t index) { | 210 size_t index) { |
| 210 // Spec: If the index is greater than or equal to length, then the new item is
appended to the end of the list. | 211 // Spec: If the index is greater than or equal to length, then the new item is |
| 212 // appended to the end of the list. |
| 211 if (index > m_values.size()) | 213 if (index > m_values.size()) |
| 212 index = m_values.size(); | 214 index = m_values.size(); |
| 213 | 215 |
| 214 // Spec: Inserts a new item into the list at the specified position. The index
of the item before which the new item is to be | 216 // Spec: Inserts a new item into the list at the specified position. The index |
| 215 // inserted. The first item is number 0. If the index is equal to 0, then the
new item is inserted at the front of the list. | 217 // of the item before which the new item is to be inserted. The first item is |
| 218 // number 0. If the index is equal to 0, then the new item is inserted at the |
| 219 // front of the list. |
| 216 m_values.insert(index, newItem); | 220 m_values.insert(index, newItem); |
| 217 newItem->setOwnerList(this); | 221 newItem->setOwnerList(this); |
| 218 | 222 |
| 219 return newItem; | 223 return newItem; |
| 220 } | 224 } |
| 221 | 225 |
| 222 template <typename Derived, typename ItemProperty> | 226 template <typename Derived, typename ItemProperty> |
| 223 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::removeItem( | 227 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::removeItem( |
| 224 size_t index, | 228 size_t index, |
| 225 ExceptionState& exceptionState) { | 229 ExceptionState& exceptionState) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 247 | 251 |
| 248 template <typename Derived, typename ItemProperty> | 252 template <typename Derived, typename ItemProperty> |
| 249 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::replaceItem( | 253 ItemProperty* SVGListPropertyHelper<Derived, ItemProperty>::replaceItem( |
| 250 ItemProperty* newItem, | 254 ItemProperty* newItem, |
| 251 size_t index, | 255 size_t index, |
| 252 ExceptionState& exceptionState) { | 256 ExceptionState& exceptionState) { |
| 253 if (!checkIndexBound(index, exceptionState)) | 257 if (!checkIndexBound(index, exceptionState)) |
| 254 return nullptr; | 258 return nullptr; |
| 255 | 259 |
| 256 if (m_values.isEmpty()) { | 260 if (m_values.isEmpty()) { |
| 257 // 'newItem' already lived in our list, we removed it, and now we're empty,
which means there's nothing to replace. | 261 // 'newItem' already lived in our list, we removed it, and now we're empty, |
| 262 // which means there's nothing to replace. |
| 258 exceptionState.throwDOMException( | 263 exceptionState.throwDOMException( |
| 259 IndexSizeError, | 264 IndexSizeError, |
| 260 String::format("Failed to replace the provided item at index %zu.", | 265 String::format("Failed to replace the provided item at index %zu.", |
| 261 index)); | 266 index)); |
| 262 return nullptr; | 267 return nullptr; |
| 263 } | 268 } |
| 264 | 269 |
| 265 // Update the value at the desired position 'index'. | 270 // Update the value at the desired position 'index'. |
| 266 Member<ItemPropertyType>& position = m_values[index]; | 271 Member<ItemPropertyType>& position = m_values[index]; |
| 267 ASSERT(position->ownerList() == this); | 272 ASSERT(position->ownerList() == this); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 bool SVGListPropertyHelper<Derived, ItemProperty>::adjustFromToListValues( | 313 bool SVGListPropertyHelper<Derived, ItemProperty>::adjustFromToListValues( |
| 309 Derived* fromList, | 314 Derived* fromList, |
| 310 Derived* toList, | 315 Derived* toList, |
| 311 float percentage, | 316 float percentage, |
| 312 AnimationMode mode) { | 317 AnimationMode mode) { |
| 313 // If no 'to' value is given, nothing to animate. | 318 // If no 'to' value is given, nothing to animate. |
| 314 size_t toListSize = toList->length(); | 319 size_t toListSize = toList->length(); |
| 315 if (!toListSize) | 320 if (!toListSize) |
| 316 return false; | 321 return false; |
| 317 | 322 |
| 318 // If the 'from' value is given and it's length doesn't match the 'to' value l
ist length, fallback to a discrete animation. | 323 // If the 'from' value is given and it's length doesn't match the 'to' value |
| 324 // list length, fallback to a discrete animation. |
| 319 size_t fromListSize = fromList->length(); | 325 size_t fromListSize = fromList->length(); |
| 320 if (fromListSize != toListSize && fromListSize) { | 326 if (fromListSize != toListSize && fromListSize) { |
| 321 if (percentage < 0.5) { | 327 if (percentage < 0.5) { |
| 322 if (mode != ToAnimation) | 328 if (mode != ToAnimation) |
| 323 deepCopy(fromList); | 329 deepCopy(fromList); |
| 324 } else { | 330 } else { |
| 325 deepCopy(toList); | 331 deepCopy(toList); |
| 326 } | 332 } |
| 327 | 333 |
| 328 return false; | 334 return false; |
| 329 } | 335 } |
| 330 | 336 |
| 331 ASSERT(!fromListSize || fromListSize == toListSize); | 337 ASSERT(!fromListSize || fromListSize == toListSize); |
| 332 if (length() < toListSize) { | 338 if (length() < toListSize) { |
| 333 size_t paddingCount = toListSize - length(); | 339 size_t paddingCount = toListSize - length(); |
| 334 for (size_t i = 0; i < paddingCount; ++i) | 340 for (size_t i = 0; i < paddingCount; ++i) |
| 335 append(createPaddingItem()); | 341 append(createPaddingItem()); |
| 336 } | 342 } |
| 337 | 343 |
| 338 return true; | 344 return true; |
| 339 } | 345 } |
| 340 | 346 |
| 341 } // namespace blink | 347 } // namespace blink |
| 342 | 348 |
| 343 #endif // SVGListPropertyHelper_h | 349 #endif // SVGListPropertyHelper_h |
| OLD | NEW |