Bug 251162. Add -moz-column-gap to the style system. r+sr=dbaron

This commit is contained in:
roc+%cs.cmu.edu 2004-07-18 12:12:46 +00:00
parent 567507020e
commit e0a7bb0095
21 changed files with 129 additions and 12 deletions

View File

@ -4263,6 +4263,11 @@ nsRuleNode::ComputeColumnData(nsStyleStruct* aStartStruct,
column->mColumnWidth, parent->mColumnWidth, SETCOORD_LAH,
aContext, mPresContext, inherited);
// column-gap: length, percentage, inherit
SetCoord(columnData.mColumnGap,
column->mColumnGap, parent->mColumnGap, SETCOORD_LPH,
aContext, mPresContext, inherited);
// column-count: auto, integer, inherit
if (eCSSUnit_Auto == columnData.mColumnCount.GetUnit()) {
column->mColumnCount = NS_STYLE_COLUMN_COUNT_AUTO;

View File

@ -833,6 +833,8 @@ void nsStyleContext::DumpRegressionData(nsIPresContext* aPresContext, FILE* out,
fprintf(out, "<column data=\"%d ",
(int)column->mColumnCount);
column->mColumnWidth.ToString(str);
fprintf(out, "%s ", NS_ConvertUCS2toUTF8(str).get());
column->mColumnGap.ToString(str);
fprintf(out, "%s", NS_ConvertUCS2toUTF8(str).get());
fprintf(out, "\" />\n");

View File

@ -4122,6 +4122,8 @@ PRBool CSSParserImpl::ParseSingleValueProperty(nsresult& aErrorCode,
return ParsePositiveVariant(aErrorCode, aValue, VARIANT_AHI, nsnull);
case eCSSProperty__moz_column_width:
return ParseVariant(aErrorCode, aValue, VARIANT_AHL, nsnull);
case eCSSProperty__moz_column_gap:
return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);
#ifdef ENABLE_OUTLINE
case eCSSProperty__moz_outline_radius_topLeft:
case eCSSProperty__moz_outline_radius_topRight:

View File

@ -1161,7 +1161,8 @@ nsCSSColumn::nsCSSColumn(void)
}
nsCSSColumn::nsCSSColumn(const nsCSSColumn& aCopy)
: mColumnCount(aCopy.mColumnCount), mColumnWidth(aCopy.mColumnWidth)
: mColumnCount(aCopy.mColumnCount), mColumnWidth(aCopy.mColumnWidth),
mColumnGap(aCopy.mColumnGap)
{
MOZ_COUNT_CTOR(nsCSSColumn);
}
@ -1179,6 +1180,7 @@ void nsCSSColumn::List(FILE* out, PRInt32 aIndent) const
nsAutoString buffer;
mColumnWidth.AppendToString(buffer, eCSSProperty__moz_column_width);
mColumnGap.AppendToString(buffer, eCSSProperty__moz_column_gap);
mColumnCount.AppendToString(buffer, eCSSProperty__moz_column_count);
fputs(NS_LossyConvertUCS2toASCII(buffer).get(), out);
}

View File

@ -518,6 +518,7 @@ struct nsCSSColumn : public nsCSSStruct {
nsCSSValue mColumnCount;
nsCSSValue mColumnWidth;
nsCSSValue mColumnGap;
};
struct nsRuleDataColumn : public nsCSSColumn {

View File

@ -570,6 +570,38 @@ nsComputedDOMStyle::GetColumnWidth(nsIFrame *aFrame,
return CallQueryInterface(val, aValue);
}
nsresult
nsComputedDOMStyle::GetColumnGap(nsIFrame *aFrame,
nsIDOMCSSValue** aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleColumn* column = nsnull;
GetStyleData(eStyleStruct_Column, (const nsStyleStruct*&)column, aFrame);
if (column) {
switch (column->mColumnGap.GetUnit()) {
case eStyleUnit_Coord:
val->SetTwips(column->mColumnGap.GetCoordValue());
break;
case eStyleUnit_Percent:
if (aFrame) {
val->SetTwips(column->mColumnGap.GetPercentValue()*aFrame->GetSize().width);
} else {
val->SetPercent(column->mColumnGap.GetPercentValue());
}
break;
default:
NS_WARNING("Bad column width unit");
val->SetTwips(0);
break;
}
}
return CallQueryInterface(val, aValue);
}
nsresult
nsComputedDOMStyle::GetFontFamily(nsIFrame *aFrame,
nsIDOMCSSValue** aValue)
@ -3575,6 +3607,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength)
COMPUTED_STYLE_MAP_ENTRY(box_sizing, BoxSizing),
COMPUTED_STYLE_MAP_ENTRY(_moz_column_count, ColumnCount),
COMPUTED_STYLE_MAP_ENTRY(_moz_column_width, ColumnWidth),
COMPUTED_STYLE_MAP_ENTRY(_moz_column_gap, ColumnGap),
COMPUTED_STYLE_MAP_ENTRY(float_edge, FloatEdge),
COMPUTED_STYLE_MAP_ENTRY(image_region, ImageRegion),
COMPUTED_STYLE_MAP_ENTRY(opacity, Opacity),

