nscoord nsTextControlFrame::GetMinWidth(nsRenderingContext* aRenderingContext) { // Our min width is just our preferred width if we have auto width. nscoord result; DISPLAY_MIN_WIDTH(this, result); result = GetPrefWidth(aRenderingContext); return result; }
nscoord nsIsIndexFrame::GetMinWidth(nsRenderingContext *aRenderingContext) { nscoord result; DISPLAY_MIN_WIDTH(this, result); // Our min width is our pref width; the rest of our reflow is // happily handled by nsBlockFrame result = GetPrefWidth(aRenderingContext); return result; }
/* virtual */ nscoord nsSubDocumentFrame::GetMinWidth(nsIRenderingContext *aRenderingContext) { nscoord result; DISPLAY_MIN_WIDTH(this, result); nsIFrame* subDocRoot = ObtainIntrinsicSizeFrame(); if (subDocRoot) { result = subDocRoot->GetMinWidth(aRenderingContext); } else { result = GetIntrinsicWidth(); } return result; }
nscoord nsHTMLButtonControlFrame::GetMinWidth(nsIRenderingContext* aRenderingContext) { nscoord result; DISPLAY_MIN_WIDTH(this, result); nsIFrame* kid = mFrames.FirstChild(); result = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, kid, nsLayoutUtils::MIN_WIDTH); result += mRenderer.GetAddedButtonBorderAndPadding().LeftRight(); return result; }
/* virtual */ nscoord nsLeafBoxFrame::GetMinWidth(nsRenderingContext *aRenderingContext) { nscoord result; DISPLAY_MIN_WIDTH(this, result); nsBoxLayoutState state(PresContext(), aRenderingContext); nsSize minSize = GetMinSize(state); // GetMinSize 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 GetMinSize added, which is the // result of GetBorderAndPadding. nsMargin bp; GetBorderAndPadding(bp); result = minSize.width - bp.LeftRight(); return result; }
/* virtual */ nscoord nsTableOuterFrame::GetMinWidth(nsRenderingContext *aRenderingContext) { nscoord width = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, mInnerTableFrame, nsLayoutUtils::MIN_WIDTH); DISPLAY_MIN_WIDTH(this, width); if (mCaptionFrame) { nscoord capWidth = nsLayoutUtils::IntrinsicForContainer(aRenderingContext, mCaptionFrame, nsLayoutUtils::MIN_WIDTH); if (HasSideCaption()) { width += capWidth; } else { if (capWidth > width) { width = capWidth; } } } return width; }
/* virtual */ nscoord FixedTableLayoutStrategy::GetMinISize(nsRenderingContext* aRenderingContext) { DISPLAY_MIN_WIDTH(mTableFrame, mMinWidth); if (mMinWidth != NS_INTRINSIC_WIDTH_UNKNOWN) return mMinWidth; // 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, or with the use of GetMinISize by // nsTableFrame::ComputeSize to determine the width of a fixed // layout table, since CSS2.1 says: // The width of the table is then the greater of the value of the // 'width' property for the table element and the sum of the // column widths (plus cell spacing or borders). // XXX Should we really ignore 'min-width' and 'max-width'? // XXX Should we really ignore widths on column groups? nsTableCellMap *cellMap = mTableFrame->GetCellMap(); int32_t colCount = cellMap->GetColCount(); nscoord result = 0; if (colCount > 0) { result += mTableFrame->GetCellSpacingX(-1, colCount); } for (int32_t col = 0; col < colCount; ++col) { nsTableColFrame *colFrame = mTableFrame->GetColFrame(col); if (!colFrame) { NS_ERROR("column frames out of sync with cell map"); continue; } nscoord spacing = mTableFrame->GetCellSpacingX(col); const nsStyleCoord *styleWidth = &colFrame->StylePosition()->mWidth; if (styleWidth->ConvertsToLength()) { result += nsLayoutUtils::ComputeWidthValue(aRenderingContext, colFrame, 0, 0, 0, *styleWidth); } else if (styleWidth->GetUnit() == eStyleUnit_Percent) { // do nothing } else { NS_ASSERTION(styleWidth->GetUnit() == eStyleUnit_Auto || styleWidth->GetUnit() == eStyleUnit_Enumerated || (styleWidth->IsCalcUnit() && styleWidth->CalcHasPercent()), "bad width"); // The 'table-layout: fixed' algorithm considers only cells // in the first row. bool originates; int32_t colSpan; nsTableCellFrame *cellFrame = cellMap->GetCellInfoAt(0, col, &originates, &colSpan); if (cellFrame) { styleWidth = &cellFrame->StylePosition()->mWidth; if (styleWidth->ConvertsToLength() || (styleWidth->GetUnit() == eStyleUnit_Enumerated && (styleWidth->GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || styleWidth->GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT))) { nscoord cellWidth = nsLayoutUtils::IntrinsicForContainer( aRenderingContext, cellFrame, nsLayoutUtils::MIN_ISIZE); if (colSpan > 1) { // If a column-spanning cell is in the first // row, split up the space evenly. (XXX This // isn't quite right if some of the columns it's // in have specified widths. Should we care?) cellWidth = ((cellWidth + spacing) / colSpan) - spacing; } result += cellWidth; } else if (styleWidth->GetUnit() == eStyleUnit_Percent) { if (colSpan > 1) { // XXX Can this force columns to negative // widths? result -= spacing * (colSpan - 1); } } // else, for 'auto', '-moz-available', '-moz-fit-content', // and 'calc()' with percentages, do nothing } } } return (mMinWidth = result); }
nscoord nsVideoFrame::GetMinWidth(nsIRenderingContext *aRenderingContext) { nscoord result = GetIntrinsicSize(aRenderingContext).width; DISPLAY_MIN_WIDTH(this, result); return result; }