From 41f78f788431dea860a5438fb66beaa3b486bd28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Fri, 11 Nov 2005 00:14:58 +0000 Subject: [PATCH] the current clipping is the combined user defined clipping from all previous states git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14846 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/DrawState.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/servers/app/DrawState.cpp b/src/servers/app/DrawState.cpp index 6dbf9c92ec..07546af8e2 100644 --- a/src/servers/app/DrawState.cpp +++ b/src/servers/app/DrawState.cpp @@ -66,7 +66,10 @@ DrawState::operator=(const DrawState& from) fScale = from.fScale; if (from.fClippingRegion) { - SetClippingRegion(*(from.fClippingRegion)); + if (fClippingRegion) + *fClippingRegion = *from.fClippingRegion; + else + fClippingRegion = new BRegion(*from.fClippingRegion); } else { delete fClippingRegion; fClippingRegion = NULL; @@ -302,15 +305,24 @@ DrawState::SetScale(float scale) void DrawState::SetClippingRegion(const BRegion& region) { - if (region.Frame().IsValid()) { + // reset clipping to that of previous state + if (PreviousState() != NULL && PreviousState()->ClippingRegion()) { if (fClippingRegion) - *fClippingRegion = region; - else - fClippingRegion = new BRegion(region); + *fClippingRegion = *(PreviousState()->ClippingRegion()); + else + fClippingRegion = new BRegion(*(PreviousState()->ClippingRegion())); } else { delete fClippingRegion; fClippingRegion = NULL; } + + // add the clipping from the passed region + if (region.Frame().IsValid()) { + if (fClippingRegion) + fClippingRegion->IntersectWith(®ion); + else + fClippingRegion = new BRegion(region); + } }