[webkit-dev] WebKit partial rendering issue

Paul Pedriana ppedriana at gmail.com
Fri Nov 28 00:34:27 PST 2008


The ScrollView::paint function seems wrong to me too.

The function source is shown below. I don't understand why it uses 
context->clip(visibleContentRect()) without accounting for 
documentDirtyRect. Shouldn't it make a union of visibleContentRect and 
documentDirtyRect? I am writing my own graphics back-end and this lack 
of clipping is messing up the view drawing.

An simple example of how the screen gets messed up is when you go to 
www.google.com and once the page is drawn you simply mouse over one of 
its two buttons. WebKit calls ScrollView::paint with a rect of the 
button area and during its rendering in paintContents it proceeds to 
draw a button-height/screen-width white rectangle before drawing that 
one button and without pushing a graphics context with the clip rect. 
This white rectangle is thus not clipped and blows away all pixels to 
the left and right of the button area, including the other button. If 
documentDirtyRect clipping was done then this wouldn't happen. Doing it 
seems to fix it for me though my testing is meager and it may be that 
somehow there's a more correct solution.

void ScrollView::paint(GraphicsContext* context, const IntRect& rect)
{
   if (platformWidget()) {
       Widget::paint(context, rect);
       return;
   }

   if (context->paintingDisabled() && !context->updatingControlTints())
       return;

   IntRect documentDirtyRect = rect;
   documentDirtyRect.intersect(frameRect());

   context->save();

   context->translate(x(), y());
   documentDirtyRect.move(-x(), -y());

   context->translate(-scrollX(), -scrollY());
   documentDirtyRect.move(scrollX(), scrollY());

   context->clip(visibleContentRect());                             
<---- Seems wrong to me.

   paintContents(context, documentDirtyRect);

   context->restore();
    .
    .
    .
}




> I've seen similar issues on a non-DirectFB port, but it turned out to 
> be related to a bug in the ScrollView::paint() method.  It wasn't 
> properly clipping the drawing and when Google was blinking the cursor 
> in the text box, it ends up erasing the whole window instead of just 
> the inner textbox.  Anything that forces a redraw of the widget, of 
> course, fixes it as it will then render the whole area, not just the 
> cursor.  I saw it when going to www.apple.com and watching the 
> updating news area, the headlines change and the title "Hot New 
> Headlines" would get erased everytime it updated.
>
> dunno if that's helpful or not.
>
> On Nov 27, 2008, at 9:35 AM, Srinivas Rao M Hamse wrote:
>
>> Hi,
>>
>> I am using WebKit+Gtk on DirectFB 1.2.0  ported on an arm platform. I 
>> am noticing that the render of text input widget is not complete. 
>> Attaching a snapshot of google page. In this google text input text 
>> box in not drawn. Also seen this issue while rendering other widgets 
>> also. WebKit misses some of them at first go. It slowly draws as and 
>> when that part of the screen/widget gets refreshed(say by pressing 
>> TAB keys)
>>
>> Any idea how to fix this issue ?
>>
>> regards,
>> Srinivas Rao M.
>>
>> -- 
>> Srinivas Rao M  Hamse
>>
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>



More information about the webkit-dev mailing list