2009-03-04 Xan Lopez <xan@gnome.org>
authorxan@webkit.org <xan@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 6 Mar 2009 19:06:05 +0000 (19:06 +0000)
committerxan@webkit.org <xan@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 6 Mar 2009 19:06:05 +0000 (19:06 +0000)
        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24358
        [GTK] Scrollbars not clipped correctly

        Use correct clip rectangle and apply coordinate translation needed
        for non-ScrollView scrollbars.

        We were ignoring the clip rectangle passed as parameter, which is
        wrong in the case of non coalesced expose events. This, in turn,
        uncovers the fact that we were not applying coordinate translation
        to our position.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::paint):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@41490 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/gtk/WidgetGtk.cpp

index 50db63fcb719d5ada9bb1a2808e809707055ff8c..5e29b4b1fb69289d1b2b1b04902d54a9fdfabed9 100644 (file)
@@ -1,3 +1,21 @@
+2009-03-04  Xan Lopez  <xan@gnome.org>
+
+        Reviewed by Holger Freyther.
+
+        https://bugs.webkit.org/show_bug.cgi?id=24358
+        [GTK] Scrollbars not clipped correctly
+
+        Use correct clip rectangle and apply coordinate translation needed
+        for non-ScrollView scrollbars.
+
+        We were ignoring the clip rectangle passed as parameter, which is
+        wrong in the case of non coalesced expose events. This, in turn,
+        uncovers the fact that we were not applying coordinate translation
+        to our position.
+
+        * platform/gtk/WidgetGtk.cpp:
+        (WebCore::Widget::paint):
+
 2009-03-06  Eric Carlson  <eric.carlson@apple.com>
 
         Build fix, no review
index b617c214e084cacd3904405303cd564f4f3b3e1b..ebd9dea897acd3ee05329f1743bc7a7992f9af84 100644 (file)
@@ -101,7 +101,7 @@ void Widget::hide()
  *  2.) We assume that GTK_NO_WINDOW is set and that frameRectsChanged positioned
  *      the widget correctly. ATM we do not honor the GraphicsContext translation.
  */
-void Widget::paint(GraphicsContext* context, const IntRect&)
+void Widget::paint(GraphicsContext* context, const IntRect& rect)
 {
     if (!platformWidget())
         return;
@@ -114,7 +114,13 @@ void Widget::paint(GraphicsContext* context, const IntRect&)
 
     GdkEvent* event = gdk_event_new(GDK_EXPOSE);
     event->expose = *context->gdkExposeEvent();
-    event->expose.region = gtk_widget_region_intersect(widget, event->expose.region);
+    event->expose.area = static_cast<GdkRectangle>(rect);
+
+    IntPoint loc = parent()->contentsToWindow(rect.location());
+    event->expose.area.x = loc.x();
+    event->expose.area.y = loc.y();
+
+    event->expose.region = gdk_region_rectangle(&event->expose.area);
 
     /*
      * This will be unref'ed by gdk_event_free.
@@ -124,10 +130,8 @@ void Widget::paint(GraphicsContext* context, const IntRect&)
     /*
      * If we are going to paint do the translation and GtkAllocation manipulation.
      */
-    if (!gdk_region_empty(event->expose.region)) {
-        gdk_region_get_clipbox(event->expose.region, &event->expose.area);
+    if (!gdk_region_empty(event->expose.region))
         gtk_widget_send_expose(widget, event);
-    }
 
     gdk_event_free(event);
 }