View File

@ -283,6 +283,7 @@ private:
/* Column properties */
nsresult GetColumnCount(nsIFrame *aFrame, nsIDOMCSSValue** aValue);
nsresult GetColumnWidth(nsIFrame *aFrame, nsIDOMCSSValue** aValue);
nsresult GetColumnGap(nsIFrame *aFrame, nsIDOMCSSValue** aValue);
nsROCSSPrimitiveValue* GetROCSSPrimitiveValue();
nsDOMCSSValueList* GetROCSSValueList(PRBool aCommaDelimited);

View File

@ -332,6 +332,7 @@ CSS_PROP_DISPLAY(clip, clip, Clip, Display, mClip, eCSSType_Rect, PR_FALSE, nsnu
CSS_PROP_COLOR(color, color, Color, Color, mColor, eCSSType_Value, PR_FALSE, nsnull)
CSS_PROP_COLUMN(-moz-column-count, _moz_column_count, MozColumnCount, Column, mColumnCount, eCSSType_Value, PR_FALSE, nsnull)
CSS_PROP_COLUMN(-moz-column-width, _moz_column_width, MozColumnWidth, Column, mColumnWidth, eCSSType_Value, PR_TRUE, nsnull)
CSS_PROP_COLUMN(-moz-column-gap, _moz_column_gap, MozColumnGap, Column, mColumnGap, eCSSType_Value, PR_TRUE, nsnull)
CSS_PROP_CONTENT(content, content, Content, Content, mContent, eCSSType_ValueList, PR_FALSE, kContentKTable)
CSS_PROP_NOTIMPLEMENTED(counter-increment, counter_increment, CounterIncrement)
CSS_PROP_NOTIMPLEMENTED(counter-reset, counter_reset, CounterReset)

View File

@ -1106,7 +1106,8 @@ struct nsStyleColumn : public nsStyleStruct {
nsChangeHint CalcDifference(const nsStyleColumn& aOther) const;
PRUint32 mColumnCount; // [reset] see nsStyleConsts.h
nsStyleCoord mColumnWidth; // [reset] see nsStyleConsts.h
nsStyleCoord mColumnWidth; // [reset]
nsStyleCoord mColumnGap; // [reset]
};
#ifdef MOZ_SVG

View File

@ -734,6 +734,7 @@ nsStyleColumn::nsStyleColumn()
{
mColumnCount = NS_STYLE_COLUMN_COUNT_AUTO;
mColumnWidth.SetAutoValue();
mColumnGap.SetCoordValue(0);
}
nsStyleColumn::~nsStyleColumn()
@ -747,10 +748,18 @@ nsStyleColumn::nsStyleColumn(const nsStyleColumn& aSource)
nsChangeHint nsStyleColumn::CalcDifference(const nsStyleColumn& aOther) const
{
if (mColumnWidth == aOther.mColumnWidth &&
mColumnCount == aOther.mColumnCount)
return NS_STYLE_HINT_NONE;
return nsChangeHint_ReconstructFrame;
if ((mColumnWidth.GetUnit() == eStyleUnit_Auto)
!= (aOther.mColumnWidth.GetUnit() == eStyleUnit_Auto) ||
(mColumnCount == NS_STYLE_COLUMN_COUNT_AUTO)
!= (aOther.mColumnCount == NS_STYLE_COLUMN_COUNT_AUTO))
return nsChangeHint_ReconstructFrame;
if (mColumnCount != aOther.mColumnCount ||
mColumnWidth != aOther.mColumnWidth ||
mColumnGap != aOther.mColumnGap)
return nsChangeHint_ReflowFrame;
return NS_STYLE_HINT_NONE;
}
#ifdef MOZ_SVG

View File

@ -484,6 +484,9 @@ interface nsIDOMNSCSS2Properties : nsIDOMCSS2Properties
attribute DOMString MozColumnWidth;
// raises(DOMException) on setting
attribute DOMString MozColumnGap;
// raises(DOMException) on setting
attribute DOMString MozCounterIncrement;
// raises(DOMException) on setting

View File

@ -4122,6 +4122,8 @@ PRBool CSSParserImpl::ParseSingleValueProperty(nsresult& aErrorCode,
return ParsePositiveVariant(aErrorCode, aValue, VARIANT_AHI, nsnull);
case eCSSProperty__moz_column_width:
return ParseVariant(aErrorCode, aValue, VARIANT_AHL, nsnull);
case eCSSProperty__moz_column_gap:
return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);
#ifdef ENABLE_OUTLINE
case eCSSProperty__moz_outline_radius_topLeft:
case eCSSProperty__moz_outline_radius_topRight:

View File

@ -332,6 +332,7 @@ CSS_PROP_DISPLAY(clip, clip, Clip, Display, mClip, eCSSType_Rect, PR_FALSE, nsnu
CSS_PROP_COLOR(color, color, Color, Color, mColor, eCSSType_Value, PR_FALSE, nsnull)
CSS_PROP_COLUMN(-moz-column-count, _moz_column_count, MozColumnCount, Column, mColumnCount, eCSSType_Value, PR_FALSE, nsnull)
CSS_PROP_COLUMN(-moz-column-width, _moz_column_width, MozColumnWidth, Column, mColumnWidth, eCSSType_Value, PR_TRUE, nsnull)
CSS_PROP_COLUMN(-moz-column-gap, _moz_column_gap, MozColumnGap, Column, mColumnGap, eCSSType_Value, PR_TRUE, nsnull)
CSS_PROP_CONTENT(content, content, Content, Content, mContent, eCSSType_ValueList, PR_FALSE, kContentKTable)
CSS_PROP_NOTIMPLEMENTED(counter-increment, counter_increment, CounterIncrement)
CSS_PROP_NOTIMPLEMENTED(counter-reset, counter_reset, CounterReset)

View File

@ -1161,7 +1161,8 @@ nsCSSColumn::nsCSSColumn(void)
}
nsCSSColumn::nsCSSColumn(const nsCSSColumn& aCopy)
: mColumnCount(aCopy.mColumnCount), mColumnWidth(aCopy.mColumnWidth)
: mColumnCount(aCopy.mColumnCount), mColumnWidth(aCopy.mColumnWidth),
mColumnGap(aCopy.mColumnGap)
{
MOZ_COUNT_CTOR(nsCSSColumn);
}
@ -1179,6 +1180,7 @@ void nsCSSColumn::List(FILE* out, PRInt32 aIndent) const
nsAutoString buffer;
mColumnWidth.AppendToString(buffer, eCSSProperty__moz_column_width);
mColumnGap.AppendToString(buffer, eCSSProperty__moz_column_gap);
mColumnCount.AppendToString(buffer, eCSSProperty__moz_column_count);
fputs(NS_LossyConvertUCS2toASCII(buffer).get(), out);
}

