Bug 1223653 patch 2 - Use an enum class for NS_STYLE_BOX_SIZING_*. r=heycam

The casts in nsCSSProps.cpp (defining kBoxSizingKTable) and in
nsComputedDOMStyle::DoGetBoxSizing (using
nsCSSProps::ValueToKeywordEnum) are a little bit annoying, though aren't
a net reduction in typesafety.

The casts in nsRuleNode.cpp (SetDiscrete) are a little more annoying,
though the change in this patch should be sufficient for converting all
properties -- but that may also mean reducing typesafety a bit for all
properties.

I'd like to find something better to do about them, but I think I'm ok
landing this before doing that.  Bug 1224918 covers doing better.
This commit is contained in:
L. David Baron 2015-11-19 18:09:29 -08:00
parent ac7aba1915
commit ac323569ff
15 changed files with 84 additions and 55 deletions

View File

@ -404,7 +404,7 @@ nsGenericHTMLElement::GetOffsetRect(CSSIntRect& aRect)
// Subtract the parent border unless it uses border-box sizing.
if (parent &&
parent->StylePosition()->mBoxSizing != NS_STYLE_BOX_SIZING_BORDER) {
parent->StylePosition()->mBoxSizing != StyleBoxSizing::Border) {
const nsStyleBorder* border = parent->StyleBorder();
origin.x -= border->GetComputedBorderWidth(NS_SIDE_LEFT);
origin.y -= border->GetComputedBorderWidth(NS_SIDE_TOP);

View File

@ -4507,7 +4507,7 @@ AddIntrinsicSizeOffset(nsRenderingContext* aRenderingContext,
nsIFrame* aFrame,
const nsIFrame::IntrinsicISizeOffsetData& aOffsets,
nsLayoutUtils::IntrinsicISizeType aType,
uint8_t aBoxSizing,
StyleBoxSizing aBoxSizing,
nscoord aContentSize,
nscoord aContentMinSize,
const nsStyleCoord& aStyleSize,
@ -4528,7 +4528,7 @@ AddIntrinsicSizeOffset(nsRenderingContext* aRenderingContext,
coordOutsideSize += aOffsets.hPadding;
pctOutsideSize += aOffsets.hPctPadding;
if (aBoxSizing == NS_STYLE_BOX_SIZING_PADDING) {
if (aBoxSizing == StyleBoxSizing::Padding) {
min += coordOutsideSize;
result = NSCoordSaturatingAdd(result, coordOutsideSize);
pctTotal += pctOutsideSize;
@ -4540,7 +4540,7 @@ AddIntrinsicSizeOffset(nsRenderingContext* aRenderingContext,
coordOutsideSize += aOffsets.hBorder;
if (aBoxSizing == NS_STYLE_BOX_SIZING_BORDER) {
if (aBoxSizing == StyleBoxSizing::Border) {
min += coordOutsideSize;
result = NSCoordSaturatingAdd(result, coordOutsideSize);
pctTotal += pctOutsideSize;
@ -4668,7 +4668,7 @@ nsLayoutUtils::IntrinsicForAxis(PhysicalAxis aAxis,
// so we work in the parent's writing mode; but if aFrame is orthogonal to
// its parent, we'll need to look at its BSize instead of min/pref-ISize.
const nsStylePosition* stylePos = aFrame->StylePosition();
uint8_t boxSizing = stylePos->mBoxSizing;
StyleBoxSizing boxSizing = stylePos->mBoxSizing;
const nsStyleCoord& styleMinISize =
horizontalAxis ? stylePos->mMinWidth : stylePos->mMinHeight;
@ -4725,7 +4725,7 @@ nsLayoutUtils::IntrinsicForAxis(PhysicalAxis aAxis,
// widths just like auto.
// For -moz-max-content and -moz-min-content, we handle them like
// specified widths, but ignore box-sizing.
boxSizing = NS_STYLE_BOX_SIZING_CONTENT;
boxSizing = StyleBoxSizing::Content;
} else if (!styleISize.ConvertsToLength() &&
!(haveFixedMinISize && haveFixedMaxISize && maxISize <= minISize)) {
#ifdef DEBUG_INTRINSIC_WIDTH
@ -4787,14 +4787,14 @@ nsLayoutUtils::IntrinsicForAxis(PhysicalAxis aAxis,
nscoord bSizeTakenByBoxSizing = 0;
switch (boxSizing) {
case NS_STYLE_BOX_SIZING_BORDER: {
case StyleBoxSizing::Border: {
const nsStyleBorder* styleBorder = aFrame->StyleBorder();
bSizeTakenByBoxSizing +=
horizontalAxis ? styleBorder->GetComputedBorder().TopBottom()
: styleBorder->GetComputedBorder().LeftRight();
// fall through
}
case NS_STYLE_BOX_SIZING_PADDING: {
case StyleBoxSizing::Padding: {
if (!(aFlags & IGNORE_PADDING)) {
const nsStyleSides& stylePadding =
aFrame->StylePadding()->mPadding;
@ -4814,7 +4814,7 @@ nsLayoutUtils::IntrinsicForAxis(PhysicalAxis aAxis,
}
// fall through
}
case NS_STYLE_BOX_SIZING_CONTENT:
case StyleBoxSizing::Content:
default:
break;
}
@ -5191,11 +5191,15 @@ nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(WritingMode aWM,
LogicalSize boxSizingAdjust(aWM);
switch (stylePos->mBoxSizing) {
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
boxSizingAdjust += aBorder;
// fall through
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
boxSizingAdjust += aPadding;
// fall through
case StyleBoxSizing::Content:
// nothing
break;
}
nscoord boxSizingToMarginEdgeISize =
aMargin.ISize(aWM) + aBorder.ISize(aWM) + aPadding.ISize(aWM) -

View File

@ -4304,11 +4304,15 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
const nsStylePosition *stylePos = StylePosition();
switch (stylePos->mBoxSizing) {
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
boxSizingAdjust += aBorder;
// fall through
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
boxSizingAdjust += aPadding;
// fall through
case StyleBoxSizing::Content:
// nothing
break;
}
nscoord boxSizingToMarginEdgeISize =
aMargin.ISize(aWM) + aBorder.ISize(aWM) + aPadding.ISize(aWM) -

View File

@ -251,19 +251,22 @@ nsCSSOffsetState::ComputeISizeValue(nscoord aContainingBlockISize,
nscoord
nsCSSOffsetState::ComputeISizeValue(nscoord aContainingBlockISize,
uint8_t aBoxSizing,
StyleBoxSizing aBoxSizing,
const nsStyleCoord& aCoord)
{
WritingMode wm = GetWritingMode();
nscoord inside = 0, outside = ComputedLogicalBorderPadding().IStartEnd(wm) +
ComputedLogicalMargin().IStartEnd(wm);
switch (aBoxSizing) {
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
inside = ComputedLogicalBorderPadding().IStartEnd(wm);
break;
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
inside = ComputedLogicalPadding().IStartEnd(wm);
break;
case StyleBoxSizing::Content:
// nothing
break;
}
outside -= inside;
@ -273,18 +276,21 @@ nsCSSOffsetState::ComputeISizeValue(nscoord aContainingBlockISize,
nscoord
nsCSSOffsetState::ComputeBSizeValue(nscoord aContainingBlockBSize,
uint8_t aBoxSizing,
StyleBoxSizing aBoxSizing,
const nsStyleCoord& aCoord)
{
WritingMode wm = GetWritingMode();
nscoord inside = 0;
switch (aBoxSizing) {
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
inside = ComputedLogicalBorderPadding().BStartEnd(wm);
break;
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
inside = ComputedLogicalPadding().BStartEnd(wm);
break;
case StyleBoxSizing::Content:
// nothing
break;
}
return nsLayoutUtils::ComputeBSizeValue(aContainingBlockBSize,
inside, aCoord);
@ -1133,11 +1139,15 @@ nsHTMLReflowState::CalculateBorderPaddingMargin(
nscoord outside = paddingStartEnd + borderStartEnd + marginStartEnd;
nscoord inside = 0;
switch (mStylePosition->mBoxSizing) {
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
inside += borderStartEnd;
// fall through
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
inside += paddingStartEnd;
// fall through
case StyleBoxSizing::Content:
// nothing
break;
}
outside -= inside;
*aInsideBoxSizing = inside;

View File

@ -250,11 +250,11 @@ protected:
// same as previous, but using mComputedBorderPadding, mComputedPadding,
// and mComputedMargin
nscoord ComputeISizeValue(nscoord aContainingBlockISize,
uint8_t aBoxSizing,
mozilla::StyleBoxSizing aBoxSizing,
const nsStyleCoord& aCoord);
nscoord ComputeBSizeValue(nscoord aContainingBlockBSize,
uint8_t aBoxSizing,
mozilla::StyleBoxSizing aBoxSizing,
const nsStyleCoord& aCoord);
};

View File

@ -988,9 +988,9 @@ const KTableEntry nsCSSProps::kBoxShadowTypeKTable[] = {
};
const KTableEntry nsCSSProps::kBoxSizingKTable[] = {
{ eCSSKeyword_content_box, NS_STYLE_BOX_SIZING_CONTENT },
{ eCSSKeyword_border_box, NS_STYLE_BOX_SIZING_BORDER },
{ eCSSKeyword_padding_box, NS_STYLE_BOX_SIZING_PADDING },
{ eCSSKeyword_content_box, uint8_t(StyleBoxSizing::Content) },
{ eCSSKeyword_border_box, uint8_t(StyleBoxSizing::Border) },
{ eCSSKeyword_padding_box, uint8_t(StyleBoxSizing::Padding) },
{ eCSSKeyword_UNKNOWN, -1 }
};

View File

@ -533,12 +533,15 @@ nsComputedDOMStyle::GetAdjustedValuesForBoxSizing()
nsMargin adjustment;
switch(stylePos->mBoxSizing) {
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
adjustment += mInnerFrame->GetUsedBorder();
// fall through
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
adjustment += mInnerFrame->GetUsedPadding();
// fall through
case StyleBoxSizing::Content:
// nothing
break;
}
return adjustment;
@ -3779,7 +3782,7 @@ nsComputedDOMStyle::DoGetBoxSizing()
{
nsROCSSPrimitiveValue *val = new nsROCSSPrimitiveValue;
val->SetIdent(
nsCSSProps::ValueToKeywordEnum(StylePosition()->mBoxSizing,
nsCSSProps::ValueToKeywordEnum(uint8_t(StylePosition()->mBoxSizing),
nsCSSProps::kBoxSizingKTable));
return val;
}

View File

@ -1307,14 +1307,14 @@ SetDiscrete(const nsCSSValue& aValue, FieldT & aField,
// but they have to say which
case eCSSUnit_Enumerated:
if (aMask & SETDSC_ENUMERATED) {
aField = aValue.GetIntValue();
aField = FieldT(aValue.GetIntValue());
return;
}
break;
case eCSSUnit_Integer:
if (aMask & SETDSC_INTEGER) {
aField = aValue.GetIntValue();
aField = FieldT(aValue.GetIntValue());
return;
}
break;
@ -7856,7 +7856,11 @@ nsRuleNode::ComputePositionData(void* aStartStruct,
pos->mBoxSizing, conditions,
SETDSC_ENUMERATED | SETDSC_UNSET_INITIAL,
parentPos->mBoxSizing,
NS_STYLE_BOX_SIZING_CONTENT, 0, 0, 0, 0);
StyleBoxSizing::Content,
StyleBoxSizing::Content /* ignored */,
StyleBoxSizing::Content /* ignored */,
StyleBoxSizing::Content /* ignored */,
StyleBoxSizing::Content /* ignored */);
// align-content: enum, inherit, initial
const auto& alignContentValue = *aRuleData->ValueForAlignContent();

View File

@ -18,13 +18,12 @@ namespace mozilla {
namespace css {
typedef mozilla::Side Side;
} // namespace css
} // namespace mozilla
#define NS_FOR_CSS_SIDES(var_) for (mozilla::css::Side var_ = NS_SIDE_TOP; var_ <= NS_SIDE_LEFT; var_++)
static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
static inline css::Side operator++(css::Side& side, int) {
NS_PRECONDITION(side >= NS_SIDE_TOP &&
side <= NS_SIDE_LEFT, "Out of range side");
side = mozilla::css::Side(side + 1);
side = css::Side(side + 1);
return side;
}
@ -57,9 +56,11 @@ static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
((((side_) + !!(second_))*2 + ((side_) + !(parallel_))%2) % 8)
// box-sizing
#define NS_STYLE_BOX_SIZING_CONTENT 0
#define NS_STYLE_BOX_SIZING_PADDING 1
#define NS_STYLE_BOX_SIZING_BORDER 2
enum class StyleBoxSizing : uint8_t {
Content,
Padding,
Border
};
// clip-path sizing
#define NS_STYLE_CLIP_SHAPE_SIZING_NOBOX 0
@ -1158,4 +1159,6 @@ static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
#define NS_STYLE_SCAN_PROGRESSIVE 0
#define NS_STYLE_SCAN_INTERLACE 1
} // namespace mozilla
#endif /* nsStyleConsts_h___ */

View File

@ -1434,7 +1434,7 @@ nsStylePosition::nsStylePosition(void)
mGridAutoRowsMax.SetAutoValue();
mGridAutoFlow = NS_STYLE_GRID_AUTO_FLOW_ROW;
mBoxSizing = NS_STYLE_BOX_SIZING_CONTENT;
mBoxSizing = StyleBoxSizing::Content;
mAlignContent = NS_STYLE_ALIGN_AUTO;
mAlignItems = NS_STYLE_ALIGN_AUTO;
mAlignSelf = NS_STYLE_ALIGN_AUTO;

View File

@ -1459,7 +1459,7 @@ struct nsStylePosition {
nsStyleCoord mGridAutoRowsMin; // [reset] coord, percent, enum, calc, flex
nsStyleCoord mGridAutoRowsMax; // [reset] coord, percent, enum, calc, flex
uint8_t mGridAutoFlow; // [reset] enumerated. See nsStyleConsts.h
uint8_t mBoxSizing; // [reset] see nsStyleConsts.h
mozilla::StyleBoxSizing mBoxSizing; // [reset] see nsStyleConsts.h
private:
friend class nsRuleNode;
// Helper for the ComputedAlign/Justify* methods.

View File

@ -121,16 +121,15 @@ GetISizeInfo(nsRenderingContext *aRenderingContext,
}
else {
switch (stylePos->mBoxSizing) {
case NS_STYLE_BOX_SIZING_CONTENT:
case StyleBoxSizing::Content:
boxSizingToBorderEdge = offsets.hPadding + offsets.hBorder;
break;
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
minCoord += offsets.hPadding;
prefCoord += offsets.hPadding;
boxSizingToBorderEdge = offsets.hBorder;
break;
default:
// NS_STYLE_BOX_SIZING_BORDER
case StyleBoxSizing::Border:
minCoord += offsets.hPadding + offsets.hBorder;
prefCoord += offsets.hPadding + offsets.hBorder;
break;

View File

@ -258,13 +258,13 @@ FixedTableLayoutStrategy::ComputeColumnISizes(const nsHTMLReflowState& aReflowSt
nscoord boxSizingAdjust = 0;
switch (cellFrame->StylePosition()->mBoxSizing) {
case NS_STYLE_BOX_SIZING_CONTENT:
case StyleBoxSizing::Content:
boxSizingAdjust += offsets.hPadding;
// Fall through
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
boxSizingAdjust += offsets.hBorder;
// Fall through
case NS_STYLE_BOX_SIZING_BORDER:
case StyleBoxSizing::Border:
// Don't add anything
break;
}

View File

@ -669,16 +669,15 @@ nsTableRowFrame::CalculateCellActualBSize(nsTableCellFrame* aCellFrame,
// for bsize)
if (PresContext()->CompatibilityMode() != eCompatibility_NavQuirks) {
switch (position->mBoxSizing) {
case NS_STYLE_BOX_SIZING_CONTENT:
case StyleBoxSizing::Content:
outsideBoxSizing =
aCellFrame->GetLogicalUsedBorderAndPadding(aWM).BStartEnd(aWM);
break;
case NS_STYLE_BOX_SIZING_PADDING:
case StyleBoxSizing::Padding:
outsideBoxSizing =
aCellFrame->GetLogicalUsedBorder(aWM).BStartEnd(aWM);
break;
default:
// NS_STYLE_BOX_SIZING_BORDER
case StyleBoxSizing::Border:
break;
}
}

View File

@ -81,11 +81,14 @@ nsResizerFrame::HandleEvent(nsPresContext* aPresContext,
// adjust to get the desired content rectangle.
nsRect rect = frameToResize->GetScreenRectInAppUnits();
switch (frameToResize->StylePosition()->mBoxSizing) {
case NS_STYLE_BOX_SIZING_CONTENT:
case StyleBoxSizing::Content:
rect.Deflate(frameToResize->GetUsedPadding());
case NS_STYLE_BOX_SIZING_PADDING:
// fall through
case StyleBoxSizing::Padding:
rect.Deflate(frameToResize->GetUsedBorder());
default:
// fall through
case StyleBoxSizing::Border:
// nothing
break;
}