So the functions that are specific to drawing table borders are nsCSSRendering::DrawTableBorderSegment and DrawSolidBorderSegment in nsCSSRendering.cpp. In particular, if you look at DrawSolidBorderSegment:
I think (based on reading the code):
* the DrawLine case never gets hit (because the code is clearly broken, and
because it should have been checking == aTwipsPerPixel rather than ==1)
* the FillRect case is the reason that the borders are still being drawn
correctly when they're one pixel wide
* the FillPolygon case is what's broken
but it would be nice to confirm this.
Then the next step would be coming up with a simpler testcase (on top of the X APIs directly, or if that's too hard, at least on top of just cairo) that exhibits the same bug on this driver.
So the functions that are specific to drawing table borders are nsCSSRendering: :DrawTableBorde rSegment and DrawSolidBorder Segment in nsCSSRendering.cpp. In particular, if you look at DrawSolidBorder Segment:
http:// hg.mozilla. org/mozilla- central/ file/bcb580c05f 4c/layout/ base/nsCSSRende ring.cpp# l2829
I think (based on reading the code):
* the DrawLine case never gets hit (because the code is clearly broken, and
because it should have been checking == aTwipsPerPixel rather than ==1)
* the FillRect case is the reason that the borders are still being drawn
correctly when they're one pixel wide
* the FillPolygon case is what's broken
but it would be nice to confirm this.
Then the next step would be coming up with a simpler testcase (on top of the X APIs directly, or if that's too hard, at least on top of just cairo) that exhibits the same bug on this driver.