nsIDOMSVGPathSeg* DOMSVGPathSegList::GetItemWithoutAddRef(PRUint32 aIndex) { if (IsAnimValList()) { Element()->FlushAnimations(); } if (aIndex < Length()) { EnsureItemAt(aIndex); return ItemAt(aIndex); } return nsnull; }
nsIDOMSVGTransform* DOMSVGTransformList::GetItemAt(PRUint32 aIndex) { if (IsAnimValList()) { Element()->FlushAnimations(); } if (aIndex < Length()) { EnsureItemAt(aIndex); return mItems[aIndex]; } return nsnull; }
nsIDOMSVGPoint* DOMSVGPointList::GetItemAt(uint32_t aIndex) { if (IsAnimValList()) { Element()->FlushAnimations(); } if (aIndex < Length()) { EnsureItemAt(aIndex); return mItems[aIndex]; } return nullptr; }
nsISVGPoint* DOMSVGPointList::IndexedGetter(uint32_t aIndex, bool& aFound, ErrorResult& aError) { if (IsAnimValList()) { Element()->FlushAnimations(); } aFound = aIndex < LengthNoFlush(); if (aFound) { EnsureItemAt(aIndex); return mItems[aIndex]; } return nullptr; }
NS_INTERFACE_MAP_END nsIDOMSVGLength* DOMSVGLengthList::GetItemWithoutAddRef(PRUint32 aIndex) { if (IsAnimValList()) { Element()->FlushAnimations(); } if (aIndex < Length()) { EnsureItemAt(aIndex); return mItems[aIndex]; } return nsnull; }
NS_INTERFACE_MAP_END nsIDOMSVGNumber* DOMSVGNumberList::GetItemWithoutAddRef(PRUint32 aIndex) { #ifdef MOZ_SMIL if (IsAnimValList()) { Element()->FlushAnimations(); } #endif if (aIndex < Length()) { EnsureItemAt(aIndex); return mItems[aIndex]; } return nsnull; }
NS_IMETHODIMP DOMSVGLengthList::GetItem(PRUint32 index, nsIDOMSVGLength **_retval) { #ifdef MOZ_SMIL if (IsAnimValList()) { Element()->FlushAnimations(); } #endif if (index < Length()) { EnsureItemAt(index); NS_ADDREF(*_retval = mItems[index]); return NS_OK; } *_retval = nsnull; return NS_ERROR_DOM_INDEX_SIZE_ERR; }
already_AddRefed<DOMSVGPathSeg> DOMSVGPathSegList::RemoveItem(uint32_t aIndex, ErrorResult& aError) { if (IsAnimValList()) { aError.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR); return nullptr; } if (aIndex >= LengthNoFlush()) { aError.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR); return nullptr; } // We have to return the removed item, so make sure it exists: EnsureItemAt(aIndex); nsAttrValue emptyOrOldValue = Element()->WillChangePathSegList(); // Notify the DOM item of removal *before* modifying the lists so that the // DOM item can copy its *old* value: ItemAt(aIndex)->RemovingFromList(); nsRefPtr<DOMSVGPathSeg> result = ItemAt(aIndex); uint32_t internalIndex = mItems[aIndex].mInternalDataIndex; uint32_t segType = SVGPathSegUtils::DecodeType(InternalList().mData[internalIndex]); // NOTE: ArgCountForType returns a (small) unsigned value, but we're // intentionally putting it in a signed value, because we're going to // negate it, and you can't negate an unsigned value. int32_t argCount = SVGPathSegUtils::ArgCountForType(segType); // Now that we know we're removing, keep animVal list in sync as necessary. // Do this *before* touching InternalList() so the removed item can get its // internal value. MaybeRemoveItemFromAnimValListAt(aIndex, argCount); InternalList().mData.RemoveElementsAt(internalIndex, 1 + argCount); mItems.RemoveElementAt(aIndex); UpdateListIndicesFromIndex(aIndex, -(argCount + 1)); Element()->DidChangePathSegList(emptyOrOldValue); if (AttrIsAnimating()) { Element()->AnimationNeedsResample(); } return result.forget(); }
NS_IMETHODIMP DOMSVGPathSegList::RemoveItem(PRUint32 aIndex, nsIDOMSVGPathSeg **_retval) { *_retval = nsnull; if (IsAnimValList()) { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; } if (aIndex >= Length()) { return NS_ERROR_DOM_INDEX_SIZE_ERR; } // We have to return the removed item, so make sure it exists: EnsureItemAt(aIndex); // Notify the DOM item of removal *before* modifying the lists so that the // DOM item can copy its *old* value: ItemAt(aIndex)->RemovingFromList(); NS_ADDREF(*_retval = ItemAt(aIndex)); PRUint32 internalIndex = mItems[aIndex].mInternalDataIndex; PRUint32 segType = SVGPathSegUtils::DecodeType(InternalList().mData[internalIndex]); PRUint32 argCount = SVGPathSegUtils::ArgCountForType(segType); // Now that we know we're removing, keep animVal list in sync as necessary. // Do this *before* touching InternalList() so the removed item can get its // internal value. MaybeRemoveItemFromAnimValListAt(aIndex, argCount); InternalList().mData.RemoveElementsAt(internalIndex, 1 + argCount); mItems.RemoveElementAt(aIndex); UpdateListIndicesFromIndex(aIndex, -(argCount + 1)); Element()->DidChangePathSegList(PR_TRUE); #ifdef MOZ_SMIL if (AttrIsAnimating()) { Element()->AnimationNeedsResample(); } #endif return NS_OK; }
NS_IMETHODIMP DOMSVGNumberList::RemoveItem(PRUint32 index, nsIDOMSVGNumber **_retval) { *_retval = nsnull; if (IsAnimValList()) { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; } if (index >= Length()) { return NS_ERROR_DOM_INDEX_SIZE_ERR; } // Now that we know we're removing, keep animVal list in sync as necessary. // Do this *before* touching InternalList() so the removed item can get its // internal value. MaybeRemoveItemFromAnimValListAt(index); // We have to return the removed item, so make sure it exists: EnsureItemAt(index); // Notify the DOM item of removal *before* modifying the lists so that the // DOM item can copy its *old* value: mItems[index]->RemovingFromList(); NS_ADDREF(*_retval = mItems[index]); InternalList().RemoveItem(index); mItems.RemoveElementAt(index); UpdateListIndicesFromIndex(mItems, index); Element()->DidChangeNumberList(AttrEnum(), PR_TRUE); #ifdef MOZ_SMIL if (mAList->IsAnimating()) { Element()->AnimationNeedsResample(); } #endif return NS_OK; }
already_AddRefed<nsISVGPoint> DOMSVGPointList::RemoveItem(uint32_t aIndex, ErrorResult& aError) { if (IsAnimValList()) { aError.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR); return nullptr; } if (aIndex >= LengthNoFlush()) { aError.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR); return nullptr; } nsAttrValue emptyOrOldValue = Element()->WillChangePointList(); // Now that we know we're removing, keep animVal list in sync as necessary. // Do this *before* touching InternalList() so the removed item can get its // internal value. MaybeRemoveItemFromAnimValListAt(aIndex); // We have to return the removed item, so make sure it exists: EnsureItemAt(aIndex); // Notify the DOM item of removal *before* modifying the lists so that the // DOM item can copy its *old* value: mItems[aIndex]->RemovingFromList(); nsCOMPtr<nsISVGPoint> result = mItems[aIndex]; InternalList().RemoveItem(aIndex); mItems.RemoveElementAt(aIndex); UpdateListIndicesFromIndex(mItems, aIndex); Element()->DidChangePointList(emptyOrOldValue); if (AttrIsAnimating()) { Element()->AnimationNeedsResample(); } return result.forget(); }
NS_IMETHODIMP DOMSVGPointList::RemoveItem(PRUint32 aIndex, nsIDOMSVGPoint **_retval) { *_retval = nsnull; if (IsAnimValList()) { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; } if (aIndex >= Length()) { return NS_ERROR_DOM_INDEX_SIZE_ERR; } nsAttrValue emptyOrOldValue = Element()->WillChangePointList(); // Now that we know we're removing, keep animVal list in sync as necessary. // Do this *before* touching InternalList() so the removed item can get its // internal value. MaybeRemoveItemFromAnimValListAt(aIndex); // We have to return the removed item, so make sure it exists: EnsureItemAt(aIndex); // Notify the DOM item of removal *before* modifying the lists so that the // DOM item can copy its *old* value: mItems[aIndex]->RemovingFromList(); NS_ADDREF(*_retval = mItems[aIndex]); InternalList().RemoveItem(aIndex); mItems.RemoveElementAt(aIndex); UpdateListIndicesFromIndex(mItems, aIndex); Element()->DidChangePointList(emptyOrOldValue); if (AttrIsAnimating()) { Element()->AnimationNeedsResample(); } return NS_OK; }
NS_IMETHODIMP DOMSVGLengthList::RemoveItem(PRUint32 index, nsIDOMSVGLength **_retval) { *_retval = nsnull; if (IsAnimValList()) { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; } if (index >= Length()) { return NS_ERROR_DOM_INDEX_SIZE_ERR; } // We have to return the removed item, so make sure it exists: EnsureItemAt(index); // Notify the DOM item of removal *before* modifying the lists so that the // DOM item can copy its *old* value: mItems[index]->RemovingFromList(); InternalList().RemoveItem(index); NS_ADDREF(*_retval = mItems[index]); mItems.RemoveElementAt(index); for (PRUint32 i = index; i < Length(); ++i) { if (mItems[i]) { mItems[i]->UpdateListIndex(i); } } Element()->DidChangeLengthList(AttrEnum(), PR_TRUE); #ifdef MOZ_SMIL if (mAList->IsAnimating()) { Element()->AnimationNeedsResample(); } #endif return NS_OK; }