gdk drawing clip issue with directfb backend

来源:互联网 发布:java中类和包的关系 编辑:程序博客网 时间:2024/06/10 05:35

I am happy to fix one bug today, and it is caused by gdk drawing with directfb backend.

The issue is that there is one pixel width line on the right and bottom edge. Here is one screen shot(http://hi.csdn.net/space-2464555-do-album-picid-483016.html).

I was not sure about it, and I doubted first that I make the wrong clip region. But it was proved that clip was right. After more study, I found the issue was caused by gdk drawing. When it clears the area which to be redraw, it invokes IDirectFBSurface::SetClip() with one DFBRegion. But the region size is larger one pixel both in width and in height.

in gdk/directfb/gdkdrawable-directfb.c, gtk+-2.13.0 (there is same issue in latest version 2.18)
gdk_directfb_draw_rectangle (GdkDrawable *drawable,
        GdkGC       *gc,
        gint         filled,
        gint         x,
        gint         y,
        gint         width,
        gint         height)
{

    ..........
          for (i = 0; i < clip.numRects; i++)
          {
              DFBRegion reg = { clip.rects[i].x1,     clip.rects[i].y1,
                  clip.rects[i].x2 , clip.rects[i].y2 };                /// this is not right in size

              impl->surface->SetClip (impl->surface, &reg);
              impl->surface->TileBlit (impl->surface, surface, NULL, x, y);
          }
    .............
}