[haiku-appserver] Re: Going "back" & clipping

  • From: "Stephan Assmus" <superstippi@xxxxxx>
  • To: haiku-appserver@xxxxxxxxxxxxx
  • Date: Wed, 20 Apr 2005 12:08:41 +0200 CEST

I think that either way is fine. If you can make it so that everything 
is blitted which can be blitted, fine with me.

What makes CopyBits() and probably CopyRegionList() different from the 
rest of the drawing methods in DisplayDriver, is that partial 
invalidation of some views might have to be triggered. This is 
obviously something that DisplayDriver cannot be responsible for taking 
care of. So I would argue, that the correct clipping for these two 
methods should be done *before* calling CopyBits()/CopyRegionList(). 
For the simple reason that these calculations have to be done anyways 
to know which parts of layers need a possible redraw. Therefor I think 
that the CopyBits() and CopyRegionList() should have to do no further 
clipping, except for maybe watching out if copying out of frame buffer 
bounds (just as an exercise in writing error resistent code).

This argument is independent of wether right/center aligned views are 
blitted or not. It doesn't make DisplayDriver code more complicated.

That being said, I'm more for "having a correct implementation" first, 
and "worrying about the speed" later. By correct implementation in this 
context, I'm talking about triggering all the right regions to be 
invalidated and taking care of moving and resizing layers other than 
the front most layer (!).

As for doing the in-place copy of all the rects in a BRegion in the 
correct order, I have already contacted Stefano in privat (because he 
wrote BRegion). If anybody else has an idea for a fast topological 
sorting algorithm, feel free to speak up! :-) To learn more about the 
problem, read the extensive comment above src/servers/app/drawing/
DisplayDriverPainter::CopyRegionList().

Best regards,
-Stephan


Other related posts: