diff --git a/src/tests/servers/app/newClipping/Clipping.proj b/src/tests/servers/app/newClipping/Clipping.proj index 196ad47610..26380e77bc 100644 Binary files a/src/tests/servers/app/newClipping/Clipping.proj and b/src/tests/servers/app/newClipping/Clipping.proj differ diff --git a/src/tests/servers/app/newClipping/Layer.cpp b/src/tests/servers/app/newClipping/Layer.cpp index 087d023d82..fa1c332021 100644 --- a/src/tests/servers/app/newClipping/Layer.cpp +++ b/src/tests/servers/app/newClipping/Layer.cpp @@ -46,8 +46,13 @@ void Layer::ConvertToScreen2(BRect* rect) if (view) if (fParent) { + rect->Set( rect->left - fOrigin.x, + rect->top - fOrigin.y, + rect->right - fOrigin.x, + rect->bottom - fOrigin.y); + rect->Set( rect->left + fFrame.left, - rect->top + fFrame. top, + rect->top + fFrame.top, rect->right + fFrame.left, rect->bottom + fFrame.top); @@ -295,12 +300,32 @@ void Layer::ScrollBy(float dx, float dy) if (!IsVisuallyHidden() && GetRootLayer()) { + // set the region to be invalidated. + BRegion invalid(fFullVisible); + clear_visible_regions(); - RebuildVisibleRegions(fFullVisible, VirtualBottomChild()); + rebuild_visible_regions(invalid, invalid, VirtualBottomChild()); -// TODO: continue + // for the moment we say that the whole surface needs to be redraw. + BRegion redrawReg(fFullVisible); + // offset old region so that we can start comparing. + invalid.OffsetBy(dx, dy); + + // no need to redraw common regions. redraw only what's needed. + redrawReg.Exclude(&invalid); + + // compute the common region. we'll use HW acc to copy this to the new location. + invalid.IntersectWith(&fFullVisible); + + // offset back and instruct the driver to do the actual copying. + invalid.OffsetBy(-dx, -dy); +// TODO: HACK this! +// GetDisplayDriver()->CopyRegion(&invalid, dx, dy); + + GetRootLayer()->fRedrawReg.Include(&redrawReg); + GetRootLayer()->RequestRedraw(); // TODO: what if we pass (fParent, startFromTHIS, &redrawReg)? } if (dx != 0.0f || dy != 0.0f) diff --git a/src/tests/servers/app/newClipping/main.cpp b/src/tests/servers/app/newClipping/main.cpp index b0862341d2..f0f2e9e403 100644 --- a/src/tests/servers/app/newClipping/main.cpp +++ b/src/tests/servers/app/newClipping/main.cpp @@ -134,6 +134,10 @@ void clsMainWindow::test1() lay2->ResizeBy(45,55); + snooze(2000000); + + lay1->ScrollBy(0,50); + } int main()