/* virtual */ nscoord nsPlaceholderFrame::GetPrefWidth(nsRenderingContext *aRenderingContext) { nscoord result = 0; DISPLAY_PREF_WIDTH(this, result); return result; }
nscoord nsColumnSetFrame::GetPrefWidth(nsRenderingContext *aRenderingContext) { // Our preferred width is our desired column width, if specified, otherwise // the child's preferred width, times the number of columns, plus the width // of any required column gaps // XXX what about forced column breaks here? nscoord result = 0; DISPLAY_PREF_WIDTH(this, result); const nsStyleColumn* colStyle = GetStyleColumn(); nscoord colGap = GetColumnGap(this, colStyle); nscoord colWidth; if (colStyle->mColumnWidth.GetUnit() == eStyleUnit_Coord) { colWidth = colStyle->mColumnWidth.GetCoordValue(); } else if (mFrames.FirstChild()) { colWidth = mFrames.FirstChild()->GetPrefWidth(aRenderingContext); } else { colWidth = 0; } PRInt32 numColumns = colStyle->mColumnCount; if (numColumns <= 0) { // if column-count is auto, assume one column numColumns = 1; } nscoord width = colWidth*numColumns + colGap*(numColumns - 1); // The multiplication above can make 'width' negative (integer overflow), // so use NS_MAX to protect against that. result = NS_MAX(width, colWidth); return result; }
/* virtual */ nscoord nsLeafFrame::GetPrefWidth(nsRenderingContext *aRenderingContext) { nscoord result; DISPLAY_PREF_WIDTH(this, result); result = GetIntrinsicWidth(); return result; }
nscoord nsComboboxControlFrame::GetPrefWidth(nsIRenderingContext *aRenderingContext) { nscoord prefWidth; DISPLAY_PREF_WIDTH(this, prefWidth); prefWidth = GetIntrinsicWidth(aRenderingContext, nsLayoutUtils::PREF_WIDTH); return prefWidth; }
/* virtual */ nscoord nsCanvasFrame::GetPrefWidth(nsRenderingContext *aRenderingContext) { nscoord result; DISPLAY_PREF_WIDTH(this, result); if (mFrames.IsEmpty()) result = 0; else result = mFrames.FirstChild()->GetPrefWidth(aRenderingContext); return result; }
nscoord nsHTMLButtonControlFrame::GetPrefWidth(nsIRenderingContext* aRenderingContext) { nscoord result; DISPLAY_PREF_WIDTH(this, result); nsIFrame* kid = mFrames.FirstChild(); result = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, kid, nsLayoutUtils::PREF_WIDTH); result += mRenderer.GetAddedButtonBorderAndPadding().LeftRight(); return result; }
/* virtual */ nscoord FixedTableLayoutStrategy::GetPrefISize(nsRenderingContext* aRenderingContext, bool aComputingSize) { // It's theoretically possible to do something much better here that // depends only on the columns and the first row (where we look at // intrinsic widths inside the first row and then reverse the // algorithm to find the narrowest width that would hold all of // those intrinsic widths), but it wouldn't be compatible with other // browsers. nscoord result = nscoord_MAX; DISPLAY_PREF_WIDTH(mTableFrame, result); return result; }
/* virtual */ nscoord nsSubDocumentFrame::GetPrefWidth(nsIRenderingContext *aRenderingContext) { nscoord result; DISPLAY_PREF_WIDTH(this, result); nsIFrame* subDocRoot = ObtainIntrinsicSizeFrame(); if (subDocRoot) { result = subDocRoot->GetPrefWidth(aRenderingContext); } else { result = GetIntrinsicWidth(); } return result; }
/* virtual */ nscoord nsTableOuterFrame::GetPrefWidth(nsRenderingContext *aRenderingContext) { nscoord maxWidth; DISPLAY_PREF_WIDTH(this, maxWidth); maxWidth = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, InnerTableFrame(), nsLayoutUtils::PREF_WIDTH); if (mCaptionFrames.NotEmpty()) { PRUint8 captionSide = GetCaptionSide(); switch(captionSide) { case NS_STYLE_CAPTION_SIDE_LEFT: case NS_STYLE_CAPTION_SIDE_RIGHT: { nscoord capMin = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, mCaptionFrames.FirstChild(), nsLayoutUtils::MIN_WIDTH); maxWidth += capMin; } break; default: { nsLayoutUtils::IntrinsicWidthType iwt; if (captionSide == NS_STYLE_CAPTION_SIDE_TOP || captionSide == NS_STYLE_CAPTION_SIDE_BOTTOM) { // Don't let the caption's pref width expand the table's pref // width. iwt = nsLayoutUtils::MIN_WIDTH; } else { NS_ASSERTION(captionSide == NS_STYLE_CAPTION_SIDE_TOP_OUTSIDE || captionSide == NS_STYLE_CAPTION_SIDE_BOTTOM_OUTSIDE, "unexpected caption side"); iwt = nsLayoutUtils::PREF_WIDTH; } nscoord capPref = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, mCaptionFrames.FirstChild(), iwt); maxWidth = NS_MAX(maxWidth, capPref); } break; } } return maxWidth; }
/* virtual */ nscoord nsLeafBoxFrame::GetPrefWidth(nsRenderingContext *aRenderingContext) { nscoord result; DISPLAY_PREF_WIDTH(this, result); nsBoxLayoutState state(PresContext(), aRenderingContext); nsSize prefSize = GetPrefSize(state); // GetPrefSize returns border-box width, and we want to return content // width. Since Reflow uses the reflow state's border and padding, we // actually just want to subtract what GetPrefSize added, which is the // result of GetBorderAndPadding. nsMargin bp; GetBorderAndPadding(bp); result = prefSize.width - bp.LeftRight(); return result; }
nscoord nsVideoFrame::GetPrefWidth(nsIRenderingContext *aRenderingContext) { nscoord result = GetIntrinsicSize(aRenderingContext).width; DISPLAY_PREF_WIDTH(this, result); return result; }