View File

@ -518,6 +518,7 @@ struct nsCSSColumn : public nsCSSStruct {
nsCSSValue mColumnCount;
nsCSSValue mColumnWidth;
nsCSSValue mColumnGap;
};
struct nsRuleDataColumn : public nsCSSColumn {

View File

@ -570,6 +570,38 @@ nsComputedDOMStyle::GetColumnWidth(nsIFrame *aFrame,
return CallQueryInterface(val, aValue);
}
nsresult
nsComputedDOMStyle::GetColumnGap(nsIFrame *aFrame,
nsIDOMCSSValue** aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleColumn* column = nsnull;
GetStyleData(eStyleStruct_Column, (const nsStyleStruct*&)column, aFrame);
if (column) {
switch (column->mColumnGap.GetUnit()) {
case eStyleUnit_Coord:
val->SetTwips(column->mColumnGap.GetCoordValue());
break;
case eStyleUnit_Percent:
if (aFrame) {
val->SetTwips(column->mColumnGap.GetPercentValue()*aFrame->GetSize().width);
} else {
val->SetPercent(column->mColumnGap.GetPercentValue());
}
break;
default:
NS_WARNING("Bad column width unit");
val->SetTwips(0);
break;
}
}
return CallQueryInterface(val, aValue);
}
nsresult
nsComputedDOMStyle::GetFontFamily(nsIFrame *aFrame,
nsIDOMCSSValue** aValue)
@ -3575,6 +3607,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength)
COMPUTED_STYLE_MAP_ENTRY(box_sizing, BoxSizing),
COMPUTED_STYLE_MAP_ENTRY(_moz_column_count, ColumnCount),
COMPUTED_STYLE_MAP_ENTRY(_moz_column_width, ColumnWidth),
COMPUTED_STYLE_MAP_ENTRY(_moz_column_gap, ColumnGap),
COMPUTED_STYLE_MAP_ENTRY(float_edge, FloatEdge),
COMPUTED_STYLE_MAP_ENTRY(image_region, ImageRegion),
COMPUTED_STYLE_MAP_ENTRY(opacity, Opacity),

