Closed Bug 231585 Opened 21 years ago Closed 21 years ago

semi-transparent, overflow:auto div-layer doesn't scroll and renders background image incorrectly when scrolling manually.

Categories

(Core :: Web Painting, defect, P2)

defect

Tracking

()

RESOLVED FIXED

People

(Reporter: ptyland, Assigned: roc)

Details

(Keywords: testcase)

Attachments

(3 files)

User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6) Gecko/20040113 Build Identifier: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6) Gecko/20040113 I have a semi-tansparent (-moz-opacity: .7), overflow:auto and percentage height div-layer that doesn't scroll, this is outlined in here http://bugzilla.mozilla.org/show_bug.cgi?id=97283 ) I was told to post this as a new bug because the same div-layer renders the background image (assigned through the body element) incorrectly when scrolling manually. The background image scrolls with the div layer when it should stay fixed in the background (body element). When text is highlighted in the div portion of the image behind the highlighted text is rendered correctly. The image is rendered in the correct position when switching to another browser window and back again. In IE6 the bkg image is fixed behind the div layer and is rendered correctly. I have a feeling this is due to the overflow: auto/scroll not focusing a div layer correctly (see bug 97283). james Reproducible: Always Steps to Reproduce:
Seeing the garbage painted with Linux build 2004-01-15-07 too.
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: Windows 98 → All
Hardware: PC → All
Keywords: testcase
This is a simplified version of James' test case.
Attached patch fixSplinter Review
The problem is that a view is being marked "painted on uniform background" when its background is actually part of a translucent group and is therefore not really uniform (all same pixel values). We need to detect when such a view's background is part of a translucent group and stop OptimizeDisplayList from treating it as opaque for the purposes of CanScrollWithBitBlt. That would be hard because we don't know in the view system exactly where the uniform background comes from (the nsGfxScrollFrame parent of the scrolled view, in this case, which may not even have a view itself) but we can fall back to the safe approximation of checking whether the HasUniformBackground() view itself is translucent.
Comment on attachment 145446 [details] [diff] [review] fix This is getting a bit ugly. Maybe HasUniformBackground is not quite the right piece of information to transmit to views.
Attachment #145446 - Flags: superreview?(dbaron)
Attachment #145446 - Flags: review?(dbaron)
One way to improve the situation would be to make nsGfxScrollFrame always have a view of its own, and then have a view property IsUniformBackground() which is set for any appropriate view (means: "the background is a solid block of the same pixel value covering the entire view, AND this view paints no other content of its own"). Then CanScrollWithBitBlt could discover the necessary optimizations.
Summary: semi-tansparent, overflow:auto div-layer doesn't scroll and renders background image incorrectly when scrolling manually. → semi-transparent, overflow:auto div-layer doesn't scroll and renders background image incorrectly when scrolling manually.
Attachment #145446 - Flags: superreview?(dbaron)
Attachment #145446 - Flags: superreview+
Attachment #145446 - Flags: review?(dbaron)
Attachment #145446 - Flags: review+
Comment on attachment 145446 [details] [diff] [review] fix Very safe fix to visual corruption bug.
Attachment #145446 - Flags: approval1.7?
Comment on attachment 145446 [details] [diff] [review] fix a=chofmann for 1.7
Attachment #145446 - Flags: approval1.7? → approval1.7+
checked in
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Component: Layout: View Rendering → Layout: Web Painting
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: