Fix inheritance of percentage values for 'line-height' by removing hacks to base percentage values for 'line-height' on the actual value rather than the computed value of 'font-size'. Fix various |const|-ness issues in nsRuleNode. b=97726 r=pierre sr=hyatt

This commit is contained in:
dbaron%fas.harvard.edu 2001-11-06 07:48:02 +00:00
Родитель 266c0562b7
Коммит 01bf33644b
4 изменённых файлов: 178 добавлений и 202 удалений

Просмотреть файл

@ -186,7 +186,7 @@ nsString& Unquote(nsString& aString)
}
nscoord CalcLength(const nsCSSValue& aValue,
nsFont* aFont,
const nsFont* aFont,
nsIStyleContext* aStyleContext,
nsIPresContext* aPresContext,
PRBool& aInherited)
@ -200,18 +200,18 @@ nscoord CalcLength(const nsCSSValue& aValue,
case eCSSUnit_EM:
case eCSSUnit_Char: {
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
return NSToCoordRound(aValue.GetFloatValue() * (float)font->size);
// XXX scale against font metrics height instead?
}
case eCSSUnit_EN: {
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
return NSToCoordRound((aValue.GetFloatValue() * (float)font->size) / 2.0f);
}
case eCSSUnit_XHeight: {
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
nsIFontMetrics* fm;
aPresContext->GetMetricsFor(*font, &fm);
NS_ASSERTION(nsnull != fm, "can't get font metrics");
@ -228,7 +228,7 @@ nscoord CalcLength(const nsCSSValue& aValue,
case eCSSUnit_CapHeight: {
NS_NOTYETIMPLEMENTED("cap height unit");
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
nscoord capHeight = ((font->size / 3) * 2); // XXX HACK!
return NSToCoordRound(aValue.GetFloatValue() * (float)capHeight);
}
@ -255,7 +255,6 @@ nscoord CalcLength(const nsCSSValue& aValue,
#define SETCOORD_LH (SETCOORD_LENGTH | SETCOORD_INHERIT)
#define SETCOORD_AH (SETCOORD_AUTO | SETCOORD_INHERIT)
#define SETCOORD_LPH (SETCOORD_LP | SETCOORD_INHERIT)
#define SETCOORD_LPFHN (SETCOORD_LPH | SETCOORD_FACTOR | SETCOORD_NORMAL)
#define SETCOORD_LPAH (SETCOORD_LP | SETCOORD_AH)
#define SETCOORD_LPEH (SETCOORD_LP | SETCOORD_ENUMERATED | SETCOORD_INHERIT)
#define SETCOORD_LE (SETCOORD_LENGTH | SETCOORD_ENUMERATED)
@ -1631,8 +1630,9 @@ nsRuleNode::gComputeStyleDataFn[] = {
static void
SetFont(nsIPresContext* aPresContext, nsIStyleContext* aContext,
nscoord aMinFontSize, PRBool aUseDocumentFonts, PRBool aChromeOverride,
PRBool aIsGeneric, const nsCSSFont& aFontData, const nsFont& aDefaultFont,
nsStyleFont* aParentFont, nsStyleFont* aFont, PRBool& aInherited)
PRBool aIsGeneric, const nsCSSFont& aFontData,
const nsFont& aDefaultFont, const nsStyleFont* aParentFont,
nsStyleFont* aFont, PRBool& aInherited)
{
nsFont defaultVariableFont, defaultFixedFont;
aPresContext->GetDefaultFont(kPresContext_DefaultVariableFont_ID, defaultVariableFont);
@ -2032,7 +2032,7 @@ nsRuleNode::ComputeFontData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
const nsCSSFont& fontData = NS_STATIC_CAST(const nsCSSFont&, aData);
nsStyleFont* font = nsnull;
nsStyleFont* parentFont = font;
const nsStyleFont* parentFont = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2045,7 +2045,8 @@ nsRuleNode::ComputeFontData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentFont = (nsStyleFont*)parentContext->GetStyleData(eStyleStruct_Font);
parentFont = NS_STATIC_CAST(const nsStyleFont*,
parentContext->GetStyleData(eStyleStruct_Font));
if (parentFont)
font = new (mPresContext) nsStyleFont(*parentFont);
}
@ -2161,7 +2162,7 @@ nsRuleNode::ComputeTextData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
const nsCSSText& textData = NS_STATIC_CAST(const nsCSSText&, aData);
nsStyleText* text = nsnull;
nsStyleText* parentText = text;
const nsStyleText* parentText = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2174,29 +2175,32 @@ nsRuleNode::ComputeTextData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentText = (nsStyleText*)parentContext->GetStyleData(eStyleStruct_Text);
if (parentText) {
parentText = NS_STATIC_CAST(const nsStyleText*,
parentContext->GetStyleData(eStyleStruct_Text));
if (parentText)
text = new (mPresContext) nsStyleText(*parentText);
// Percentage line heights are not inherited. We need to change the value
// of line-height to inherit.
nsStyleUnit unit = text->mLineHeight.GetUnit();
if (unit != eStyleUnit_Normal && unit != eStyleUnit_Factor && unit != eStyleUnit_Coord)
text->mLineHeight.SetInheritValue();
}
}
}
if (!text)
text = parentText = new (mPresContext) nsStyleText();
parentText = text = new (mPresContext) nsStyleText();
// letter-spacing: normal, length, inherit
SetCoord(textData.mLetterSpacing, text->mLetterSpacing, parentText->mLetterSpacing,
SETCOORD_LH | SETCOORD_NORMAL, aContext, mPresContext, inherited);
// line-height: normal, number, length, percent, inherit
if (eCSSUnit_Percent == textData.mLineHeight.GetUnit()) {
aInherited = PR_TRUE;
const nsStyleFont* parentFont = NS_STATIC_CAST(const nsStyleFont*,
parentContext->GetStyleData(eStyleStruct_Font));
text->mLineHeight.SetCoordValue((nscoord)((float)(parentFont->mSize) *
textData.mLineHeight.GetPercentValue()));
} else
SetCoord(textData.mLineHeight, text->mLineHeight, parentText->mLineHeight,
SETCOORD_LPFHN, aContext, mPresContext, inherited);
SETCOORD_LH | SETCOORD_FACTOR | SETCOORD_NORMAL,
aContext, mPresContext, inherited);
// text-align: enum, string, inherit
if (eCSSUnit_Enumerated == textData.mTextAlign.GetUnit()) {
@ -2345,7 +2349,7 @@ nsRuleNode::ComputeUIData(nsStyleStruct* aStartData, const nsCSSStruct& aData,
const nsCSSUserInterface& uiData = NS_STATIC_CAST(const nsCSSUserInterface&, aData);
nsStyleUserInterface* ui = nsnull;
nsStyleUserInterface* parentUI = ui;
const nsStyleUserInterface* parentUI = nsnull;
PRBool inherited = aInherited;
if (aStartData)
@ -2358,14 +2362,15 @@ nsRuleNode::ComputeUIData(nsStyleStruct* aStartData, const nsCSSStruct& aData,
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentUI = (nsStyleUserInterface*)parentContext->GetStyleData(eStyleStruct_UserInterface);
parentUI = NS_STATIC_CAST(const nsStyleUserInterface*,
parentContext->GetStyleData(eStyleStruct_UserInterface));
if (parentUI)
ui = new (mPresContext) nsStyleUserInterface(*parentUI);
}
}
if (!ui)
ui = parentUI = new (mPresContext) nsStyleUserInterface();
parentUI = ui = new (mPresContext) nsStyleUserInterface();
// cursor: enum, auto, url, inherit
nsCSSValueList* list = uiData.mCursor;
@ -2460,10 +2465,11 @@ nsRuleNode::ComputeUIResetData(nsStyleStruct* aStartData, const nsCSSStruct& aDa
ui = new (mPresContext) nsStyleUIReset(*NS_STATIC_CAST(nsStyleUIReset*, aStartData));
else
ui = new (mPresContext) nsStyleUIReset();
nsStyleUIReset* parentUI = ui;
const nsStyleUIReset* parentUI = ui;
if (parentContext)
parentUI = (nsStyleUIReset*)parentContext->GetStyleData(eStyleStruct_UIReset);
parentUI = NS_STATIC_CAST(const nsStyleUIReset*,
parentContext->GetStyleData(eStyleStruct_UIReset));
PRBool inherited = aInherited;
// user-select: none, enum, inherit
@ -2543,10 +2549,11 @@ nsRuleNode::ComputeDisplayData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
display = new (mPresContext) nsStyleDisplay(*NS_STATIC_CAST(nsStyleDisplay*, aStartStruct));
else
display = new (mPresContext) nsStyleDisplay();
nsStyleDisplay* parentDisplay = display;
const nsStyleDisplay* parentDisplay = display;
if (parentContext)
parentDisplay = (nsStyleDisplay*)parentContext->GetStyleData(eStyleStruct_Display);
parentDisplay = NS_STATIC_CAST(const nsStyleDisplay*,
parentContext->GetStyleData(eStyleStruct_Display));
PRBool inherited = aInherited;
// display: enum, none, inherit
@ -2751,7 +2758,7 @@ nsRuleNode::ComputeVisibilityData(nsStyleStruct* aStartStruct, const nsCSSStruct
const nsCSSDisplay& displayData = NS_STATIC_CAST(const nsCSSDisplay&, aData);
nsStyleVisibility* visibility = nsnull;
nsStyleVisibility* parentVisibility = visibility;
const nsStyleVisibility* parentVisibility = visibility;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2764,14 +2771,15 @@ nsRuleNode::ComputeVisibilityData(nsStyleStruct* aStartStruct, const nsCSSStruct
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentVisibility = (nsStyleVisibility*)parentContext->GetStyleData(eStyleStruct_Visibility);
parentVisibility = NS_STATIC_CAST(const nsStyleVisibility*,
parentContext->GetStyleData(eStyleStruct_Visibility));
if (parentVisibility)
visibility = new (mPresContext) nsStyleVisibility(*parentVisibility);
}
}
if (!visibility)
visibility = parentVisibility = new (mPresContext) nsStyleVisibility(mPresContext);
parentVisibility = visibility = new (mPresContext) nsStyleVisibility(mPresContext);
// opacity: factor, percent, inherit
if (eCSSUnit_Percent == displayData.mOpacity.GetUnit()) {
@ -2845,7 +2853,7 @@ nsRuleNode::ComputeColorData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDa
const nsCSSColor& colorData = NS_STATIC_CAST(const nsCSSColor&, aData);
nsStyleColor* color = nsnull;
nsStyleColor* parentColor = color;
const nsStyleColor* parentColor = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2858,14 +2866,15 @@ nsRuleNode::ComputeColorData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDa
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentColor = (nsStyleColor*)parentContext->GetStyleData(eStyleStruct_Color);
parentColor = NS_STATIC_CAST(const nsStyleColor*,
parentContext->GetStyleData(eStyleStruct_Color));
if (parentColor)
color = new (mPresContext) nsStyleColor(*parentColor);
}
}
if (!color)
color = parentColor = new (mPresContext) nsStyleColor(mPresContext);
parentColor = color = new (mPresContext) nsStyleColor(mPresContext);
// color: color, string, inherit
SetColor(colorData.mColor, parentColor->mColor, mPresContext, color->mColor, inherited);
@ -2905,10 +2914,11 @@ nsRuleNode::ComputeBackgroundData(nsStyleStruct* aStartStruct, const nsCSSStruct
bg = new (mPresContext) nsStyleBackground(*NS_STATIC_CAST(nsStyleBackground*, aStartStruct));
else
bg = new (mPresContext) nsStyleBackground(mPresContext);
nsStyleBackground* parentBG = bg;
const nsStyleBackground* parentBG = bg;
if (parentContext)
parentBG = (nsStyleBackground*)parentContext->GetStyleData(eStyleStruct_Background);
parentBG = NS_STATIC_CAST(const nsStyleBackground*,
parentContext->GetStyleData(eStyleStruct_Background));
PRBool inherited = aInherited;
// background-color: color, string, enum (flags), inherit
@ -3063,10 +3073,11 @@ nsRuleNode::ComputeMarginData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
margin = new (mPresContext) nsStyleMargin(*NS_STATIC_CAST(nsStyleMargin*, aStartStruct));
else
margin = new (mPresContext) nsStyleMargin();
nsStyleMargin* parentMargin = margin;
const nsStyleMargin* parentMargin = margin;
if (parentContext)
parentMargin = (nsStyleMargin*)parentContext->GetStyleData(eStyleStruct_Margin);
parentMargin = NS_STATIC_CAST(const nsStyleMargin*,
parentContext->GetStyleData(eStyleStruct_Margin));
PRBool inherited = aInherited;
// margin: length, percent, auto, inherit
@ -3128,9 +3139,10 @@ nsRuleNode::ComputeBorderData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
else
border = new (mPresContext) nsStyleBorder(mPresContext);
nsStyleBorder* parentBorder = border;
const nsStyleBorder* parentBorder = border;
if (parentContext)
parentBorder = (nsStyleBorder*)parentContext->GetStyleData(eStyleStruct_Border);
parentBorder = NS_STATIC_CAST(const nsStyleBorder*,
parentContext->GetStyleData(eStyleStruct_Border));
PRBool inherited = aInherited;
// border-size: length, enum, inherit
@ -3375,9 +3387,10 @@ nsRuleNode::ComputePaddingData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
else
padding = new (mPresContext) nsStylePadding();
nsStylePadding* parentPadding = padding;
const nsStylePadding* parentPadding = padding;
if (parentContext)
parentPadding = (nsStylePadding*)parentContext->GetStyleData(eStyleStruct_Padding);
parentPadding = NS_STATIC_CAST(const nsStylePadding*,
parentContext->GetStyleData(eStyleStruct_Padding));
PRBool inherited = aInherited;
// padding: length, percent, inherit
@ -3439,9 +3452,10 @@ nsRuleNode::ComputeOutlineData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
else
outline = new (mPresContext) nsStyleOutline(mPresContext);
nsStyleOutline* parentOutline = outline;
const nsStyleOutline* parentOutline = outline;
if (parentContext)
parentOutline = (nsStyleOutline*)parentContext->GetStyleData(eStyleStruct_Outline);
parentOutline = NS_STATIC_CAST(const nsStyleOutline*,
parentContext->GetStyleData(eStyleStruct_Outline));
PRBool inherited = aInherited;
// outline-width: length, enum, inherit
@ -3503,7 +3517,7 @@ nsRuleNode::ComputeListData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
const nsCSSList& listData = NS_STATIC_CAST(const nsCSSList&, aData);
nsStyleList* list = nsnull;
nsStyleList* parentList = list;
const nsStyleList* parentList = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -3516,14 +3530,15 @@ nsRuleNode::ComputeListData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentList = (nsStyleList*)parentContext->GetStyleData(eStyleStruct_List);
parentList = NS_STATIC_CAST(const nsStyleList*,
parentContext->GetStyleData(eStyleStruct_List));
if (parentList)
list = new (mPresContext) nsStyleList(*parentList);
}
}
if (!list)
list = parentList = new (mPresContext) nsStyleList();
parentList = list = new (mPresContext) nsStyleList();
// list-style-type: enum, none, inherit
if (eCSSUnit_Enumerated == listData.mType.GetUnit()) {
@ -3594,9 +3609,10 @@ nsRuleNode::ComputePositionData(nsStyleStruct* aStartStruct, const nsCSSStruct&
else
pos = new (mPresContext) nsStylePosition();
nsStylePosition* parentPos = pos;
const nsStylePosition* parentPos = pos;
if (parentContext)
parentPos = (nsStylePosition*)parentContext->GetStyleData(eStyleStruct_Position);
parentPos = NS_STATIC_CAST(const nsStylePosition*,
parentContext->GetStyleData(eStyleStruct_Position));
PRBool inherited = aInherited;
// box offsets: length, percent, auto, inherit
@ -3701,9 +3717,10 @@ nsRuleNode::ComputeTableData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDa
else
table = new (mPresContext) nsStyleTable();
nsStyleTable* parentTable = table;
const nsStyleTable* parentTable = table;
if (parentContext)
parentTable = (nsStyleTable*)parentContext->GetStyleData(eStyleStruct_Table);
parentTable = NS_STATIC_CAST(const nsStyleTable*,
parentContext->GetStyleData(eStyleStruct_Table));
PRBool inherited = aInherited;
// table-layout: auto, enum, inherit
@ -3763,7 +3780,7 @@ nsRuleNode::ComputeTableBorderData(nsStyleStruct* aStartStruct, const nsCSSStruc
const nsCSSTable& tableData = NS_STATIC_CAST(const nsCSSTable&, aData);
nsStyleTableBorder* table = nsnull;
nsStyleTableBorder* parentTable = table;
const nsStyleTableBorder* parentTable = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -3776,14 +3793,15 @@ nsRuleNode::ComputeTableBorderData(nsStyleStruct* aStartStruct, const nsCSSStruc
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentTable = (nsStyleTableBorder*)parentContext->GetStyleData(eStyleStruct_TableBorder);
parentTable = NS_STATIC_CAST(const nsStyleTableBorder*,
parentContext->GetStyleData(eStyleStruct_TableBorder));
if (parentTable)
table = new (mPresContext) nsStyleTableBorder(*parentTable);
}
}
if (!table)
table = parentTable = new (mPresContext) nsStyleTableBorder(mPresContext);
parentTable = table = new (mPresContext) nsStyleTableBorder(mPresContext);
// border-collapse: enum, inherit
if (eCSSUnit_Enumerated == tableData.mBorderCollapse.GetUnit()) {
@ -3867,9 +3885,10 @@ nsRuleNode::ComputeContentData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
else
content = new (mPresContext) nsStyleContent();
nsStyleContent* parentContent = content;
const nsStyleContent* parentContent = content;
if (parentContext)
parentContent = (nsStyleContent*)parentContext->GetStyleData(eStyleStruct_Content);
parentContent = NS_STATIC_CAST(const nsStyleContent*,
parentContext->GetStyleData(eStyleStruct_Content));
PRBool inherited = aInherited;
// content: [string, url, counter, attr, enum]+, inherit
@ -4055,7 +4074,7 @@ nsRuleNode::ComputeQuotesData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
const nsCSSContent& contentData = NS_STATIC_CAST(const nsCSSContent&, aData);
nsStyleQuotes* quotes = nsnull;
nsStyleQuotes* parentQuotes = quotes;
const nsStyleQuotes* parentQuotes = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -4068,14 +4087,15 @@ nsRuleNode::ComputeQuotesData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentQuotes = (nsStyleQuotes*)parentContext->GetStyleData(eStyleStruct_Quotes);
parentQuotes = NS_STATIC_CAST(const nsStyleQuotes*,
parentContext->GetStyleData(eStyleStruct_Quotes));
if (parentQuotes)
quotes = new (mPresContext) nsStyleQuotes(*parentQuotes);
}
}
if (!quotes)
quotes = parentQuotes = new (mPresContext) nsStyleQuotes();
parentQuotes = quotes = new (mPresContext) nsStyleQuotes();
// quotes: [string string]+, none, inherit
PRUint32 count;
@ -4155,10 +4175,11 @@ nsRuleNode::ComputeXULData(nsStyleStruct* aStartStruct, const nsCSSStruct& aData
else
xul = new (mPresContext) nsStyleXUL();
nsStyleXUL* parentXUL = xul;
const nsStyleXUL* parentXUL = xul;
if (parentContext)
parentXUL = (nsStyleXUL*)parentContext->GetStyleData(eStyleStruct_XUL);
parentXUL = NS_STATIC_CAST(const nsStyleXUL*,
parentContext->GetStyleData(eStyleStruct_XUL));
PRBool inherited = aInherited;

Просмотреть файл

@ -2135,23 +2135,6 @@ nsHTMLReflowState::UseComputedHeight()
return useComputedHeight;
}
static nsIStyleContext*
GetNonInheritedLineHeightStyleContext(nsIStyleContext* aStyleContext)
{
nsIStyleContext* parentSC;
parentSC = aStyleContext->GetParent();
if (parentSC) {
const nsStyleText* text = (const nsStyleText*)
parentSC->GetStyleData(eStyleStruct_Text);
if (eStyleUnit_Inherit == text->mLineHeight.GetUnit()) {
nsIStyleContext* sc = GetNonInheritedLineHeightStyleContext(parentSC);
NS_RELEASE(parentSC);
return sc;
}
}
return parentSC;
}
static nscoord
ComputeLineHeight(nsIRenderingContext* aRenderingContext,
nsIStyleContext* aStyleContext)
@ -2168,30 +2151,16 @@ ComputeLineHeight(nsIRenderingContext* aRenderingContext,
(const nsStyleVisibility*)aStyleContext->GetStyleData(eStyleStruct_Visibility);
nsStyleUnit unit = text->mLineHeight.GetUnit();
if (eStyleUnit_Inherit == unit) {
// Inherit parents line-height value
nsCOMPtr<nsIStyleContext> parentSC =
getter_AddRefs(GetNonInheritedLineHeightStyleContext(aStyleContext));
if (parentSC) {
text = (const nsStyleText*) parentSC->GetStyleData(eStyleStruct_Text);
unit = text->mLineHeight.GetUnit();
if (eStyleUnit_Percent == unit) {
// For percent, we inherit the computed value so update the
// font to use the parent's font not our font.
font = (const nsStyleFont*) parentSC->GetStyleData(eStyleStruct_Font);
}
}
}
if (eStyleUnit_Coord == unit) {
// For length values just use the pre-computed value
lineHeight = text->mLineHeight.GetCoordValue();
}
else {
// For "normal", factor or percentage units the computed value of
// the line-height property is found by multiplying the factor by
// the font's <b>actual</b> em height. For "normal" we use the
// font's normal line height (em height + leading).
// For "normal" or factor units the computed value of the
// line-height property is found by multiplying the factor by the
// font's <b>actual</b> em height. For "normal" we use the font's
// normal line height (em height + leading).
nscoord emHeight = -1;
nscoord normalLineHeight = -1;
nsCOMPtr<nsIDeviceContext> deviceContext;
@ -2212,10 +2181,8 @@ ComputeLineHeight(nsIRenderingContext* aRenderingContext,
if (eStyleUnit_Factor == unit) {
factor = text->mLineHeight.GetFactorValue();
}
else if (eStyleUnit_Percent == unit) {
factor = text->mLineHeight.GetPercentValue();
}
else {
NS_ASSERTION(eStyleUnit_Normal == unit, "bad unit");
factor = (((float) normalLineHeight) / PR_MAX(1, emHeight));
}

Просмотреть файл

@ -2135,23 +2135,6 @@ nsHTMLReflowState::UseComputedHeight()
return useComputedHeight;
}
static nsIStyleContext*
GetNonInheritedLineHeightStyleContext(nsIStyleContext* aStyleContext)
{
nsIStyleContext* parentSC;
parentSC = aStyleContext->GetParent();
if (parentSC) {
const nsStyleText* text = (const nsStyleText*)
parentSC->GetStyleData(eStyleStruct_Text);
if (eStyleUnit_Inherit == text->mLineHeight.GetUnit()) {
nsIStyleContext* sc = GetNonInheritedLineHeightStyleContext(parentSC);
NS_RELEASE(parentSC);
return sc;
}
}
return parentSC;
}
static nscoord
ComputeLineHeight(nsIRenderingContext* aRenderingContext,
nsIStyleContext* aStyleContext)
@ -2168,30 +2151,16 @@ ComputeLineHeight(nsIRenderingContext* aRenderingContext,
(const nsStyleVisibility*)aStyleContext->GetStyleData(eStyleStruct_Visibility);
nsStyleUnit unit = text->mLineHeight.GetUnit();
if (eStyleUnit_Inherit == unit) {
// Inherit parents line-height value
nsCOMPtr<nsIStyleContext> parentSC =
getter_AddRefs(GetNonInheritedLineHeightStyleContext(aStyleContext));
if (parentSC) {
text = (const nsStyleText*) parentSC->GetStyleData(eStyleStruct_Text);
unit = text->mLineHeight.GetUnit();
if (eStyleUnit_Percent == unit) {
// For percent, we inherit the computed value so update the
// font to use the parent's font not our font.
font = (const nsStyleFont*) parentSC->GetStyleData(eStyleStruct_Font);
}
}
}
if (eStyleUnit_Coord == unit) {
// For length values just use the pre-computed value
lineHeight = text->mLineHeight.GetCoordValue();
}
else {
// For "normal", factor or percentage units the computed value of
// the line-height property is found by multiplying the factor by
// the font's <b>actual</b> em height. For "normal" we use the
// font's normal line height (em height + leading).
// For "normal" or factor units the computed value of the
// line-height property is found by multiplying the factor by the
// font's <b>actual</b> em height. For "normal" we use the font's
// normal line height (em height + leading).
nscoord emHeight = -1;
nscoord normalLineHeight = -1;
nsCOMPtr<nsIDeviceContext> deviceContext;
@ -2212,10 +2181,8 @@ ComputeLineHeight(nsIRenderingContext* aRenderingContext,
if (eStyleUnit_Factor == unit) {
factor = text->mLineHeight.GetFactorValue();
}
else if (eStyleUnit_Percent == unit) {
factor = text->mLineHeight.GetPercentValue();
}
else {
NS_ASSERTION(eStyleUnit_Normal == unit, "bad unit");
factor = (((float) normalLineHeight) / PR_MAX(1, emHeight));
}

Просмотреть файл

@ -186,7 +186,7 @@ nsString& Unquote(nsString& aString)
}
nscoord CalcLength(const nsCSSValue& aValue,
nsFont* aFont,
const nsFont* aFont,
nsIStyleContext* aStyleContext,
nsIPresContext* aPresContext,
PRBool& aInherited)
@ -200,18 +200,18 @@ nscoord CalcLength(const nsCSSValue& aValue,
case eCSSUnit_EM:
case eCSSUnit_Char: {
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
return NSToCoordRound(aValue.GetFloatValue() * (float)font->size);
// XXX scale against font metrics height instead?
}
case eCSSUnit_EN: {
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
return NSToCoordRound((aValue.GetFloatValue() * (float)font->size) / 2.0f);
}
case eCSSUnit_XHeight: {
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
nsIFontMetrics* fm;
aPresContext->GetMetricsFor(*font, &fm);
NS_ASSERTION(nsnull != fm, "can't get font metrics");
@ -228,7 +228,7 @@ nscoord CalcLength(const nsCSSValue& aValue,
case eCSSUnit_CapHeight: {
NS_NOTYETIMPLEMENTED("cap height unit");
aInherited = PR_TRUE;
nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
const nsFont* font = aStyleContext ? &(((nsStyleFont*)aStyleContext->GetStyleData(eStyleStruct_Font))->mFont) : aFont;
nscoord capHeight = ((font->size / 3) * 2); // XXX HACK!
return NSToCoordRound(aValue.GetFloatValue() * (float)capHeight);
}
@ -255,7 +255,6 @@ nscoord CalcLength(const nsCSSValue& aValue,
#define SETCOORD_LH (SETCOORD_LENGTH | SETCOORD_INHERIT)
#define SETCOORD_AH (SETCOORD_AUTO | SETCOORD_INHERIT)
#define SETCOORD_LPH (SETCOORD_LP | SETCOORD_INHERIT)
#define SETCOORD_LPFHN (SETCOORD_LPH | SETCOORD_FACTOR | SETCOORD_NORMAL)
#define SETCOORD_LPAH (SETCOORD_LP | SETCOORD_AH)
#define SETCOORD_LPEH (SETCOORD_LP | SETCOORD_ENUMERATED | SETCOORD_INHERIT)
#define SETCOORD_LE (SETCOORD_LENGTH | SETCOORD_ENUMERATED)
@ -1631,8 +1630,9 @@ nsRuleNode::gComputeStyleDataFn[] = {
static void
SetFont(nsIPresContext* aPresContext, nsIStyleContext* aContext,
nscoord aMinFontSize, PRBool aUseDocumentFonts, PRBool aChromeOverride,
PRBool aIsGeneric, const nsCSSFont& aFontData, const nsFont& aDefaultFont,
nsStyleFont* aParentFont, nsStyleFont* aFont, PRBool& aInherited)
PRBool aIsGeneric, const nsCSSFont& aFontData,
const nsFont& aDefaultFont, const nsStyleFont* aParentFont,
nsStyleFont* aFont, PRBool& aInherited)
{
nsFont defaultVariableFont, defaultFixedFont;
aPresContext->GetDefaultFont(kPresContext_DefaultVariableFont_ID, defaultVariableFont);
@ -2032,7 +2032,7 @@ nsRuleNode::ComputeFontData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
const nsCSSFont& fontData = NS_STATIC_CAST(const nsCSSFont&, aData);
nsStyleFont* font = nsnull;
nsStyleFont* parentFont = font;
const nsStyleFont* parentFont = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2045,7 +2045,8 @@ nsRuleNode::ComputeFontData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentFont = (nsStyleFont*)parentContext->GetStyleData(eStyleStruct_Font);
parentFont = NS_STATIC_CAST(const nsStyleFont*,
parentContext->GetStyleData(eStyleStruct_Font));
if (parentFont)
font = new (mPresContext) nsStyleFont(*parentFont);
}
@ -2161,7 +2162,7 @@ nsRuleNode::ComputeTextData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
const nsCSSText& textData = NS_STATIC_CAST(const nsCSSText&, aData);
nsStyleText* text = nsnull;
nsStyleText* parentText = text;
const nsStyleText* parentText = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2174,29 +2175,32 @@ nsRuleNode::ComputeTextData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentText = (nsStyleText*)parentContext->GetStyleData(eStyleStruct_Text);
if (parentText) {
parentText = NS_STATIC_CAST(const nsStyleText*,
parentContext->GetStyleData(eStyleStruct_Text));
if (parentText)
text = new (mPresContext) nsStyleText(*parentText);
// Percentage line heights are not inherited. We need to change the value
// of line-height to inherit.
nsStyleUnit unit = text->mLineHeight.GetUnit();
if (unit != eStyleUnit_Normal && unit != eStyleUnit_Factor && unit != eStyleUnit_Coord)
text->mLineHeight.SetInheritValue();
}
}
}
if (!text)
text = parentText = new (mPresContext) nsStyleText();
parentText = text = new (mPresContext) nsStyleText();
// letter-spacing: normal, length, inherit
SetCoord(textData.mLetterSpacing, text->mLetterSpacing, parentText->mLetterSpacing,
SETCOORD_LH | SETCOORD_NORMAL, aContext, mPresContext, inherited);
// line-height: normal, number, length, percent, inherit
if (eCSSUnit_Percent == textData.mLineHeight.GetUnit()) {
aInherited = PR_TRUE;
const nsStyleFont* parentFont = NS_STATIC_CAST(const nsStyleFont*,
parentContext->GetStyleData(eStyleStruct_Font));
text->mLineHeight.SetCoordValue((nscoord)((float)(parentFont->mSize) *
textData.mLineHeight.GetPercentValue()));
} else
SetCoord(textData.mLineHeight, text->mLineHeight, parentText->mLineHeight,
SETCOORD_LPFHN, aContext, mPresContext, inherited);
SETCOORD_LH | SETCOORD_FACTOR | SETCOORD_NORMAL,
aContext, mPresContext, inherited);
// text-align: enum, string, inherit
if (eCSSUnit_Enumerated == textData.mTextAlign.GetUnit()) {
@ -2345,7 +2349,7 @@ nsRuleNode::ComputeUIData(nsStyleStruct* aStartData, const nsCSSStruct& aData,
const nsCSSUserInterface& uiData = NS_STATIC_CAST(const nsCSSUserInterface&, aData);
nsStyleUserInterface* ui = nsnull;
nsStyleUserInterface* parentUI = ui;
const nsStyleUserInterface* parentUI = nsnull;
PRBool inherited = aInherited;
if (aStartData)
@ -2358,14 +2362,15 @@ nsRuleNode::ComputeUIData(nsStyleStruct* aStartData, const nsCSSStruct& aData,
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentUI = (nsStyleUserInterface*)parentContext->GetStyleData(eStyleStruct_UserInterface);
parentUI = NS_STATIC_CAST(const nsStyleUserInterface*,
parentContext->GetStyleData(eStyleStruct_UserInterface));
if (parentUI)
ui = new (mPresContext) nsStyleUserInterface(*parentUI);
}
}
if (!ui)
ui = parentUI = new (mPresContext) nsStyleUserInterface();
parentUI = ui = new (mPresContext) nsStyleUserInterface();
// cursor: enum, auto, url, inherit
nsCSSValueList* list = uiData.mCursor;
@ -2460,10 +2465,11 @@ nsRuleNode::ComputeUIResetData(nsStyleStruct* aStartData, const nsCSSStruct& aDa
ui = new (mPresContext) nsStyleUIReset(*NS_STATIC_CAST(nsStyleUIReset*, aStartData));
else
ui = new (mPresContext) nsStyleUIReset();
nsStyleUIReset* parentUI = ui;
const nsStyleUIReset* parentUI = ui;
if (parentContext)
parentUI = (nsStyleUIReset*)parentContext->GetStyleData(eStyleStruct_UIReset);
parentUI = NS_STATIC_CAST(const nsStyleUIReset*,
parentContext->GetStyleData(eStyleStruct_UIReset));
PRBool inherited = aInherited;
// user-select: none, enum, inherit
@ -2543,10 +2549,11 @@ nsRuleNode::ComputeDisplayData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
display = new (mPresContext) nsStyleDisplay(*NS_STATIC_CAST(nsStyleDisplay*, aStartStruct));
else
display = new (mPresContext) nsStyleDisplay();
nsStyleDisplay* parentDisplay = display;
const nsStyleDisplay* parentDisplay = display;
if (parentContext)
parentDisplay = (nsStyleDisplay*)parentContext->GetStyleData(eStyleStruct_Display);
parentDisplay = NS_STATIC_CAST(const nsStyleDisplay*,
parentContext->GetStyleData(eStyleStruct_Display));
PRBool inherited = aInherited;
// display: enum, none, inherit
@ -2751,7 +2758,7 @@ nsRuleNode::ComputeVisibilityData(nsStyleStruct* aStartStruct, const nsCSSStruct
const nsCSSDisplay& displayData = NS_STATIC_CAST(const nsCSSDisplay&, aData);
nsStyleVisibility* visibility = nsnull;
nsStyleVisibility* parentVisibility = visibility;
const nsStyleVisibility* parentVisibility = visibility;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2764,14 +2771,15 @@ nsRuleNode::ComputeVisibilityData(nsStyleStruct* aStartStruct, const nsCSSStruct
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentVisibility = (nsStyleVisibility*)parentContext->GetStyleData(eStyleStruct_Visibility);
parentVisibility = NS_STATIC_CAST(const nsStyleVisibility*,
parentContext->GetStyleData(eStyleStruct_Visibility));
if (parentVisibility)
visibility = new (mPresContext) nsStyleVisibility(*parentVisibility);
}
}
if (!visibility)
visibility = parentVisibility = new (mPresContext) nsStyleVisibility(mPresContext);
parentVisibility = visibility = new (mPresContext) nsStyleVisibility(mPresContext);
// opacity: factor, percent, inherit
if (eCSSUnit_Percent == displayData.mOpacity.GetUnit()) {
@ -2845,7 +2853,7 @@ nsRuleNode::ComputeColorData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDa
const nsCSSColor& colorData = NS_STATIC_CAST(const nsCSSColor&, aData);
nsStyleColor* color = nsnull;
nsStyleColor* parentColor = color;
const nsStyleColor* parentColor = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -2858,14 +2866,15 @@ nsRuleNode::ComputeColorData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDa
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentColor = (nsStyleColor*)parentContext->GetStyleData(eStyleStruct_Color);
parentColor = NS_STATIC_CAST(const nsStyleColor*,
parentContext->GetStyleData(eStyleStruct_Color));
if (parentColor)
color = new (mPresContext) nsStyleColor(*parentColor);
}
}
if (!color)
color = parentColor = new (mPresContext) nsStyleColor(mPresContext);
parentColor = color = new (mPresContext) nsStyleColor(mPresContext);
// color: color, string, inherit
SetColor(colorData.mColor, parentColor->mColor, mPresContext, color->mColor, inherited);
@ -2905,10 +2914,11 @@ nsRuleNode::ComputeBackgroundData(nsStyleStruct* aStartStruct, const nsCSSStruct
bg = new (mPresContext) nsStyleBackground(*NS_STATIC_CAST(nsStyleBackground*, aStartStruct));
else
bg = new (mPresContext) nsStyleBackground(mPresContext);
nsStyleBackground* parentBG = bg;
const nsStyleBackground* parentBG = bg;
if (parentContext)
parentBG = (nsStyleBackground*)parentContext->GetStyleData(eStyleStruct_Background);
parentBG = NS_STATIC_CAST(const nsStyleBackground*,
parentContext->GetStyleData(eStyleStruct_Background));
PRBool inherited = aInherited;
// background-color: color, string, enum (flags), inherit
@ -3063,10 +3073,11 @@ nsRuleNode::ComputeMarginData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
margin = new (mPresContext) nsStyleMargin(*NS_STATIC_CAST(nsStyleMargin*, aStartStruct));
else
margin = new (mPresContext) nsStyleMargin();
nsStyleMargin* parentMargin = margin;
const nsStyleMargin* parentMargin = margin;
if (parentContext)
parentMargin = (nsStyleMargin*)parentContext->GetStyleData(eStyleStruct_Margin);
parentMargin = NS_STATIC_CAST(const nsStyleMargin*,
parentContext->GetStyleData(eStyleStruct_Margin));
PRBool inherited = aInherited;
// margin: length, percent, auto, inherit
@ -3128,9 +3139,10 @@ nsRuleNode::ComputeBorderData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
else
border = new (mPresContext) nsStyleBorder(mPresContext);
nsStyleBorder* parentBorder = border;
const nsStyleBorder* parentBorder = border;
if (parentContext)
parentBorder = (nsStyleBorder*)parentContext->GetStyleData(eStyleStruct_Border);
parentBorder = NS_STATIC_CAST(const nsStyleBorder*,
parentContext->GetStyleData(eStyleStruct_Border));
PRBool inherited = aInherited;
// border-size: length, enum, inherit
@ -3375,9 +3387,10 @@ nsRuleNode::ComputePaddingData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
else
padding = new (mPresContext) nsStylePadding();
nsStylePadding* parentPadding = padding;
const nsStylePadding* parentPadding = padding;
if (parentContext)
parentPadding = (nsStylePadding*)parentContext->GetStyleData(eStyleStruct_Padding);
parentPadding = NS_STATIC_CAST(const nsStylePadding*,
parentContext->GetStyleData(eStyleStruct_Padding));
PRBool inherited = aInherited;
// padding: length, percent, inherit
@ -3439,9 +3452,10 @@ nsRuleNode::ComputeOutlineData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
else
outline = new (mPresContext) nsStyleOutline(mPresContext);
nsStyleOutline* parentOutline = outline;
const nsStyleOutline* parentOutline = outline;
if (parentContext)
parentOutline = (nsStyleOutline*)parentContext->GetStyleData(eStyleStruct_Outline);
parentOutline = NS_STATIC_CAST(const nsStyleOutline*,
parentContext->GetStyleData(eStyleStruct_Outline));
PRBool inherited = aInherited;
// outline-width: length, enum, inherit
@ -3503,7 +3517,7 @@ nsRuleNode::ComputeListData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
const nsCSSList& listData = NS_STATIC_CAST(const nsCSSList&, aData);
nsStyleList* list = nsnull;
nsStyleList* parentList = list;
const nsStyleList* parentList = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -3516,14 +3530,15 @@ nsRuleNode::ComputeListData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDat
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentList = (nsStyleList*)parentContext->GetStyleData(eStyleStruct_List);
parentList = NS_STATIC_CAST(const nsStyleList*,
parentContext->GetStyleData(eStyleStruct_List));
if (parentList)
list = new (mPresContext) nsStyleList(*parentList);
}
}
if (!list)
list = parentList = new (mPresContext) nsStyleList();
parentList = list = new (mPresContext) nsStyleList();
// list-style-type: enum, none, inherit
if (eCSSUnit_Enumerated == listData.mType.GetUnit()) {
@ -3594,9 +3609,10 @@ nsRuleNode::ComputePositionData(nsStyleStruct* aStartStruct, const nsCSSStruct&
else
pos = new (mPresContext) nsStylePosition();
nsStylePosition* parentPos = pos;
const nsStylePosition* parentPos = pos;
if (parentContext)
parentPos = (nsStylePosition*)parentContext->GetStyleData(eStyleStruct_Position);
parentPos = NS_STATIC_CAST(const nsStylePosition*,
parentContext->GetStyleData(eStyleStruct_Position));
PRBool inherited = aInherited;
// box offsets: length, percent, auto, inherit
@ -3701,9 +3717,10 @@ nsRuleNode::ComputeTableData(nsStyleStruct* aStartStruct, const nsCSSStruct& aDa
else
table = new (mPresContext) nsStyleTable();
nsStyleTable* parentTable = table;
const nsStyleTable* parentTable = table;
if (parentContext)
parentTable = (nsStyleTable*)parentContext->GetStyleData(eStyleStruct_Table);
parentTable = NS_STATIC_CAST(const nsStyleTable*,
parentContext->GetStyleData(eStyleStruct_Table));
PRBool inherited = aInherited;
// table-layout: auto, enum, inherit
@ -3763,7 +3780,7 @@ nsRuleNode::ComputeTableBorderData(nsStyleStruct* aStartStruct, const nsCSSStruc
const nsCSSTable& tableData = NS_STATIC_CAST(const nsCSSTable&, aData);
nsStyleTableBorder* table = nsnull;
nsStyleTableBorder* parentTable = table;
const nsStyleTableBorder* parentTable = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -3776,14 +3793,15 @@ nsRuleNode::ComputeTableBorderData(nsStyleStruct* aStartStruct, const nsCSSStruc
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentTable = (nsStyleTableBorder*)parentContext->GetStyleData(eStyleStruct_TableBorder);
parentTable = NS_STATIC_CAST(const nsStyleTableBorder*,
parentContext->GetStyleData(eStyleStruct_TableBorder));
if (parentTable)
table = new (mPresContext) nsStyleTableBorder(*parentTable);
}
}
if (!table)
table = parentTable = new (mPresContext) nsStyleTableBorder(mPresContext);
parentTable = table = new (mPresContext) nsStyleTableBorder(mPresContext);
// border-collapse: enum, inherit
if (eCSSUnit_Enumerated == tableData.mBorderCollapse.GetUnit()) {
@ -3867,9 +3885,10 @@ nsRuleNode::ComputeContentData(nsStyleStruct* aStartStruct, const nsCSSStruct& a
else
content = new (mPresContext) nsStyleContent();
nsStyleContent* parentContent = content;
const nsStyleContent* parentContent = content;
if (parentContext)
parentContent = (nsStyleContent*)parentContext->GetStyleData(eStyleStruct_Content);
parentContent = NS_STATIC_CAST(const nsStyleContent*,
parentContext->GetStyleData(eStyleStruct_Content));
PRBool inherited = aInherited;
// content: [string, url, counter, attr, enum]+, inherit
@ -4055,7 +4074,7 @@ nsRuleNode::ComputeQuotesData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
const nsCSSContent& contentData = NS_STATIC_CAST(const nsCSSContent&, aData);
nsStyleQuotes* quotes = nsnull;
nsStyleQuotes* parentQuotes = quotes;
const nsStyleQuotes* parentQuotes = nsnull;
PRBool inherited = aInherited;
if (aStartStruct)
@ -4068,14 +4087,15 @@ nsRuleNode::ComputeQuotesData(nsStyleStruct* aStartStruct, const nsCSSStruct& aD
// with inherited vals from parent.
inherited = PR_TRUE;
if (parentContext)
parentQuotes = (nsStyleQuotes*)parentContext->GetStyleData(eStyleStruct_Quotes);
parentQuotes = NS_STATIC_CAST(const nsStyleQuotes*,
parentContext->GetStyleData(eStyleStruct_Quotes));
if (parentQuotes)
quotes = new (mPresContext) nsStyleQuotes(*parentQuotes);
}
}
if (!quotes)
quotes = parentQuotes = new (mPresContext) nsStyleQuotes();
parentQuotes = quotes = new (mPresContext) nsStyleQuotes();
// quotes: [string string]+, none, inherit
PRUint32 count;
@ -4155,10 +4175,11 @@ nsRuleNode::ComputeXULData(nsStyleStruct* aStartStruct, const nsCSSStruct& aData
else
xul = new (mPresContext) nsStyleXUL();
nsStyleXUL* parentXUL = xul;
const nsStyleXUL* parentXUL = xul;
if (parentContext)
parentXUL = (nsStyleXUL*)parentContext->GetStyleData(eStyleStruct_XUL);
parentXUL = NS_STATIC_CAST(const nsStyleXUL*,
parentContext->GetStyleData(eStyleStruct_XUL));
PRBool inherited = aInherited;