History log of /haiku/src/tests/kits/interface/ClippingPlusRedraw.cpp
Revision Date Author Comments
# 680a35bb 07-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

Add a simple test that demonstrates that the Haiku app_server incorrectly
(or at least incompatibly) uses the user set clipping region when determining
whether or not to call Draw() on a view. Under BeOS when a some part of a view
is exposed it will always trigger a Draw(), even if the current clipping region
disallows drawing in the supplied update rect. Under Haiku however the view is
not considered for an update when the current clipping region does not
intersect with the newly exposed area.
Running this test app from the Terminal this behaviour can be seen. When
clicking inside the window a floating window pops up. When clicking again it
goes away and triggers a redraw. When hitting a key, a clipping region is set
that does not overlap with the floating window. After this clipping is set,
the view does not get any Draw() call anymore when the floating window goes
away.
This is the reason for the redraw issues in firefox, as firefox uses the
clipping region to constrain its asynchronous drawing, but does never reset
the clipping to NULL. As firefox just collects the update rects in Draw() and
then draws the contents itself, once the clipping region is set, many of the
Draw() calls don't get called and the interface parts are never redrawn.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25853 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 680a35bbdb0456c9ab8cbc707bf133571fcc7bbb 07-Jun-2008 Michael Lotz <mmlr@mlotz.ch>

Add a simple test that demonstrates that the Haiku app_server incorrectly
(or at least incompatibly) uses the user set clipping region when determining
whether or not to call Draw() on a view. Under BeOS when a some part of a view
is exposed it will always trigger a Draw(), even if the current clipping region
disallows drawing in the supplied update rect. Under Haiku however the view is
not considered for an update when the current clipping region does not
intersect with the newly exposed area.
Running this test app from the Terminal this behaviour can be seen. When
clicking inside the window a floating window pops up. When clicking again it
goes away and triggers a redraw. When hitting a key, a clipping region is set
that does not overlap with the floating window. After this clipping is set,
the view does not get any Draw() call anymore when the floating window goes
away.
This is the reason for the redraw issues in firefox, as firefox uses the
clipping region to constrain its asynchronous drawing, but does never reset
the clipping to NULL. As firefox just collects the update rects in Draw() and
then draws the contents itself, once the clipping region is set, many of the
Draw() calls don't get called and the interface parts are never redrawn.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25853 a95241bf-73f2-0310-859d-f6bbb57e9c96