The slow codepaths for fixed background-attachment should only apply when there's a background image. b=258793 r+sr=roc

git-svn-id: svn://10.0.0.236/trunk@162195 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dbaron%dbaron.org 2004-09-13 05:39:27 +00:00
parent 068c8b28b1
commit bbe291225f
5 changed files with 21 additions and 9 deletions

View File

@ -187,6 +187,14 @@ struct nsStyleBackground : public nsStyleStruct {
(NS_STYLE_BG_COLOR_TRANSPARENT | NS_STYLE_BG_IMAGE_NONE)) ==
(NS_STYLE_BG_COLOR_TRANSPARENT | NS_STYLE_BG_IMAGE_NONE);
}
PRBool HasFixedBackground() const
{
// We have to take slower codepaths for fixed background attachment,
// but we don't want to do that when there's no image.
return mBackgroundAttachment == NS_STYLE_BG_ATTACHMENT_FIXED &&
mBackgroundImage;
}
};
#define BORDER_COLOR_DEFINED 0x80

View File

@ -572,8 +572,7 @@ SyncFrameViewGeometryDependentProperties(nsPresContext* aPresContext,
// background-attachment: fixed is not really geometry dependent, but
// we set it here because it's cheap to do so
PRBool fixedBackground = hasBG &&
NS_STYLE_BG_ATTACHMENT_FIXED == bg->mBackgroundAttachment;
PRBool fixedBackground = hasBG && bg->HasFixedBackground();
// If the frame has a fixed background attachment, then indicate that the
// view's contents should be repainted and not bitblt'd
vm->SetViewBitBltEnabled(aView, !fixedBackground);
@ -901,8 +900,7 @@ nsContainerFrame::FrameNeedsView(nsIFrame* aFrame)
PRBool hasBackground =
nsCSSRendering::FindBackground(aFrame->GetPresContext(),
aFrame, &color, &isCanvas);
if (hasBackground &&
NS_STYLE_BG_ATTACHMENT_FIXED == color->mBackgroundAttachment) {
if (hasBackground && color->HasFixedBackground()) {
return PR_TRUE;
}

View File

@ -572,8 +572,7 @@ SyncFrameViewGeometryDependentProperties(nsPresContext* aPresContext,
// background-attachment: fixed is not really geometry dependent, but
// we set it here because it's cheap to do so
PRBool fixedBackground = hasBG &&
NS_STYLE_BG_ATTACHMENT_FIXED == bg->mBackgroundAttachment;
PRBool fixedBackground = hasBG && bg->HasFixedBackground();
// If the frame has a fixed background attachment, then indicate that the
// view's contents should be repainted and not bitblt'd
vm->SetViewBitBltEnabled(aView, !fixedBackground);
@ -901,8 +900,7 @@ nsContainerFrame::FrameNeedsView(nsIFrame* aFrame)
PRBool hasBackground =
nsCSSRendering::FindBackground(aFrame->GetPresContext(),
aFrame, &color, &isCanvas);
if (hasBackground &&
NS_STYLE_BG_ATTACHMENT_FIXED == color->mBackgroundAttachment) {
if (hasBackground && color->HasFixedBackground()) {
return PR_TRUE;
}

View File

@ -187,6 +187,14 @@ struct nsStyleBackground : public nsStyleStruct {
(NS_STYLE_BG_COLOR_TRANSPARENT | NS_STYLE_BG_IMAGE_NONE)) ==
(NS_STYLE_BG_COLOR_TRANSPARENT | NS_STYLE_BG_IMAGE_NONE);
}
PRBool HasFixedBackground() const
{
// We have to take slower codepaths for fixed background attachment,
// but we don't want to do that when there's no image.
return mBackgroundAttachment == NS_STYLE_BG_ATTACHMENT_FIXED &&
mBackgroundImage;
}
};
#define BORDER_COLOR_DEFINED 0x80

View File

@ -2490,7 +2490,7 @@ nsBoxFrame::CreateViewForFrame(nsPresContext* aPresContext,
}
// See if the frame has a fixed background attachment
if (hasBG && NS_STYLE_BG_ATTACHMENT_FIXED == bg->mBackgroundAttachment) {
if (hasBG && bg->HasFixedBackground()) {
aForce = PR_TRUE;
fixedBackgroundAttachment = PR_TRUE;
}