PRBool nsIBox::AddCSSMaxSize(nsIBox* aBox, nsSize& aSize, PRBool &aWidthSet, PRBool &aHeightSet) { aWidthSet = PR_FALSE; aHeightSet = PR_FALSE; // add in the css min, max, pref const nsStylePosition* position = aBox->GetStylePosition(); // and max // see if the width or height was specifically set // XXX Handle eStyleUnit_Enumerated? // (Handling the eStyleUnit_Enumerated types requires // GetPrefSize/GetMinSize methods that don't consider // (min-/max-/)(width/height) properties.) const nsStyleCoord maxWidth = position->mMaxWidth; if (maxWidth.ConvertsToLength()) { aSize.width = nsRuleNode::ComputeCoordPercentCalc(maxWidth, 0); aWidthSet = PR_TRUE; } // percentages and calc() with percentages are treated like 'none' const nsStyleCoord &maxHeight = position->mMaxHeight; if (maxHeight.ConvertsToLength()) { aSize.height = nsRuleNode::ComputeCoordPercentCalc(maxHeight, 0); aHeightSet = PR_TRUE; } // percentages and calc() with percentages are treated like 'none' nsIContent* content = aBox->GetContent(); if (content) { nsAutoString value; PRInt32 error; content->GetAttr(kNameSpaceID_None, nsGkAtoms::maxwidth, value); if (!value.IsEmpty()) { value.Trim("%"); nscoord val = nsPresContext::CSSPixelsToAppUnits(value.ToInteger(&error)); aSize.width = val; aWidthSet = PR_TRUE; } content->GetAttr(kNameSpaceID_None, nsGkAtoms::maxheight, value); if (!value.IsEmpty()) { value.Trim("%"); nscoord val = nsPresContext::CSSPixelsToAppUnits(value.ToInteger(&error)); aSize.height = val; aHeightSet = PR_TRUE; } } return (aWidthSet || aHeightSet); }
static inline bool IsFixedOffset(const nsStyleCoord& aCoord) { return aCoord.ConvertsToLength(); }
static inline bool IsFixedMarginSize(const nsStyleCoord& aCoord) { return aCoord.ConvertsToLength(); }