> Patrick Lam <[EMAIL PROTECTED]> wrote: > The problem was that I couldn't coordinate redraws with xors. That > is, when the window system went behind my back to redraw something > (for instance, if you obscure part of the caret) I couldn't redraw > just part of the caret; I don't think GTK, at least tells you enough > to do this. You would have to enlarge the draw region to encompass the > whole caret and redraw it entirely (from scratch). save/restore > doesn't depend on the underlying redraw state of the window, so it > seems a lot more robust to me. >
OK, after reading this a few times, I think I understood :). However, one way or another the appearance of the caret needs to be sensitive to what it is being drawn over, and xor seems to be the only simple way to do this. Perhaps what we need is to separate the first draw from the subsequent re-draws; the first draw done using xor and imediately saving what we have drawn, the subequent draws using the save/restore mechanism we now use for clearing. The save/restore can now handle an unlimited number of separate rectangles, so in that regard that would be a trivial change. The real problem is how do we distinguish the primary draw from the redraws. Coordinances are not enough, for example in right-aligned text the caret remains static while the text beneath it moves. We would need some dirtiness mechanism through which the caret would be notified of any real draws in the window. Tomas
