nsChangeHint HTMLTextAreaElement::GetAttributeChangeHint(const nsIAtom* aAttribute, int32_t aModType) const { nsChangeHint retval = nsGenericHTMLFormElementWithState::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::rows || aAttribute == nsGkAtoms::cols) { NS_UpdateHint(retval, NS_STYLE_HINT_REFLOW); } else if (aAttribute == nsGkAtoms::wrap) { NS_UpdateHint(retval, nsChangeHint_ReconstructFrame); } else if (aAttribute == nsGkAtoms::placeholder) { NS_UpdateHint(retval, NS_STYLE_HINT_FRAMECHANGE); } return retval; }
nsresult nsStyleChangeList::AppendChange(nsIFrame* aFrame, nsIContent* aContent, nsChangeHint aHint) { NS_ASSERTION(aFrame || (aHint & nsChangeHint_ReconstructFrame), "must have frame"); NS_ASSERTION(aContent || !(aHint & nsChangeHint_ReconstructFrame), "must have content"); // XXXbz we should make this take Element instead of nsIContent NS_ASSERTION(!aContent || aContent->IsElement(), "Shouldn't be trying to restyle non-elements directly"); NS_ASSERTION(!(aHint & nsChangeHint_ReflowFrame) || (aHint & nsChangeHint_NeedReflow), "Reflow hint bits set without actually asking for a reflow"); if ((0 < mCount) && (aHint & nsChangeHint_ReconstructFrame)) { // filter out all other changes for same content if (aContent) { for (PRInt32 index = mCount - 1; index >= 0; --index) { if (aContent == mArray[index].mContent) { // remove this change aContent->Release(); mCount--; if (index < mCount) { // move later changes down ::memmove(&mArray[index], &mArray[index + 1], (mCount - index) * sizeof(nsStyleChangeData)); } } } } } PRInt32 last = mCount - 1; if ((0 < mCount) && aFrame && (aFrame == mArray[last].mFrame)) { // same as last frame NS_UpdateHint(mArray[last].mHint, aHint); } else { if (mCount == mArraySize) { PRInt32 newSize = mArraySize + kGrowArrayBy; nsStyleChangeData* newArray = new nsStyleChangeData[newSize]; if (newArray) { memcpy(newArray, mArray, mCount * sizeof(nsStyleChangeData)); if (mArray != mBuffer) { delete [] mArray; } mArray = newArray; mArraySize = newSize; } else { return NS_ERROR_OUT_OF_MEMORY; } } mArray[mCount].mFrame = aFrame; mArray[mCount].mContent = aContent; if (aContent) { aContent->AddRef(); } mArray[mCount].mHint = aHint; mCount++; } return NS_OK; }
nsChangeHint HTMLImageElement::GetAttributeChangeHint(const nsIAtom* aAttribute, int32_t aModType) const { nsChangeHint retval = nsGenericHTMLElement::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::usemap || aAttribute == nsGkAtoms::ismap) { NS_UpdateHint(retval, NS_STYLE_HINT_FRAMECHANGE); } else if (aAttribute == nsGkAtoms::alt) { if (aModType == nsIDOMMutationEvent::ADDITION || aModType == nsIDOMMutationEvent::REMOVAL) { NS_UpdateHint(retval, NS_STYLE_HINT_FRAMECHANGE); } } return retval; }
nsChangeHint nsHTMLLegendElement::GetAttributeChangeHint(const nsIAtom* aAttribute, PRInt32 aModType) const { nsChangeHint retval = nsGenericHTMLElement::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::align) { NS_UpdateHint(retval, NS_STYLE_HINT_REFLOW); } return retval; }
nsChangeHint HTMLFrameSetElement::GetAttributeChangeHint(const nsIAtom* aAttribute, int32_t aModType) const { nsChangeHint retval = nsGenericHTMLElement::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::rows || aAttribute == nsGkAtoms::cols) { NS_UpdateHint(retval, mCurrentRowColHint); } return retval; }
nsChangeHint HTMLImageElement::GetAttributeChangeHint(const nsIAtom* aAttribute, int32_t aModType) const { nsChangeHint retval = nsGenericHTMLElement::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::usemap || aAttribute == nsGkAtoms::ismap) { NS_UpdateHint(retval, NS_STYLE_HINT_FRAMECHANGE); } return retval; }
nsChangeHint nsHTMLTextAreaElement::GetAttributeChangeHint(const nsIAtom* aAttribute, PRInt32 aModType) const { nsChangeHint retval = nsGenericHTMLFormElement::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::rows || aAttribute == nsGkAtoms::cols) { NS_UpdateHint(retval, NS_STYLE_HINT_REFLOW); } return retval; }
nsresult nsStyleChangeList::AppendChange(nsIFrame* aFrame, nsIContent* aContent, nsChangeHint aHint) { NS_ASSERTION(aFrame || (aHint & nsChangeHint_ReconstructFrame), "must have frame"); NS_ASSERTION(aContent || !(aHint & nsChangeHint_ReconstructFrame), "must have content"); NS_ASSERTION(!aContent || aContent->IsContentOfType(nsIContent::eELEMENT), "Shouldn't be trying to restyle non-elements directly"); if ((0 < mCount) && (aHint & nsChangeHint_ReconstructFrame)) { // filter out all other changes for same content if (aContent) { PRInt32 index = mCount; while (0 < index--) { if (aContent == mArray[index].mContent) { // remove this change mCount--; if (index < mCount) { // move later changes down ::memmove(&mArray[index], &mArray[index + 1], (mCount - index) * sizeof(nsStyleChangeData)); } } } } } PRInt32 last = mCount - 1; if ((0 < mCount) && aFrame && (aFrame == mArray[last].mFrame)) { // same as last frame NS_UpdateHint(mArray[last].mHint, aHint); } else { if (mCount == mArraySize) { PRInt32 newSize = mArraySize + kGrowArrayBy; nsStyleChangeData* newArray = new nsStyleChangeData[newSize]; if (newArray) { memcpy(newArray, mArray, mCount * sizeof(nsStyleChangeData)); if (mArray != mBuffer) { delete [] mArray; } mArray = newArray; mArraySize = newSize; } else { return NS_ERROR_OUT_OF_MEMORY; } } mArray[mCount].mFrame = aFrame; mArray[mCount].mContent = aContent; mArray[mCount].mHint = aHint; mCount++; } return NS_OK; }
nsChangeHint HTMLOptionElement::GetAttributeChangeHint(const nsIAtom* aAttribute, int32_t aModType) const { nsChangeHint retval = nsGenericHTMLElement::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::label || aAttribute == nsGkAtoms::text) { NS_UpdateHint(retval, NS_STYLE_HINT_REFLOW); } return retval; }
nsChangeHint nsSVGElement::GetAttributeChangeHint(const nsIAtom* aAttribute, PRInt32 aModType) const { nsChangeHint retval = nsSVGElementBase::GetAttributeChangeHint(aAttribute, aModType); if (aAttribute == nsGkAtoms::requiredFeatures || aAttribute == nsGkAtoms::requiredExtensions || aAttribute == nsGkAtoms::systemLanguage) { // It would be nice to only reconstruct the frame if the value returned by // NS_SVG_PassesConditionalProcessingTests has changed, but we don't know // that NS_UpdateHint(retval, nsChangeHint_ReconstructFrame); } return retval; }