On 9/5/06, John Bintz <jcoswell@...1414...> wrote:
In situations where the redraw is very complicated, especially if the zoom factor is high (~1000-2000%) and if working with a tablet, the drawing of the dragged or new item on the screen can take longer than the processing of the events for this item. When drawing, say, a rectangle from top to bottom in one of these complicated areas, the preview item may not be finished drawing by the time the new event is received. This new event will cause the display to start updating again, ending the previous update and preventing the user from seeing a completed rectangle. I ran across this many times while working on some very calligraphy-path heavy drawings recently -- nodes and handles would not update completely, leaving me to guess as to how a drag operation would leave my finished drawing. Also, rectangles and arcs wouldn't draw at all sometimes, because the redraws were being interrupted with almost every mouse movement.
This sounds reasonable, but your change seems to remove any interruptibility at all, e.g. while dragging a rubberband. Is that so?
Without interruptibility, while each rubberband rect is redrawn fully, it may take quite a long time for it to complete. So while you will see the entire rect, it will lag behind the mouse.
By contrast, with interruptibility, you may see only the top strip of the rubberband rectangle, but it is much more responsive and tracks the mouse more closely. Besides, in my testing, it is never so bad as to never completely redraw; when I move the pen fast (I use a Graphire tablet with pen), I see the top strip only, but as soon as I slow it down, it "gets through" and starts doing complete or almost complete redraws. So I never perceived this as a problem, and indeed considered it to be an advantage.
Similarly, when I drag a big and complex object, previously (without interruptibility) it was very frustrating: each redraw was complete and took a lot of time, and therefore the redraws were lagging behing the mouse quite a lot. Now, with interruptibility, when I move the pen fast, it looks like I'm dragging only the top strip of the object, and it is therefore much more responsive. I can watch this top strip to position the object much more interactively than before, and as soon as I slow down or stop my movement, it completes the redraw in the new position. So, again, to me this is an advantage, not a problem.
If however for you this is a problem, let's find a compromise. I think a better approach would be to force _some_ of the redraws to be complete and let others be interrupted. For example, after every 5 interrupted redraws insert one forced complete one. I think this will be the best approach overall. What do you think?