Bug 212366. Make '-moz-opacity' behave like CSS3 opacity: it does not inherit by default, and it composites the element and all its children as a group. r+sr=dbaron

This commit is contained in:
uid502 2003-11-01 22:34:59 +00:00
Родитель ea9b76f64c
Коммит f60aa658cf
21 изменённых файлов: 508 добавлений и 488 удалений

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

@ -2509,6 +2509,15 @@ nsRuleNode::ComputeDisplayData(nsStyleStruct* aStartStruct,
parentDisplay = parentContext->GetStyleDisplay();
PRBool inherited = aInherited;
// opacity: factor, inherit
if (eCSSUnit_Number == displayData.mOpacity.GetUnit()) {
display->mOpacity = displayData.mOpacity.GetFloatValue();
}
else if (eCSSUnit_Inherit == displayData.mOpacity.GetUnit()) {
inherited = PR_TRUE;
display->mOpacity = parentDisplay->mOpacity;
}
// display: enum, none, inherit
if (eCSSUnit_Enumerated == displayData.mDisplay.GetUnit()) {
display->mDisplay = displayData.mDisplay.GetIntValue();
@ -2769,15 +2778,6 @@ nsRuleNode::ComputeVisibilityData(nsStyleStruct* aStartStruct,
if (!parentVisibility)
parentVisibility = visibility;
// opacity: factor, inherit
if (eCSSUnit_Number == displayData.mOpacity.GetUnit()) {
visibility->mOpacity = displayData.mOpacity.GetFloatValue();
}
else if (eCSSUnit_Inherit == displayData.mOpacity.GetUnit()) {
inherited = PR_TRUE;
visibility->mOpacity = parentVisibility->mOpacity;
}
// direction: enum, inherit
if (eCSSUnit_Enumerated == displayData.mDirection.GetUnit()) {
visibility->mDirection = displayData.mDirection.GetIntValue();

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

@ -711,9 +711,10 @@ void nsStyleContext::DumpRegressionData(nsIPresContext* aPresContext, FILE* out,
// DISPLAY
IndentBy(out,aIndent);
const nsStyleDisplay* disp = GetStyleDisplay();
fprintf(out, "<display data=\"%d %d %d %d %d %d %d %d %ld %ld %ld %ld %s\" />\n",
fprintf(out, "<display data=\"%d %d %f %d %d %d %d %d %d %ld %ld %ld %ld %s\" />\n",
(int)disp->mPosition,
(int)disp->mDisplay,
(float)disp->mOpacity,
(int)disp->mFloats,
(int)disp->mBreakType,
(int)disp->mBreakBefore,
@ -730,10 +731,9 @@ void nsStyleContext::DumpRegressionData(nsIPresContext* aPresContext, FILE* out,
// VISIBILITY
IndentBy(out,aIndent);
const nsStyleVisibility* vis = GetStyleVisibility();
fprintf(out, "<visibility data=\"%d %d %f\" />\n",
fprintf(out, "<visibility data=\"%d %d\" />\n",
(int)vis->mDirection,
(int)vis->mVisible,
(float)vis->mOpacity
(int)vis->mVisible
);
// TABLE

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

@ -460,12 +460,11 @@ nsComputedDOMStyle::GetOpacity(nsIFrame *aFrame,
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleVisibility *visibility = nsnull;
GetStyleData(eStyleStruct_Visibility, (const nsStyleStruct*&)visibility,
aFrame);
const nsStyleDisplay *display = nsnull;
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display, aFrame);
if (visibility) {
val->SetNumber(visibility->mOpacity);
if (display) {
val->SetNumber(display->mOpacity);
} else {
val->SetNumber(1.0f);
}

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

@ -162,7 +162,6 @@ CSSDisablePropsRule::CommonMapRuleInfoInto(nsRuleData* aData)
nsCSSValue inherit(eCSSUnit_Inherit);
aData->mDisplayData->mVisibility = inherit;
aData->mDisplayData->mDirection = inherit;
aData->mDisplayData->mOpacity = inherit;
}
if (aData->mSID == eStyleStruct_Display) {
@ -175,6 +174,9 @@ CSSDisablePropsRule::CommonMapRuleInfoInto(nsRuleData* aData)
aData->mDisplayData->mClip.mBottom = autovalue;
aData->mDisplayData->mClip.mLeft = autovalue;
nsCSSValue one(1.0f, eCSSUnit_Number);
aData->mDisplayData->mOpacity = one;
nsCSSValue inlinevalue(NS_STYLE_DISPLAY_INLINE, eCSSUnit_Enumerated);
aData->mDisplayData->mDisplay = inlinevalue;

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

@ -362,7 +362,7 @@ CSS_PROP_POSITION(max-height, max_height, MaxHeight, Position, mMaxHeight, eCSST
CSS_PROP_POSITION(max-width, max_width, MaxWidth, Position, mMaxWidth, eCSSType_Value, PR_TRUE)
CSS_PROP_POSITION(min-height, min_height, MinHeight, Position, mMinHeight, eCSSType_Value, PR_TRUE)
CSS_PROP_POSITION(min-width, min_width, MinWidth, Position, mMinWidth, eCSSType_Value, PR_TRUE)
CSS_PROP_VISIBILITY(-moz-opacity, opacity, MozOpacity, Display, mOpacity, eCSSType_Value, PR_FALSE) // XXX bug 3935
CSS_PROP_DISPLAY(-moz-opacity, opacity, MozOpacity, Display, mOpacity, eCSSType_Value, PR_FALSE) // XXX bug 3935
CSS_PROP_BACKENDONLY(orphans, orphans, Orphans, Breaks, mOrphans, eCSSType_Value, PR_FALSE)
CSS_PROP_NOTIMPLEMENTED(outline, outline, Outline)
CSS_PROP_NOTIMPLEMENTED(outline-color, outline_color, OutlineColor)

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

@ -702,7 +702,6 @@ struct nsStyleVisibility : public nsStyleStruct {
PRUint8 mDirection; // [inherited] see nsStyleConsts.h NS_STYLE_DIRECTION_*
PRUint8 mVisible; // [inherited]
nsCOMPtr<nsILanguageAtom> mLanguage; // [inherited]
float mOpacity; // [inherited]
PRBool IsVisible() const {
return (mVisible == NS_STYLE_VISIBILITY_VISIBLE);
@ -742,6 +741,7 @@ struct nsStyleDisplay : public nsStyleStruct {
#else
nsRect mClip; // [reset] offsets from upper-left border edge
#endif
float mOpacity; // [reset]
PRUint8 mDisplay; // [reset] see nsStyleConsts.h NS_STYLE_DISPLAY_*
PRUint8 mOriginalDisplay; // [reset] saved mDisplay for position:absolute/fixed
PRUint8 mAppearance; // [reset]
@ -751,7 +751,6 @@ struct nsStyleDisplay : public nsStyleStruct {
PRPackedBool mBreakBefore; // [reset]
PRPackedBool mBreakAfter; // [reset]
PRUint8 mOverflow; // [reset] see nsStyleConsts.h
PRUint8 mClipFlags; // [reset] see nsStyleConsts.h
PRBool IsBlockLevel() const {return (NS_STYLE_DISPLAY_BLOCK == mDisplay) ||

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

@ -1068,6 +1068,7 @@ nsStyleDisplay::nsStyleDisplay()
mOverflow = NS_STYLE_OVERFLOW_VISIBLE;
mClipFlags = NS_STYLE_CLIP_AUTO;
mClip.SetRect(0,0,0,0);
mOpacity = 1.0f;
}
nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
@ -1084,6 +1085,7 @@ nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
mOverflow = aSource.mOverflow;
mClipFlags = aSource.mClipFlags;
mClip = aSource.mClip;
mOpacity = aSource.mOpacity;
}
nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
@ -1094,7 +1096,10 @@ nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
|| mPosition != aOther.mPosition
|| mDisplay != aOther.mDisplay
|| mFloats != aOther.mFloats
|| mOverflow != aOther.mOverflow)
|| mOverflow != aOther.mOverflow
// might need to create a view to handle change from 1.0 to partial opacity
|| (mOpacity != aOther.mOpacity
&& ((mOpacity < 1.0) != (aOther.mOpacity < 1.0))))
NS_UpdateHint(hint, nsChangeHint_ReconstructFrame);
// XXX the following is conservative, for now: changing float breaking shouldn't
@ -1106,7 +1111,8 @@ nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
NS_UpdateHint(hint, NS_CombineHint(nsChangeHint_ReflowFrame, nsChangeHint_RepaintFrame));
if (mClipFlags != aOther.mClipFlags
|| mClip != aOther.mClip)
|| mClip != aOther.mClip
|| mOpacity != aOther.mOpacity)
NS_UpdateHint(hint, nsChangeHint_SyncFrameView);
return hint;
@ -1127,7 +1133,6 @@ nsStyleVisibility::nsStyleVisibility(nsIPresContext* aPresContext)
aPresContext->GetLanguage(getter_AddRefs(mLanguage));
mVisible = NS_STYLE_VISIBILITY_VISIBLE;
mOpacity = 1.0f;
}
nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
@ -1135,23 +1140,14 @@ nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
mDirection = aSource.mDirection;
mVisible = aSource.mVisible;
mLanguage = aSource.mLanguage;
mOpacity = aSource.mOpacity;
}
nsChangeHint nsStyleVisibility::CalcDifference(const nsStyleVisibility& aOther) const
{
if (mOpacity != aOther.mOpacity
&& ((mOpacity < 1.0) != (aOther.mOpacity < 1.0)))
// might need to create a view to handle change from 1.0 to partial opacity
return NS_STYLE_HINT_FRAMECHANGE;
if ((mDirection == aOther.mDirection) &&
(mLanguage == aOther.mLanguage)) {
if ((mVisible == aOther.mVisible)) {
if (mOpacity == aOther.mOpacity)
return NS_STYLE_HINT_NONE;
else
return NS_STYLE_HINT_VISUAL;
}
if ((mVisible != aOther.mVisible) &&
((NS_STYLE_VISIBILITY_COLLAPSE == mVisible) ||

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

@ -450,8 +450,7 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext* aPresContext,
SetView(view);
// set the opacity
viewMan->SetViewOpacity(view, GetStyleColor()->mOpacity);
viewMan->SetViewOpacity(view, GetStyleDisplay()->mOpacity);
}
mDidInit = PR_TRUE;
}

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

@ -798,13 +798,15 @@ nsContainerFrame::SyncFrameViewProperties(nsIPresContext* aPresContext,
aStyleContext = aFrame->GetStyleContext();
}
const nsStyleVisibility* vis = aStyleContext->GetStyleVisibility();
const nsStyleDisplay* display = aStyleContext->GetStyleDisplay();
// Set the view's opacity
vm->SetViewOpacity(aView, vis->mOpacity);
vm->SetViewOpacity(aView, display->mOpacity);
// Make sure visibility is correct
if (0 == (aFlags & NS_FRAME_NO_VISIBILITY)) {
const nsStyleVisibility* vis = aStyleContext->GetStyleVisibility();
// See if the view should be hidden or visible
PRBool viewIsVisible = PR_TRUE;
@ -834,7 +836,6 @@ nsContainerFrame::SyncFrameViewProperties(nsIPresContext* aPresContext,
nsViewVisibility_kHide);
}
const nsStyleDisplay* display = aStyleContext->GetStyleDisplay();
// See if the frame is being relatively positioned or absolutely
// positioned
PRBool isTopMostView = display->IsPositioned();
@ -860,9 +861,8 @@ PRBool
nsContainerFrame::FrameNeedsView(nsIFrame* aFrame)
{
nsStyleContext* sc = aFrame->GetStyleContext();
const nsStyleVisibility* vis = sc->GetStyleVisibility();
if (vis->mOpacity != 1.0f) {
const nsStyleDisplay* display = sc->GetStyleDisplay();
if (display->mOpacity != 1.0f) {
return PR_TRUE;
}
@ -877,8 +877,6 @@ nsContainerFrame::FrameNeedsView(nsIFrame* aFrame)
return PR_TRUE;
}
const nsStyleDisplay* display = sc->GetStyleDisplay();
if (NS_STYLE_POSITION_RELATIVE == display->mPosition) {
return PR_TRUE;
} else if (display->IsAbsolutelyPositioned()) {

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

@ -798,13 +798,15 @@ nsContainerFrame::SyncFrameViewProperties(nsIPresContext* aPresContext,
aStyleContext = aFrame->GetStyleContext();
}
const nsStyleVisibility* vis = aStyleContext->GetStyleVisibility();
const nsStyleDisplay* display = aStyleContext->GetStyleDisplay();
// Set the view's opacity
vm->SetViewOpacity(aView, vis->mOpacity);
vm->SetViewOpacity(aView, display->mOpacity);
// Make sure visibility is correct
if (0 == (aFlags & NS_FRAME_NO_VISIBILITY)) {
const nsStyleVisibility* vis = aStyleContext->GetStyleVisibility();
// See if the view should be hidden or visible
PRBool viewIsVisible = PR_TRUE;
@ -834,7 +836,6 @@ nsContainerFrame::SyncFrameViewProperties(nsIPresContext* aPresContext,
nsViewVisibility_kHide);
}
const nsStyleDisplay* display = aStyleContext->GetStyleDisplay();
// See if the frame is being relatively positioned or absolutely
// positioned
PRBool isTopMostView = display->IsPositioned();
@ -860,9 +861,8 @@ PRBool
nsContainerFrame::FrameNeedsView(nsIFrame* aFrame)
{
nsStyleContext* sc = aFrame->GetStyleContext();
const nsStyleVisibility* vis = sc->GetStyleVisibility();
if (vis->mOpacity != 1.0f) {
const nsStyleDisplay* display = sc->GetStyleDisplay();
if (display->mOpacity != 1.0f) {
return PR_TRUE;
}
@ -877,8 +877,6 @@ nsContainerFrame::FrameNeedsView(nsIFrame* aFrame)
return PR_TRUE;
}
const nsStyleDisplay* display = sc->GetStyleDisplay();
if (NS_STYLE_POSITION_RELATIVE == display->mPosition) {
return PR_TRUE;
} else if (display->IsAbsolutelyPositioned()) {

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

@ -450,8 +450,7 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext* aPresContext,
SetView(view);
// set the opacity
viewMan->SetViewOpacity(view, GetStyleColor()->mOpacity);
viewMan->SetViewOpacity(view, GetStyleDisplay()->mOpacity);
}
mDidInit = PR_TRUE;
}

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

@ -362,7 +362,7 @@ CSS_PROP_POSITION(max-height, max_height, MaxHeight, Position, mMaxHeight, eCSST
CSS_PROP_POSITION(max-width, max_width, MaxWidth, Position, mMaxWidth, eCSSType_Value, PR_TRUE)
CSS_PROP_POSITION(min-height, min_height, MinHeight, Position, mMinHeight, eCSSType_Value, PR_TRUE)
CSS_PROP_POSITION(min-width, min_width, MinWidth, Position, mMinWidth, eCSSType_Value, PR_TRUE)
CSS_PROP_VISIBILITY(-moz-opacity, opacity, MozOpacity, Display, mOpacity, eCSSType_Value, PR_FALSE) // XXX bug 3935
CSS_PROP_DISPLAY(-moz-opacity, opacity, MozOpacity, Display, mOpacity, eCSSType_Value, PR_FALSE) // XXX bug 3935
CSS_PROP_BACKENDONLY(orphans, orphans, Orphans, Breaks, mOrphans, eCSSType_Value, PR_FALSE)
CSS_PROP_NOTIMPLEMENTED(outline, outline, Outline)
CSS_PROP_NOTIMPLEMENTED(outline-color, outline_color, OutlineColor)

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

@ -460,12 +460,11 @@ nsComputedDOMStyle::GetOpacity(nsIFrame *aFrame,
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleVisibility *visibility = nsnull;
GetStyleData(eStyleStruct_Visibility, (const nsStyleStruct*&)visibility,
aFrame);
const nsStyleDisplay *display = nsnull;
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display, aFrame);
if (visibility) {
val->SetNumber(visibility->mOpacity);
if (display) {
val->SetNumber(display->mOpacity);
} else {
val->SetNumber(1.0f);
}

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

@ -162,7 +162,6 @@ CSSDisablePropsRule::CommonMapRuleInfoInto(nsRuleData* aData)
nsCSSValue inherit(eCSSUnit_Inherit);
aData->mDisplayData->mVisibility = inherit;
aData->mDisplayData->mDirection = inherit;
aData->mDisplayData->mOpacity = inherit;
}
if (aData->mSID == eStyleStruct_Display) {
@ -175,6 +174,9 @@ CSSDisablePropsRule::CommonMapRuleInfoInto(nsRuleData* aData)
aData->mDisplayData->mClip.mBottom = autovalue;
aData->mDisplayData->mClip.mLeft = autovalue;
nsCSSValue one(1.0f, eCSSUnit_Number);
aData->mDisplayData->mOpacity = one;
nsCSSValue inlinevalue(NS_STYLE_DISPLAY_INLINE, eCSSUnit_Enumerated);
aData->mDisplayData->mDisplay = inlinevalue;

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

@ -2509,6 +2509,15 @@ nsRuleNode::ComputeDisplayData(nsStyleStruct* aStartStruct,
parentDisplay = parentContext->GetStyleDisplay();
PRBool inherited = aInherited;
// opacity: factor, inherit
if (eCSSUnit_Number == displayData.mOpacity.GetUnit()) {
display->mOpacity = displayData.mOpacity.GetFloatValue();
}
else if (eCSSUnit_Inherit == displayData.mOpacity.GetUnit()) {
inherited = PR_TRUE;
display->mOpacity = parentDisplay->mOpacity;
}
// display: enum, none, inherit
if (eCSSUnit_Enumerated == displayData.mDisplay.GetUnit()) {
display->mDisplay = displayData.mDisplay.GetIntValue();
@ -2769,15 +2778,6 @@ nsRuleNode::ComputeVisibilityData(nsStyleStruct* aStartStruct,
if (!parentVisibility)
parentVisibility = visibility;
// opacity: factor, inherit
if (eCSSUnit_Number == displayData.mOpacity.GetUnit()) {
visibility->mOpacity = displayData.mOpacity.GetFloatValue();
}
else if (eCSSUnit_Inherit == displayData.mOpacity.GetUnit()) {
inherited = PR_TRUE;
visibility->mOpacity = parentVisibility->mOpacity;
}
// direction: enum, inherit
if (eCSSUnit_Enumerated == displayData.mDirection.GetUnit()) {
visibility->mDirection = displayData.mDirection.GetIntValue();

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

@ -711,9 +711,10 @@ void nsStyleContext::DumpRegressionData(nsIPresContext* aPresContext, FILE* out,
// DISPLAY
IndentBy(out,aIndent);
const nsStyleDisplay* disp = GetStyleDisplay();
fprintf(out, "<display data=\"%d %d %d %d %d %d %d %d %ld %ld %ld %ld %s\" />\n",
fprintf(out, "<display data=\"%d %d %f %d %d %d %d %d %d %ld %ld %ld %ld %s\" />\n",
(int)disp->mPosition,
(int)disp->mDisplay,
(float)disp->mOpacity,
(int)disp->mFloats,
(int)disp->mBreakType,
(int)disp->mBreakBefore,
@ -730,10 +731,9 @@ void nsStyleContext::DumpRegressionData(nsIPresContext* aPresContext, FILE* out,
// VISIBILITY
IndentBy(out,aIndent);
const nsStyleVisibility* vis = GetStyleVisibility();
fprintf(out, "<visibility data=\"%d %d %f\" />\n",
fprintf(out, "<visibility data=\"%d %d\" />\n",
(int)vis->mDirection,
(int)vis->mVisible,
(float)vis->mOpacity
(int)vis->mVisible
);
// TABLE

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

@ -1068,6 +1068,7 @@ nsStyleDisplay::nsStyleDisplay()
mOverflow = NS_STYLE_OVERFLOW_VISIBLE;
mClipFlags = NS_STYLE_CLIP_AUTO;
mClip.SetRect(0,0,0,0);
mOpacity = 1.0f;
}
nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
@ -1084,6 +1085,7 @@ nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
mOverflow = aSource.mOverflow;
mClipFlags = aSource.mClipFlags;
mClip = aSource.mClip;
mOpacity = aSource.mOpacity;
}
nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
@ -1094,7 +1096,10 @@ nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
|| mPosition != aOther.mPosition
|| mDisplay != aOther.mDisplay
|| mFloats != aOther.mFloats
|| mOverflow != aOther.mOverflow)
|| mOverflow != aOther.mOverflow
// might need to create a view to handle change from 1.0 to partial opacity
|| (mOpacity != aOther.mOpacity
&& ((mOpacity < 1.0) != (aOther.mOpacity < 1.0))))
NS_UpdateHint(hint, nsChangeHint_ReconstructFrame);
// XXX the following is conservative, for now: changing float breaking shouldn't
@ -1106,7 +1111,8 @@ nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
NS_UpdateHint(hint, NS_CombineHint(nsChangeHint_ReflowFrame, nsChangeHint_RepaintFrame));
if (mClipFlags != aOther.mClipFlags
|| mClip != aOther.mClip)
|| mClip != aOther.mClip
|| mOpacity != aOther.mOpacity)
NS_UpdateHint(hint, nsChangeHint_SyncFrameView);
return hint;
@ -1127,7 +1133,6 @@ nsStyleVisibility::nsStyleVisibility(nsIPresContext* aPresContext)
aPresContext->GetLanguage(getter_AddRefs(mLanguage));
mVisible = NS_STYLE_VISIBILITY_VISIBLE;
mOpacity = 1.0f;
}
nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
@ -1135,23 +1140,14 @@ nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
mDirection = aSource.mDirection;
mVisible = aSource.mVisible;
mLanguage = aSource.mLanguage;
mOpacity = aSource.mOpacity;
}
nsChangeHint nsStyleVisibility::CalcDifference(const nsStyleVisibility& aOther) const
{
if (mOpacity != aOther.mOpacity
&& ((mOpacity < 1.0) != (aOther.mOpacity < 1.0)))
// might need to create a view to handle change from 1.0 to partial opacity
return NS_STYLE_HINT_FRAMECHANGE;
if ((mDirection == aOther.mDirection) &&
(mLanguage == aOther.mLanguage)) {
if ((mVisible == aOther.mVisible)) {
if (mOpacity == aOther.mOpacity)
return NS_STYLE_HINT_NONE;
else
return NS_STYLE_HINT_VISUAL;
}
if ((mVisible != aOther.mVisible) &&
((NS_STYLE_VISIBILITY_COLLAPSE == mVisible) ||

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

@ -702,7 +702,6 @@ struct nsStyleVisibility : public nsStyleStruct {
PRUint8 mDirection; // [inherited] see nsStyleConsts.h NS_STYLE_DIRECTION_*
PRUint8 mVisible; // [inherited]
nsCOMPtr<nsILanguageAtom> mLanguage; // [inherited]
float mOpacity; // [inherited]
PRBool IsVisible() const {
return (mVisible == NS_STYLE_VISIBILITY_VISIBLE);
@ -742,6 +741,7 @@ struct nsStyleDisplay : public nsStyleStruct {
#else
nsRect mClip; // [reset] offsets from upper-left border edge
#endif
float mOpacity; // [reset]
PRUint8 mDisplay; // [reset] see nsStyleConsts.h NS_STYLE_DISPLAY_*
PRUint8 mOriginalDisplay; // [reset] saved mDisplay for position:absolute/fixed
PRUint8 mAppearance; // [reset]
@ -751,7 +751,6 @@ struct nsStyleDisplay : public nsStyleStruct {
PRPackedBool mBreakBefore; // [reset]
PRPackedBool mBreakAfter; // [reset]
PRUint8 mOverflow; // [reset] see nsStyleConsts.h
PRUint8 mClipFlags; // [reset] see nsStyleConsts.h
PRBool IsBlockLevel() const {return (NS_STYLE_DISPLAY_BLOCK == mDisplay) ||

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

@ -2451,12 +2451,12 @@ nsBoxFrame::CreateViewForFrame(nsIPresContext* aPresContext,
PRBool isCanvas;
PRBool hasBG =
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
const nsStyleVisibility* vis = aStyleContext->GetStyleVisibility();
const nsStyleDisplay* disp = aStyleContext->GetStyleDisplay();
if (vis->mOpacity != 1.0f) {
if (disp->mOpacity != 1.0f) {
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
("nsBoxFrame::CreateViewForFrame: frame=%p opacity=%g",
aFrame, vis->mOpacity));
aFrame, disp->mOpacity));
aForce = PR_TRUE;
}
@ -2517,6 +2517,7 @@ nsBoxFrame::CreateViewForFrame(nsIPresContext* aPresContext,
(!hasBG ||
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT));
const nsStyleVisibility* vis = aStyleContext->GetStyleVisibility();
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
viewIsVisible = PR_FALSE;
}
@ -2556,7 +2557,7 @@ nsBoxFrame::CreateViewForFrame(nsIPresContext* aPresContext,
viewManager->SetViewVisibility(view, nsViewVisibility_kHide);
}
viewManager->SetViewOpacity(view, vis->mOpacity);
viewManager->SetViewOpacity(view, disp->mOpacity);
}
// Remember our view

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -249,11 +249,10 @@ private:
nsIRegion *region, PRUint32 aUpdateFlags);
void DefaultRefresh(nsView* aView, const nsRect* aRect);
void RenderViews(nsView *aRootView, nsIRenderingContext& aRC, const nsRegion& aRegion,
PRBool aRCIsOffscreen);
nsDrawingSurface aRCSurface);
void RenderDisplayListElement(DisplayListElement2* element,
nsIRenderingContext &aRC,
BlendingBuffers* aBuffers, const nsRect& aTranslucentArea);
nsIRenderingContext* aRC);
void PaintView(nsView *aView, nsIRenderingContext &aRC, nscoord x, nscoord y,
const nsRect &aDamageRect);
@ -262,9 +261,9 @@ private:
void InvalidateHorizontalBandDifference(nsView *aView, const nsRect& aRect, const nsRect& aCutOut,
PRUint32 aUpdateFlags, nscoord aY1, nscoord aY2, PRBool aInCutOut);
BlendingBuffers* CreateBlendingBuffers(nsIRenderingContext *aRC,
PRBool aTranslucentWindow, PRBool aTranslucentViews,
const nsRect& aTranslucentArea);
BlendingBuffers* CreateBlendingBuffers(nsIRenderingContext *aRC, PRBool aBorrowContext,
nsDrawingSurface aBorrowSurface, PRBool aNeedAlpha,
const nsRect& aArea);
void ReparentViews(DisplayZTreeNode* aNode);
void BuildDisplayList(nsView* aView, const nsRect& aRect, PRBool aEventProcessing,
@ -299,6 +298,9 @@ private:
void OptimizeDisplayListClipping(nsAutoVoidArray* aDisplayList, PRBool aHaveClip,
nsRect& aClipRect, PRInt32& aIndex,
PRBool& aAnyRendered);
nsRect OptimizeTranslucentRegions(const nsAutoVoidArray& aDisplayList,
PRInt32* aIndex, nsRegion* aOpaqueRegion);
void ShowDisplayList(nsAutoVoidArray* aDisplayList);
// Utilities