void nsSVGEffects::UpdateEffects(nsIFrame *aFrame) { NS_ASSERTION(aFrame->GetContent()->IsElement(), "aFrame's content should be an element"); FrameProperties props = aFrame->Properties(); props.Delete(FilterProperty()); props.Delete(MaskProperty()); props.Delete(ClipPathProperty()); props.Delete(MarkerBeginProperty()); props.Delete(MarkerMiddleProperty()); props.Delete(MarkerEndProperty()); props.Delete(FillProperty()); props.Delete(StrokeProperty()); props.Delete(BackgroundImageProperty()); // Ensure that the filter is repainted correctly // We can't do that in DoUpdate as the referenced frame may not be valid GetEffectProperty(aFrame->GetStyleSVGReset()->mFilter, aFrame, FilterProperty(), CreateFilterProperty); if (aFrame->IsFrameOfType(nsIFrame::eSVG)) { // Set marker properties here to avoid reference loops const nsStyleSVG *style = aFrame->GetStyleSVG(); GetEffectProperty(style->mMarkerStart, aFrame, MarkerBeginProperty(), CreateMarkerProperty); GetEffectProperty(style->mMarkerMid, aFrame, MarkerMiddleProperty(), CreateMarkerProperty); GetEffectProperty(style->mMarkerEnd, aFrame, MarkerEndProperty(), CreateMarkerProperty); } }
nsresult nsBox::BeginLayout(nsBoxLayoutState& aState) { #ifdef DEBUG_LAYOUT nsBoxAddIndents(); printf("Layout: "); DumpBox(stdout); printf("\n"); gIndent++; #endif // mark ourselves as dirty so no child under us // can post an incremental layout. // XXXldb Is this still needed? mState |= NS_FRAME_HAS_DIRTY_CHILDREN; if (GetStateBits() & NS_FRAME_IS_DIRTY) { // If the parent is dirty, all the children are dirty (nsHTMLReflowState // does this too). nsIFrame* box; for (box = GetChildBox(); box; box = box->GetNextBox()) box->AddStateBits(NS_FRAME_IS_DIRTY); } // Another copy-over from nsHTMLReflowState. // Since we are in reflow, we don't need to store these properties anymore. FrameProperties props = Properties(); props.Delete(UsedBorderProperty()); props.Delete(UsedPaddingProperty()); props.Delete(UsedMarginProperty()); #ifdef DEBUG_LAYOUT PropagateDebug(aState); #endif return NS_OK; }
void nsFloatManager::StoreRegionFor(nsIFrame* aFloat, nsRect& aRegion) { nsRect rect = aFloat->GetRect(); FrameProperties props = aFloat->Properties(); if (aRegion.IsEqualEdges(rect)) { props.Delete(FloatRegionProperty()); } else { nsMargin* storedMargin = static_cast<nsMargin*> (props.Get(FloatRegionProperty())); if (!storedMargin) { storedMargin = new nsMargin(); props.Set(FloatRegionProperty(), storedMargin); } *storedMargin = aRegion - rect; } }
void nsFloatManager::StoreRegionFor(WritingMode aWM, nsIFrame* aFloat, const LogicalRect& aRegion, const nsSize& aContainerSize) { nsRect region = aRegion.GetPhysicalRect(aWM, aContainerSize); nsRect rect = aFloat->GetRect(); FrameProperties props = aFloat->Properties(); if (region.IsEqualEdges(rect)) { props.Delete(FloatRegionProperty()); } else { nsMargin* storedMargin = props.Get(FloatRegionProperty()); if (!storedMargin) { storedMargin = new nsMargin(); props.Set(FloatRegionProperty(), storedMargin); } *storedMargin = region - rect; } }