зеркало из https://github.com/mozilla/gecko-dev.git
Fix difference calculations for the border struct some more. Bug 290362,
r+sr=dbaron, a=asa
This commit is contained in:
Родитель
3e92cbf95d
Коммит
79d691d1f0
|
@ -537,32 +537,34 @@ nsChangeHint nsStyleBorder::CalcDifference(const nsStyleBorder& aOther) const
|
||||||
{
|
{
|
||||||
if ((mBorder == aOther.mBorder) &&
|
if ((mBorder == aOther.mBorder) &&
|
||||||
(mFloatEdge == aOther.mFloatEdge)) {
|
(mFloatEdge == aOther.mFloatEdge)) {
|
||||||
|
// Note that mBorderStyle stores not only the border style but also
|
||||||
|
// color-related flags. So while it's OK to compare entries in
|
||||||
|
// mBorderStyle directly for purposes of finding out whether something at
|
||||||
|
// all changed, any time we want to work with actual border styles we
|
||||||
|
// should use GetBorderStyle().
|
||||||
|
PRBool hasVisualChange = PR_FALSE;
|
||||||
NS_FOR_CSS_SIDES(ix) {
|
NS_FOR_CSS_SIDES(ix) {
|
||||||
if ((mBorderStyle[ix] != aOther.mBorderStyle[ix]) ||
|
if ((mBorderStyle[ix] != aOther.mBorderStyle[ix]) ||
|
||||||
(mBorderColor[ix] != aOther.mBorderColor[ix])) {
|
(mBorderColor[ix] != aOther.mBorderColor[ix])) {
|
||||||
if (mBorderStyle[ix] != aOther.mBorderStyle[ix] &&
|
if (GetBorderStyle(ix) != aOther.GetBorderStyle(ix) &&
|
||||||
(NS_STYLE_BORDER_STYLE_NONE ==
|
(NS_STYLE_BORDER_STYLE_NONE == GetBorderStyle(ix) ||
|
||||||
(mBorderStyle[ix] & BORDER_STYLE_MASK) ||
|
NS_STYLE_BORDER_STYLE_NONE == aOther.GetBorderStyle(ix) ||
|
||||||
NS_STYLE_BORDER_STYLE_NONE ==
|
NS_STYLE_BORDER_STYLE_HIDDEN == GetBorderStyle(ix) || // bug 45754
|
||||||
(aOther.mBorderStyle[ix] & BORDER_STYLE_MASK) ||
|
NS_STYLE_BORDER_STYLE_HIDDEN == aOther.GetBorderStyle(ix))) {
|
||||||
NS_STYLE_BORDER_STYLE_HIDDEN ==
|
|
||||||
(mBorderStyle[ix] & BORDER_STYLE_MASK) || // bug 45754
|
|
||||||
NS_STYLE_BORDER_STYLE_HIDDEN ==
|
|
||||||
(aOther.mBorderStyle[ix] & BORDER_STYLE_MASK))) {
|
|
||||||
return NS_STYLE_HINT_REFLOW; // border on or off
|
return NS_STYLE_HINT_REFLOW; // border on or off
|
||||||
}
|
}
|
||||||
return NS_STYLE_HINT_VISUAL;
|
hasVisualChange = PR_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mBorderRadius != aOther.mBorderRadius) {
|
if (hasVisualChange ||
|
||||||
return NS_STYLE_HINT_VISUAL;
|
mBorderRadius != aOther.mBorderRadius ||
|
||||||
}
|
!mBorderColors != !aOther.mBorderColors) {
|
||||||
if (mBorderColors && !aOther.mBorderColors ||
|
|
||||||
!mBorderColors && aOther.mBorderColors) {
|
|
||||||
return NS_STYLE_HINT_VISUAL;
|
return NS_STYLE_HINT_VISUAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mBorderColors && aOther.mBorderColors) {
|
// Note that at this point if mBorderColors is non-null so is
|
||||||
|
// aOther.mBorderColors
|
||||||
|
if (mBorderColors) {
|
||||||
NS_FOR_CSS_SIDES(ix) {
|
NS_FOR_CSS_SIDES(ix) {
|
||||||
if (mBorderColors[ix] && !aOther.mBorderColors[ix] ||
|
if (mBorderColors[ix] && !aOther.mBorderColors[ix] ||
|
||||||
!mBorderColors[ix] && aOther.mBorderColors[ix]) {
|
!mBorderColors[ix] && aOther.mBorderColors[ix]) {
|
||||||
|
|
|
@ -450,12 +450,6 @@ struct nsStyleBorder: public nsStyleStruct {
|
||||||
mBorderStyle[aSide] |= BORDER_COLOR_FOREGROUND;
|
mBorderStyle[aSide] |= BORDER_COLOR_FOREGROUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnsetBorderColor(PRUint8 aSide)
|
|
||||||
{
|
|
||||||
NS_ASSERTION(aSide <= NS_SIDE_LEFT, "bad side");
|
|
||||||
mBorderStyle[aSide] &= BORDER_STYLE_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX these are deprecated methods
|
// XXX these are deprecated methods
|
||||||
void CalcBorderFor(const nsIFrame* aFrame, nsMargin& aBorder) const;
|
void CalcBorderFor(const nsIFrame* aFrame, nsMargin& aBorder) const;
|
||||||
void CalcBorderFor(const nsIFrame* aFrame, PRUint8 aSide, nscoord& aWidth) const;
|
void CalcBorderFor(const nsIFrame* aFrame, PRUint8 aSide, nscoord& aWidth) const;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче