Summary: | REGRESSION: Incomplete repaint of overflow areas when deleting | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | mitz | ||||||||||||||
Component: | Forms | Assignee: | Adele Peterson <adele> | ||||||||||||||
Status: | RESOLVED FIXED | ||||||||||||||||
Severity: | Normal | CC: | adele, dev+webkit, tyler | ||||||||||||||
Priority: | P1 | Keywords: | InRadar, Regression | ||||||||||||||
Version: | 420+ | ||||||||||||||||
Hardware: | Mac | ||||||||||||||||
OS: | OS X 10.4 | ||||||||||||||||
URL: | data:text/html,<textarea>Delete%20the%20following%20word:%20character</textarea> | ||||||||||||||||
Attachments: |
|
Description
mitz
2006-10-13 03:47:13 PDT
Looks like result of r17018 (fix for <rdar://problem/4650813> REGRESSION: typing in a textarea in Safari is extremely slow). I think this is what's killing the repaint, from RenderBlock::layoutInlineChildren(): if (hasOverflowClip()) // Don't allow this rect to spill out of our overflow box. repaintRect.intersect(IntRect(0, 0, m_width, m_height)); When the above code executes, the inner div still hasn't reached its final height, so part of the needed repaint rect is clipped. I think that code can be moved to the end of layoutBlock(), where the repaint rect is used (and when the final height has been calculated). Before the subtree optimization, some ancestor's repaint was hiding this bug. Created attachment 11081 [details]
patch
I was unable to reproduce this bug in an automated test case.
Comment on attachment 11081 [details]
patch
after talking w/ Mitz, I don't think this is the right solution
Created attachment 11082 [details]
test case
attaching test case
Another thing I noticed about the current code is that it neglects to account for the inner div's scroll offset. Created attachment 11093 [details]
Test case showing that repainting isn't offset by the scroll amount.
*** Bug 11311 has been marked as a duplicate of this bug. *** <rdar://problem/4788524> REGRESSION: Incomplete repaint of text area when deleting (11277) Changing title to something more generic Created attachment 11338 [details]
patch
This patch fixes a basic overflow case, and the scroll offset problem, but doesn't fix the flexbox problem. We'll need to fix that separately.
Created attachment 11340 [details]
updated patch
updated patch to include a simpler layout test for the scrolling case
Created attachment 11342 [details]
another patch
one more try...
this adds a test case to make sure outlines aren't getting clipped, and moves the code around about to fix that case.
Comment on attachment 11342 [details]
another patch
r=me with a change we discussed on IRC: adding a !repaintRect.isEmpty() to the check before the call to addRepaintInfo
Committed revision 17524. |