nsSize nsSprocketLayout::GetPrefSize(nsIFrame* aBox, nsBoxLayoutState& aState) { nsSize vpref (0, 0); bool isHorizontal = IsHorizontal(aBox); nscoord biggestPref = 0; // run through all the children and get their min, max, and preferred sizes // return us the size of the box nsIFrame* child = nsBox::GetChildBox(aBox); nsFrameState frameState = nsFrameState(0); GetFrameState(aBox, frameState); bool isEqual = !!(frameState & NS_STATE_EQUAL_SIZE); int32_t count = 0; while (child) { // ignore collapsed children if (!child->IsCollapsed()) { nsSize pref = child->GetPrefSize(aState); AddMargin(child, pref); if (isEqual) { if (isHorizontal) { if (pref.width > biggestPref) biggestPref = pref.width; } else { if (pref.height > biggestPref) biggestPref = pref.height; } } AddLargestSize(vpref, pref, isHorizontal); count++; } child = nsBox::GetNextBox(child); } if (isEqual) { if (isHorizontal) vpref.width = biggestPref*count; else vpref.height = biggestPref*count; } // now add our border and padding AddBorderAndPadding(aBox, vpref); return vpref; }
nsSize nsStackLayout::GetMinSize(nsIBox* aBox, nsBoxLayoutState& aState) { nsSize minSize (0, 0); // run through all the children and get their min, max, and preferred sizes nsIBox* child = aBox->GetChildBox(); while (child) { nsSize min = child->GetMinSize(aState); AddMargin(child, min); AddOffset(aState, child, min); AddLargestSize(minSize, min); child = child->GetNextBox(); } // now add our border and padding AddBorderAndPadding(aBox, minSize); return minSize; }
nsSize nsGridLayout2::GetPrefSize(nsIBox* aBox, nsBoxLayoutState& aState) { nsSize pref = nsStackLayout::GetPrefSize(aBox, aState); // if there are no <rows> tags that will sum up our columns, // sum up our columns here. nsSize total(0,0); nsIBox* rowsBox = mGrid.GetRowsBox(); nsIBox* columnsBox = mGrid.GetColumnsBox(); if (!rowsBox || !columnsBox) { if (!rowsBox) { // max height is the sum of our rows PRInt32 rows = mGrid.GetRowCount(); for (PRInt32 i=0; i < rows; i++) { nscoord height = mGrid.GetPrefRowHeight(aState, i, PR_TRUE); AddWidth(total, height, PR_FALSE); // AddHeight } } if (!columnsBox) { // max height is the sum of our rows PRInt32 columns = mGrid.GetColumnCount(); for (PRInt32 i=0; i < columns; i++) { nscoord width = mGrid.GetPrefRowHeight(aState, i, PR_FALSE); AddWidth(total, width, PR_TRUE); // AddWidth } } AddMargin(aBox, total); AddOffset(aState, aBox, total); AddLargestSize(pref, total); } return pref; }
nsSize nsGridLayout2::GetXULMinSize(nsIFrame* aBox, nsBoxLayoutState& aState) { nsSize minSize = nsStackLayout::GetXULMinSize(aBox, aState); // if there are no <rows> tags that will sum up our columns, // sum up our columns here. nsSize total(0,0); nsIFrame* rowsBox = mGrid.GetRowsBox(); nsIFrame* columnsBox = mGrid.GetColumnsBox(); if (!rowsBox || !columnsBox) { if (!rowsBox) { // max height is the sum of our rows int32_t rows = mGrid.GetRowCount(); for (int32_t i=0; i < rows; i++) { nscoord height = mGrid.GetMinRowHeight(aState, i, true); AddWidth(total, height, false); // AddHeight } } if (!columnsBox) { // max height is the sum of our rows int32_t columns = mGrid.GetColumnCount(); for (int32_t i=0; i < columns; i++) { nscoord width = mGrid.GetMinRowHeight(aState, i, false); AddWidth(total, width, true); // AddWidth } } AddMargin(aBox, total); AddOffset(aBox, total); AddLargestSize(minSize, total); } return minSize; }
nsSize nsStackLayout::GetPrefSize(nsIBox* aBox, nsBoxLayoutState& aState) { nsSize rpref (0, 0); // we are as wide as the widest child plus its left offset // we are tall as the tallest child plus its top offset nsIBox* child = aBox->GetChildBox(); while (child) { nsSize pref = child->GetPrefSize(aState); AddMargin(child, pref); AddOffset(aState, child, pref); AddLargestSize(rpref, pref); child = child->GetNextBox(); } // now add our border and padding AddBorderAndPadding(aBox, rpref); return rpref; }
nsSize nsSprocketLayout::GetMinSize(nsIFrame* aBox, nsBoxLayoutState& aState) { nsSize minSize (0, 0); bool isHorizontal = IsHorizontal(aBox); nscoord biggestMin = 0; // run through all the children and get their min, max, and preferred sizes // return us the size of the box nsIFrame* child = nsBox::GetChildBox(aBox); nsFrameState frameState = nsFrameState(0); GetFrameState(aBox, frameState); bool isEqual = !!(frameState & NS_STATE_EQUAL_SIZE); int32_t count = 0; while (child) { // ignore collapsed children if (!child->IsCollapsed()) { nsSize min = child->GetMinSize(aState); nsSize pref(0,0); // if the child is not flexible then // its min size is its pref size. if (child->GetFlex(aState) == 0) { pref = child->GetPrefSize(aState); if (isHorizontal) min.width = pref.width; else min.height = pref.height; } if (isEqual) { if (isHorizontal) { if (min.width > biggestMin) biggestMin = min.width; } else { if (min.height > biggestMin) biggestMin = min.height; } } AddMargin(child, min); AddLargestSize(minSize, min, isHorizontal); count++; } child = nsBox::GetNextBox(child); } if (isEqual) { if (isHorizontal) minSize.width = biggestMin*count; else minSize.height = biggestMin*count; } // now add our border and padding AddBorderAndPadding(aBox, minSize); return minSize; }