* Appearantly, we are calling ScreenClipping() on some views who's parent

views don't have a valid screen clipping yet. If then later we want
  to invalidate the clipping of an entire hierarchie, the traversal stops
  before reaching some of the child views, because the assumption was that
  for any views with invalid screen clipping, their child views have invalid
  screen clipping as well. Though this might cost a little performance, we
  always invalidate the screen clipping of all child views, ignoring the
  flag of the current view. Fixes ticket #1198 (garbled screen clipping of
  E-Mail prefs and WonderBrush tool area when switching tabs).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23688 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2008-01-21 16:58:06 +00:00
parent b4f58d8758
commit 9d4fa2c12b
1 changed files with 15 additions and 2 deletions

View File

@ -1596,8 +1596,21 @@ ViewLayer::ScreenClipping(BRegion* windowContentClipping, bool force) const
void
ViewLayer::InvalidateScreenClipping()
{
if (!fScreenClippingValid)
return;
// TODO: appearantly, we are calling ScreenClipping() on
// views who's parents don't have a valid screen clipping yet,
// this messes up the logic that for any given view with
// fScreenClippingValid == false, all children have
// fScreenClippingValid == false too. If this could be made the
// case, we could save some performance here with the commented
// out check, since InvalidateScreenClipping() might be called
// frequently.
// TODO: investigate, if InvalidateScreenClipping() could be
// called in "deep" and "non-deep" mode, ie. see if there are
// any cases where the children would still have valid screen
// clipping, even though the parent's screen clipping becomes
// invalid.
// if (!fScreenClippingValid)
// return;
fScreenClippingValid = false;
// invalidate the childrens screen clipping as well