static void InitializeTrackSize(nscoord aPercentageBasis, const nsStyleCoord& aMinCoord, const nsStyleCoord& aMaxCoord, TrackSize* aTrackSize) { // http://dev.w3.org/csswg/css-grid/#algo-init nscoord& base = aTrackSize->mBase; switch (aMaxCoord.GetUnit()) { case eStyleUnit_Enumerated: case eStyleUnit_FlexFraction: base = 0; break; default: base = nsRuleNode::ComputeCoordPercentCalc(aMinCoord, aPercentageBasis); } nscoord& limit = aTrackSize->mLimit; switch (aMaxCoord.GetUnit()) { case eStyleUnit_Enumerated: limit = NS_UNCONSTRAINEDSIZE; break; case eStyleUnit_FlexFraction: limit = base; break; default: limit = nsRuleNode::ComputeCoordPercentCalc(aMaxCoord, aPercentageBasis); if (limit < base) { limit = base; } } }
float SVGContentUtils::CoordToFloat(nsSVGElement *aContent, const nsStyleCoord &aCoord) { switch (aCoord.GetUnit()) { case eStyleUnit_Factor: // user units return aCoord.GetFactorValue(); case eStyleUnit_Coord: return nsPresContext::AppUnitsToFloatCSSPixels(aCoord.GetCoordValue()); case eStyleUnit_Percent: { SVGSVGElement* ctx = aContent->GetCtx(); return ctx ? aCoord.GetPercentValue() * ctx->GetLength(SVGContentUtils::XY) : 0.0f; } default: return 0.0f; } }
static inline bool IsMarginZero(const nsStyleCoord &aCoord) { return aCoord.GetUnit() == eStyleUnit_Auto || nsLayoutUtils::IsMarginZero(aCoord); }