void nsSliderFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // if we are too small to have a thumb don't paint it. nsIFrame* thumb = nsBox::GetChildBox(this); if (thumb) { nsRect thumbRect(thumb->GetRect()); nsMargin m; thumb->GetMargin(m); thumbRect.Inflate(m); nsRect crect; GetClientRect(crect); if (crect.width < thumbRect.width || crect.height < thumbRect.height) return; // If this scrollbar is the scrollbar of an actively scrolled scroll frame, // layerize the scrollbar thumb, wrap it in its own ContainerLayer and // attach scrolling information to it. // We do this here and not in the thumb's nsBoxFrame::BuildDisplayList so // that the event region that gets created for the thumb is included in // the nsDisplayOwnLayer contents. uint32_t flags = 0; mozilla::layers::FrameMetrics::ViewID scrollTargetId = mozilla::layers::FrameMetrics::NULL_SCROLL_ID; aBuilder->GetScrollbarInfo(&scrollTargetId, &flags); bool thumbGetsLayer = (scrollTargetId != layers::FrameMetrics::NULL_SCROLL_ID); nsLayoutUtils::SetScrollbarThumbLayerization(thumb, thumbGetsLayer); if (thumbGetsLayer) { nsDisplayListCollection tempLists; nsBoxFrame::BuildDisplayListForChildren(aBuilder, aDirtyRect, tempLists); // This is a bit of a hack. Collect up all descendant display items // and merge them into a single Content() list. nsDisplayList masterList; masterList.AppendToTop(tempLists.BorderBackground()); masterList.AppendToTop(tempLists.BlockBorderBackgrounds()); masterList.AppendToTop(tempLists.Floats()); masterList.AppendToTop(tempLists.Content()); masterList.AppendToTop(tempLists.PositionedDescendants()); masterList.AppendToTop(tempLists.Outlines()); // Wrap the list to make it its own layer. aLists.Content()->AppendNewToTop(new (aBuilder) nsDisplayOwnLayer(aBuilder, this, &masterList, flags, scrollTargetId, GetThumbRatio())); return; } } nsBoxFrame::BuildDisplayListForChildren(aBuilder, aDirtyRect, aLists); }
NS_IMETHODIMP nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsDisplayList onTop; if (IsVisibleForPainting(aBuilder)) { nsresult rv = mRenderer.DisplayButton(aBuilder, aLists.BorderBackground(), &onTop); NS_ENSURE_SUCCESS(rv, rv); } nsDisplayListCollection set; // Do not allow the child subtree to receive events. if (!aBuilder->IsForEventDelivery()) { nsresult rv = BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), aDirtyRect, set, DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT); NS_ENSURE_SUCCESS(rv, rv); // That should put the display items in set.Content() } // Put the foreground outline and focus rects on top of the children set.Content()->AppendToTop(&onTop); // clips to our padding box for <input>s but not <button>s, unless // they have non-visible overflow.. if (IsInput() || GetStyleDisplay()->mOverflowX != NS_STYLE_OVERFLOW_VISIBLE) { nsMargin border = GetStyleBorder()->GetComputedBorder(); nsRect rect(aBuilder->ToReferenceFrame(this), GetSize()); rect.Deflate(border); nscoord radii[8]; GetPaddingBoxBorderRadii(radii); nsresult rv = OverflowClip(aBuilder, set, aLists, rect, radii); NS_ENSURE_SUCCESS(rv, rv); } else { set.MoveTo(aLists); } nsresult rv = DisplayOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); // to draw border when selected in editor return DisplaySelectionOverlay(aBuilder, aLists.Content()); }
nsresult nsMathMLmtdFrame::ProcessBorders(nsTableFrame* aFrame, nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) { aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplaymtdBorder(aBuilder, this)); return NS_OK; }
NS_IMETHODIMP nsFileControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // box-shadow if (GetStyleBorder()->mBoxShadow) { nsresult rv = aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayBoxShadowOuter(aBuilder, this)); NS_ENSURE_SUCCESS(rv, rv); } // Our background is inherited to the text input, and we don't really want to // paint it or out padding and borders (which we never have anyway, per // styles in forms.css) -- doing it just makes us look ugly in some cases and // has no effect in others. nsDisplayListCollection tempList; nsresult rv = nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, tempList); if (NS_FAILED(rv)) return rv; tempList.BorderBackground()->DeleteAll(); // Clip height only nsRect clipRect(aBuilder->ToReferenceFrame(this), GetSize()); clipRect.width = GetVisualOverflowRect().XMost(); nscoord radii[8] = {0, 0, 0, 0, 0, 0, 0, 0}; rv = OverflowClip(aBuilder, tempList, aLists, clipRect, radii); NS_ENSURE_SUCCESS(rv, rv); // Disabled file controls don't pass mouse events to their children, so we // put an invisible item in the display list above the children // just to catch events nsEventStates eventStates = mContent->AsElement()->State(); if (eventStates.HasState(NS_EVENT_STATE_DISABLED) && IsVisibleForPainting(aBuilder)) { rv = aLists.Content()->AppendNewToTop( new (aBuilder) nsDisplayEventReceiver(aBuilder, this)); if (NS_FAILED(rv)) return rv; } return DisplaySelectionOverlay(aBuilder, aLists.Content()); }
void nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsDisplayList onTop; if (IsVisibleForPainting(aBuilder)) { mRenderer.DisplayButton(aBuilder, aLists.BorderBackground(), &onTop); } nsDisplayListCollection set; // Do not allow the child subtree to receive events. if (!aBuilder->IsForEventDelivery()) { DisplayListClipState::AutoSaveRestore clipState(aBuilder); if (IsInput() || StyleDisplay()->mOverflowX != NS_STYLE_OVERFLOW_VISIBLE) { nsMargin border = StyleBorder()->GetComputedBorder(); nsRect rect(aBuilder->ToReferenceFrame(this), GetSize()); rect.Deflate(border); nscoord radii[8]; bool hasRadii = GetPaddingBoxBorderRadii(radii); clipState.ClipContainingBlockDescendants(rect, hasRadii ? radii : nullptr); } BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), aDirtyRect, set, DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT); // That should put the display items in set.Content() } // Put the foreground outline and focus rects on top of the children set.Content()->AppendToTop(&onTop); set.MoveTo(aLists); DisplayOutline(aBuilder, aLists); // to draw border when selected in editor DisplaySelectionOverlay(aBuilder, aLists.Content()); }
NS_IMETHODIMP nsVideoFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { if (!IsVisibleForPainting(aBuilder)) return NS_OK; DO_GLOBAL_REFLOW_COUNT_DSP("nsVideoFrame"); nsresult rv = DisplayBorderBackgroundOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); if (!ShouldDisplayPoster() && HasVideoData()) { rv = aLists.Content()->AppendNewToTop( new (aBuilder) nsDisplayGeneric(this, ::PaintVideo, "Video")); NS_ENSURE_SUCCESS(rv, rv); } // Add child frames to display list. We expect up to two children, an image // frame for the poster, and the box frame for the video controls. for (nsIFrame *child = mFrames.FirstChild(); child; child = child->GetNextSibling()) { if (child->GetType() == nsGkAtoms::imageFrame && ShouldDisplayPoster()) { rv = child->BuildDisplayListForStackingContext(aBuilder, aDirtyRect - child->GetOffsetTo(this), aLists.Content()); NS_ENSURE_SUCCESS(rv,rv); } else if (child->GetType() == nsGkAtoms::boxFrame) { rv = child->BuildDisplayListForStackingContext(aBuilder, aDirtyRect - child->GetOffsetTo(this), aLists.Content()); NS_ENSURE_SUCCESS(rv,rv); } } return NS_OK; }
void nsRangeFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { if (IsThemed()) { DisplayBorderBackgroundOutline(aBuilder, aLists); // Only create items for the thumb. Specifically, we do not want // the track to paint, since *our* background is used to paint // the track, and we don't want the unthemed track painting over // the top of the themed track. // This logic is copied from // nsContainerFrame::BuildDisplayListForNonBlockChildren as // called by BuildDisplayListForInline. nsIFrame* thumb = mThumbDiv->GetPrimaryFrame(); if (thumb) { nsDisplayListSet set(aLists, aLists.Content()); BuildDisplayListForChild(aBuilder, thumb, aDirtyRect, set, DISPLAY_CHILD_INLINE); } } else { BuildDisplayListForInline(aBuilder, aDirtyRect, aLists); } // Draw a focus outline if appropriate: nsEventStates eventStates = mContent->AsElement()->State(); if (!eventStates.HasState(NS_EVENT_STATE_FOCUSRING) || eventStates.HasState(NS_EVENT_STATE_DISABLED)) { return; } nsPresContext *presContext = PresContext(); const nsStyleDisplay *disp = StyleDisplay(); if ((!IsThemed(disp) || !presContext->GetTheme()->ThemeDrawsFocusForWidget(disp->mAppearance)) && IsVisibleForPainting(aBuilder)) { aLists.Content()->AppendNewToTop( new (aBuilder) nsDisplayRangeFocusRing(aBuilder, this)); } }
NS_IMETHODIMP nsTextBoxFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { if (!IsVisibleForPainting(aBuilder)) return NS_OK; nsresult rv = nsLeafBoxFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists); NS_ENSURE_SUCCESS(rv, rv); return aLists.Content()->AppendNewToTop(new (aBuilder) nsDisplayXULTextBox(aBuilder, this)); }
void nsInlineFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) { BuildDisplayListForInline(aBuilder, aLists); // The sole purpose of this is to trigger display of the selection // window for Named Anchors, which don't have any children and // normally don't have any size, but in Editor we use CSS to display // an image to represent this "hidden" element. if (!mFrames.FirstChild()) { DisplaySelectionOverlay(aBuilder, aLists.Content()); } }
NS_IMETHODIMP nsSimplePageSequenceFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsresult rv = DisplayBorderBackgroundOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); rv = aLists.Content()->AppendNewToTop(new (aBuilder) nsDisplayGeneric(this, ::PaintPageSequence, "PageSequence")); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }
void nsSliderFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) { if (aBuilder->IsForEventDelivery() && isDraggingThumb()) { // This is EVIL, we shouldn't be messing with event delivery just to get // thumb mouse drag events to arrive at the slider! aLists.Outlines()->AppendToTop(new (aBuilder) nsDisplayEventReceiver(aBuilder, this)); return; } nsBoxFrame::BuildDisplayList(aBuilder, aLists); }
void nsDisplayListSet::MoveTo(const nsDisplayListSet& aDestination) const { aDestination.BorderBackground()->AppendToTop(BorderBackground()); aDestination.BlockBorderBackgrounds()->AppendToTop(BlockBorderBackgrounds()); aDestination.Floats()->AppendToTop(Floats()); aDestination.Content()->AppendToTop(Content()); aDestination.PositionedDescendants()->AppendToTop(PositionedDescendants()); aDestination.Outlines()->AppendToTop(Outlines()); }
void nsDeckFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // only paint the selected box nsIFrame* box = GetSelectedBox(); if (!box) return; // Putting the child in the background list. This is a little weird but // it matches what we were doing before. nsDisplayListSet set(aLists, aLists.BlockBorderBackgrounds()); BuildDisplayListForChild(aBuilder, box, aDirtyRect, set); }
void nsColumnSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { DisplayBorderBackgroundOutline(aBuilder, aLists); aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayGenericOverflow(aBuilder, this, ::PaintColumnRule, "ColumnRule", nsDisplayItem::TYPE_COLUMN_RULE)); // Our children won't have backgrounds so it doesn't matter where we put them. for (nsFrameList::Enumerator e(mFrames); !e.AtEnd(); e.Next()) { BuildDisplayListForChild(aBuilder, e.get(), aDirtyRect, aLists); } }
void nsGroupBoxFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // Paint our background and border if (IsVisibleForPainting(aBuilder)) { aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayXULGroupBackground(aBuilder, this)); DisplayOutline(aBuilder, aLists); } BuildDisplayListForChildren(aBuilder, aDirtyRect, aLists); }
// REVIEW: The old code put everything in the background layer. To be more // consistent with the way other frames work, I'm putting everything in the // Content() (i.e., foreground) layer (see nsFrame::BuildDisplayListForChild, // the case for stacking context but non-positioned, non-floating frames). // This could easily be changed back by hacking nsBoxFrame::BuildDisplayListInternal // a bit more. void nsStackFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) { // BuildDisplayListForChild puts stacking contexts into the PositionedDescendants // list. So we need to map that list to aLists.Content(). This is an easy way to // do that. nsDisplayList* content = aLists.Content(); nsDisplayListSet kidLists(content, content, content, content, content, content); nsIFrame* kid = mFrames.FirstChild(); while (kid) { // Force each child into its own true stacking context. BuildDisplayListForChild(aBuilder, kid, kidLists, DISPLAY_CHILD_FORCE_STACKING_CONTEXT); kid = kid->GetNextSibling(); } }
void nsSplitterFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsBoxFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists); // if the mouse is captured always return us as the frame. if (mInner->mDragging) { // XXX It's probably better not to check visibility here, right? aLists.Outlines()->AppendNewToTop(new (aBuilder) nsDisplayEventReceiver(aBuilder, this)); return; } }
void nsSelectsAreaFrame::BuildDisplayListInternal(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists); nsListControlFrame* listFrame = GetEnclosingListFrame(this); if (listFrame && listFrame->IsFocused()) { // we can't just associate the display item with the list frame, // because then the list's scrollframe won't clip it (the scrollframe // only clips contained descendants). aLists.Outlines()->AppendNewToTop(new (aBuilder) nsDisplayListFocus(aBuilder, this)); } }
void nsPlaceholderFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { DO_GLOBAL_REFLOW_COUNT_DSP("nsPlaceholderFrame"); #ifdef DEBUG if (GetShowFrameBorders()) { aLists.Outlines()->AppendNewToTop( new (aBuilder) nsDisplayGeneric(aBuilder, this, PaintDebugPlaceholder, "DebugPlaceholder", nsDisplayItem::TYPE_DEBUG_PLACEHOLDER)); } #endif }
nsresult nsTableCellFrame::ProcessBorders(nsTableFrame* aFrame, nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) { const nsStyleBorder* borderStyle = StyleBorder(); if (aFrame->IsBorderCollapse() || !borderStyle->HasBorder()) return NS_OK; if (!GetContentEmpty() || StyleTableBorder()->mEmptyCells == NS_STYLE_TABLE_EMPTY_CELLS_SHOW) { aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayBorder(aBuilder, this)); } return NS_OK; }
void RenderFrameParent::BuildDisplayList(nsDisplayListBuilder* aBuilder, nsSubDocumentFrame* aFrame, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // We're the subdoc for <browser remote="true"> and it has // painted content. Display its shadow layer tree. DisplayListClipState::AutoSaveRestore clipState(aBuilder); nsPoint offset = aBuilder->ToReferenceFrame(aFrame); nsRect bounds = aFrame->EnsureInnerView()->GetBounds() + offset; clipState.ClipContentDescendants(bounds); aLists.Content()->AppendToTop( new (aBuilder) nsDisplayRemote(aBuilder, aFrame, this)); }
NS_IMETHODIMP nsPlaceholderFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { DO_GLOBAL_REFLOW_COUNT_DSP("nsPlaceholderFrame"); #ifdef DEBUG if (!GetShowFrameBorders()) return NS_OK; return aLists.Outlines()->AppendNewToTop(new (aBuilder) nsDisplayGeneric(this, PaintDebugPlaceholder, "DebugPlaceholder")); #else // DEBUG return NS_OK; #endif // DEBUG }
NS_IMETHODIMP nsInlineFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsresult rv = BuildDisplayListForInline(aBuilder, aDirtyRect, aLists); NS_ENSURE_SUCCESS(rv, rv); // The sole purpose of this is to trigger display of the selection // window for Named Anchors, which don't have any children and // normally don't have any size, but in Editor we use CSS to display // an image to represent this "hidden" element. if (!mFrames.FirstChild()) { rv = DisplaySelectionOverlay(aBuilder, aLists.Content()); } return rv; }
nsresult nsTreeColFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { if (!aBuilder->IsForEventDelivery()) return nsBoxFrame::BuildDisplayListForChildren(aBuilder, aDirtyRect, aLists); nsDisplayListCollection set; nsresult rv = nsBoxFrame::BuildDisplayListForChildren(aBuilder, aDirtyRect, set); NS_ENSURE_SUCCESS(rv, rv); rv = WrapListsInRedirector(aBuilder, set, aLists); NS_ENSURE_SUCCESS(rv, rv); return aLists.Content()->AppendNewToTop(new (aBuilder) nsDisplayXULTreeColSplitterTarget(aBuilder, this)); }
void nsTreeColFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { if (!aBuilder->IsForEventDelivery()) { nsBoxFrame::BuildDisplayListForChildren(aBuilder, aDirtyRect, aLists); return; } nsDisplayListCollection set; nsBoxFrame::BuildDisplayListForChildren(aBuilder, aDirtyRect, set); WrapListsInRedirector(aBuilder, set, aLists); aLists.Content()->AppendNewToTop(new (aBuilder) nsDisplayXULTreeColSplitterTarget(aBuilder, this)); }
NS_IMETHODIMP nsGroupBoxFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // Paint our background and border if (IsVisibleForPainting(aBuilder)) { nsresult rv = aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayXULGroupBackground(this)); NS_ENSURE_SUCCESS(rv, rv); rv = DisplayOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); } return BuildDisplayListForChildren(aBuilder, aDirtyRect, aLists); // REVIEW: Debug borders now painted by nsFrame::BuildDisplayListForChild }
NS_IMETHODIMP nsSplitterFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsresult rv = nsBoxFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists); NS_ENSURE_SUCCESS(rv, rv); // if the mouse is captured always return us as the frame. if (mInner->mDragging) { // XXX It's probably better not to check visibility here, right? return aLists.Outlines()->AppendNewToTop(new (aBuilder) nsDisplayEventReceiver(aBuilder, this)); } return NS_OK; }
void nsLeafBoxFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // REVIEW: GetFrameForPoint used to not report events for the background // layer, whereas this code will put an event receiver for this frame in the // BlockBorderBackground() list. But I don't see any need to preserve // that anomalous behaviour. The important thing I'm preserving is that // leaf boxes continue to receive events in the foreground layer. DisplayBorderBackgroundOutline(aBuilder, aLists); if (!aBuilder->IsForEventDelivery() || !IsVisibleForPainting(aBuilder)) return; aLists.Content()->AppendNewToTop(new (aBuilder) nsDisplayEventReceiver(aBuilder, this)); }
NS_IMETHODIMP nsColumnSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsresult rv = DisplayBorderBackgroundOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayGeneric(aBuilder, this, ::PaintColumnRule, "ColumnRule", nsDisplayItem::TYPE_COLUMN_RULE)); // Our children won't have backgrounds so it doesn't matter where we put them. for (nsFrameList::Enumerator e(mFrames); !e.AtEnd(); e.Next()) { nsresult rv = BuildDisplayListForChild(aBuilder, e.get(), aDirtyRect, aLists); NS_ENSURE_SUCCESS(rv, rv); } return NS_OK; }
NS_IMETHODIMP nsColumnSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsresult rv = DisplayBorderBackgroundOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayGeneric(aBuilder, this, ::PaintColumnRule, "ColumnRule", nsDisplayItem::TYPE_COLUMN_RULE)); nsIFrame* kid = mFrames.FirstChild(); // Our children won't have backgrounds so it doesn't matter where we put them. while (kid) { nsresult rv = BuildDisplayListForChild(aBuilder, kid, aDirtyRect, aLists); NS_ENSURE_SUCCESS(rv, rv); kid = kid->GetNextSibling(); } return NS_OK; }