View File

@ -283,6 +283,7 @@ private:
/* Column properties */
nsresult GetColumnCount(nsIFrame *aFrame, nsIDOMCSSValue** aValue);
nsresult GetColumnWidth(nsIFrame *aFrame, nsIDOMCSSValue** aValue);
nsresult GetColumnGap(nsIFrame *aFrame, nsIDOMCSSValue** aValue);
nsROCSSPrimitiveValue* GetROCSSPrimitiveValue();
nsDOMCSSValueList* GetROCSSValueList(PRBool aCommaDelimited);

View File

@ -4263,6 +4263,11 @@ nsRuleNode::ComputeColumnData(nsStyleStruct* aStartStruct,
column->mColumnWidth, parent->mColumnWidth, SETCOORD_LAH,
aContext, mPresContext, inherited);
// column-gap: length, percentage, inherit
SetCoord(columnData.mColumnGap,
column->mColumnGap, parent->mColumnGap, SETCOORD_LPH,
aContext, mPresContext, inherited);
// column-count: auto, integer, inherit
if (eCSSUnit_Auto == columnData.mColumnCount.GetUnit()) {
column->mColumnCount = NS_STYLE_COLUMN_COUNT_AUTO;

View File

@ -833,6 +833,8 @@ void nsStyleContext::DumpRegressionData(nsIPresContext* aPresContext, FILE* out,
fprintf(out, "<column data=\"%d ",
(int)column->mColumnCount);
column->mColumnWidth.ToString(str);
fprintf(out, "%s ", NS_ConvertUCS2toUTF8(str).get());
column->mColumnGap.ToString(str);
fprintf(out, "%s", NS_ConvertUCS2toUTF8(str).get());
fprintf(out, "\" />\n");

View File

@ -734,6 +734,7 @@ nsStyleColumn::nsStyleColumn()
{
mColumnCount = NS_STYLE_COLUMN_COUNT_AUTO;
mColumnWidth.SetAutoValue();
mColumnGap.SetCoordValue(0);
}
nsStyleColumn::~nsStyleColumn()
@ -747,10 +748,18 @@ nsStyleColumn::nsStyleColumn(const nsStyleColumn& aSource)
nsChangeHint nsStyleColumn::CalcDifference(const nsStyleColumn& aOther) const
{
if (mColumnWidth == aOther.mColumnWidth &&
mColumnCount == aOther.mColumnCount)
return NS_STYLE_HINT_NONE;
return nsChangeHint_ReconstructFrame;
if ((mColumnWidth.GetUnit() == eStyleUnit_Auto)
!= (aOther.mColumnWidth.GetUnit() == eStyleUnit_Auto) ||
(mColumnCount == NS_STYLE_COLUMN_COUNT_AUTO)
!= (aOther.mColumnCount == NS_STYLE_COLUMN_COUNT_AUTO))
return nsChangeHint_ReconstructFrame;
if (mColumnCount != aOther.mColumnCount ||
mColumnWidth != aOther.mColumnWidth ||
mColumnGap != aOther.mColumnGap)
return nsChangeHint_ReflowFrame;
return NS_STYLE_HINT_NONE;
}
#ifdef MOZ_SVG

View File

@ -1106,7 +1106,8 @@ struct nsStyleColumn : public nsStyleStruct {
nsChangeHint CalcDifference(const nsStyleColumn& aOther) const;
PRUint32 mColumnCount; // [reset] see nsStyleConsts.h
nsStyleCoord mColumnWidth; // [reset] see nsStyleConsts.h
nsStyleCoord mColumnWidth; // [reset]
nsStyleCoord mColumnGap; // [reset]
};
#ifdef MOZ_SVG