diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index ccb0cc3789..0f8a890b7c 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -21,7 +21,7 @@ // // File Name: Layer.cpp // Author: DarkWyrm -// Adi Oanca +// Adi Oanca // Stephan Aßmus // Description: Class used for rendering to the frame buffer. One layer per // view on screen and also for window decorators @@ -197,8 +197,9 @@ Layer::AddChild(Layer* layer, ServerWindow* serverWin) c->fServerWin=serverWin; // 2.3) we are attached to the main tree so build our full region. +#ifndef NEW_CLIPPING c->RebuildFullRegion(); - +#endif // tree parsing algorithm if (c->fTopChild) { // go deep @@ -447,6 +448,7 @@ Layer::BottomChild() const return fCurrent; } +#ifndef NEW_CLIPPING //! Rebuilds the layer's "completely visible" region void @@ -836,6 +838,8 @@ Layer::ResizeOthers(float x, float y, BPoint coords[], BPoint *ptOffset) return 0UL; } +#endif + // Redraw void Layer::Redraw(const BRegion& reg, Layer *startFrom) @@ -898,7 +902,9 @@ Layer::Show(bool invalidate) // NOTE: I added this here and it solves the invalid region problem // for Windows that have been resized before they were shown. -Stephan +#ifndef NEW_CLIPPING RebuildFullRegion(); +#endif SendViewCoordUpdateMsg(); if (invalidate) @@ -1321,15 +1327,19 @@ Layer::move_layer(float x, float y) wb->fUpdateReg.OffsetBy(x, y); }*/ +#ifndef NEW_CLIPPING BPoint pt(x, y); BRect rect(fFull.Frame().OffsetByCopy(pt)); +#endif if (!fParent) { printf("no parent in Layer::move_layer() (%s)\n", GetName()); fFrameAction = B_LAYER_ACTION_NONE; return; } +#ifndef NEW_CLIPPING fParent->StartRebuildRegions(BRegion(rect), this, B_LAYER_MOVE, pt); +#endif fDriver->CopyRegionList(&fRootLayer->fCopyRegList, &fRootLayer->fCopyList, @@ -1351,7 +1361,10 @@ Layer::resize_layer(float x, float y) { fFrameAction = B_LAYER_ACTION_RESIZE; +#ifndef NEW_CLIPPING BPoint pt(x,y); +#endif + BRect rect(fFull.Frame()); rect.right += x; rect.bottom += y; @@ -1361,9 +1374,10 @@ printf("no parent in Layer::resize_layer() (%s)\n", GetName()); fFrameAction = B_LAYER_ACTION_NONE; return; } - +#ifndef NEW_CLIPPING fParent->StartRebuildRegions(BRegion(rect), this, B_LAYER_RESIZE, pt); - +#endif + fDriver->CopyRegionList(&fRootLayer->fCopyRegList, &fRootLayer->fCopyList, fRootLayer->fCopyRegList.CountItems(), &fFullVisible); fParent->Redraw(fRootLayer->fRedrawReg, this); @@ -1392,9 +1406,11 @@ Layer::FullInvalidate(const BRegion& region) printf("\n"); #endif +#ifndef NEW_CLIPPING BPoint pt(0,0); StartRebuildRegions(region, NULL,/* B_LAYER_INVALIDATE, pt); */B_LAYER_NONE, pt); - +#endif + Redraw(fRootLayer->fRedrawReg); EmptyGlobals(); diff --git a/src/servers/app/Layer.h b/src/servers/app/Layer.h index e4cd05577c..7376db2d2a 100644 --- a/src/servers/app/Layer.h +++ b/src/servers/app/Layer.h @@ -94,7 +94,7 @@ class Layer { const char* GetName() const { return (fName) ? fName->String() : NULL; } - +#ifndef NEW_CLIPPING virtual void RebuildFullRegion(); void StartRebuildRegions(const BRegion& reg, Layer* target, @@ -109,7 +109,7 @@ class Layer { uint32 ResizeOthers(float x, float y, BPoint coords[], BPoint* ptOffset); - +#endif void Redraw(const BRegion& reg, Layer* startFrom = NULL); diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 07cd286397..907bb822c0 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -226,7 +226,9 @@ RootLayer::WorkingThread(void *data) // first make sure we are actualy visible oneRootLayer->Lock(); +#ifndef NEW_CLIPPING oneRootLayer->RebuildFullRegion(); +#endif oneRootLayer->invalidate_layer(oneRootLayer, oneRootLayer->Bounds()); oneRootLayer->Unlock(); diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 9a10751c83..31018de23c 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -21,7 +21,7 @@ // // File Name: ServerWindow.cpp // Author: DarkWyrm -// Adi Oanca +// Adi Oanca // Stephan Aßmus // Description: Shadow BWindow class // @@ -519,7 +519,9 @@ ServerWindow::DispatchMessage(int32 code, BPrivate::LinkReceiver &link) SetLayerState(fCurrentLayer, link); // TODO: should this be moved into SetLayerState? // If it _always_ needs to be done afterwards, then yes! +#ifndef NEW_CLIPPING fCurrentLayer->RebuildFullRegion(); +#endif break; } case AS_LAYER_SET_FONT_STATE: @@ -527,7 +529,9 @@ ServerWindow::DispatchMessage(int32 code, BPrivate::LinkReceiver &link) DTRACE(("ServerWindow %s: Message AS_LAYER_SET_FONT_STATE: Layer name: %s\n", fName, fCurrentLayer->fName->String())); // SetLayerFontState(fCurrentLayer); SetLayerFontState(fCurrentLayer, link); +#ifndef NEW_CLIPPING fCurrentLayer->RebuildFullRegion(); +#endif break; } case AS_LAYER_GET_STATE: @@ -699,8 +703,9 @@ ServerWindow::DispatchMessage(int32 code, BPrivate::LinkReceiver &link) DTRACE(("ServerWindow %s: Message AS_LAYER_PUSH_STATE: Layer: %s\n",fName, fCurrentLayer->fName->String())); fCurrentLayer->PushState(); +#ifndef NEW_CLIPPING fCurrentLayer->RebuildFullRegion(); - +#endif break; } case AS_LAYER_POP_STATE: @@ -708,8 +713,9 @@ ServerWindow::DispatchMessage(int32 code, BPrivate::LinkReceiver &link) DTRACE(("ServerWindow %s: Message AS_LAYER_POP_STATE: Layer: %s\n",fName, fCurrentLayer->fName->String())); fCurrentLayer->PopState(); +#ifndef NEW_CLIPPING fCurrentLayer->RebuildFullRegion(); - +#endif break; } case AS_LAYER_SET_SCALE: @@ -893,7 +899,9 @@ ServerWindow::DispatchMessage(int32 code, BPrivate::LinkReceiver &link) fCurrentLayer->fLayerData->SetClippingRegion(region); +#ifndef NEW_CLIPPING fCurrentLayer->RebuildFullRegion(); +#endif if (!(fCurrentLayer->IsHidden())) myRootLayer->GoInvalidate(fCurrentLayer, fCurrentLayer->fFull); @@ -960,7 +968,9 @@ ServerWindow::DispatchMessage(int32 code, BPrivate::LinkReceiver &link) } fCurrentLayer->fLayerData->SetClippingRegion(region); +#ifndef NEW_CLIPPING fCurrentLayer->RebuildFullRegion(); +#endif if (!(fCurrentLayer->IsHidden())) myRootLayer->GoInvalidate(fCurrentLayer, fCurrentLayer->fFull); diff --git a/src/servers/app/WinBorder.cpp b/src/servers/app/WinBorder.cpp index 03bf909d0f..0baebbe297 100644 --- a/src/servers/app/WinBorder.cpp +++ b/src/servers/app/WinBorder.cpp @@ -140,7 +140,9 @@ WinBorder::WinBorder(const BRect &r, fDecorator->GetSizeLimits(&fMinWidth, &fMinHeight, &fMaxWidth, &fMaxHeight); } +#ifndef NEW_CLIPPING RebuildFullRegion(); +#endif gDesktop->AddWinBorder(this); @@ -283,6 +285,8 @@ y = (float)int32(y); } } +#ifndef NEW_CLIPPING + //! Rebuilds the WinBorder's "fully-visible" region based on info from the decorator void WinBorder::RebuildFullRegion() @@ -296,6 +300,8 @@ WinBorder::RebuildFullRegion() fDecorator->GetFootprint(&fFull); } +#endif + //! Sets the minimum and maximum sizes of the window void WinBorder::SetSizeLimits(float minWidth, float maxWidth, diff --git a/src/servers/app/WinBorder.h b/src/servers/app/WinBorder.h index 5d055ab288..dec2750d5c 100644 --- a/src/servers/app/WinBorder.h +++ b/src/servers/app/WinBorder.h @@ -21,7 +21,7 @@ // // File Name: WinBorder.h // Author: DarkWyrm -// Adi Oanca +// Adi Oanca // Stephan Aßmus // Description: Layer subclass which handles window management // @@ -83,9 +83,9 @@ class WinBorder : public Layer { virtual void MoveBy(float x, float y); virtual void ResizeBy(float x, float y); - +#ifndef NEW_CLIPPING virtual void RebuildFullRegion(); - +#endif void SetSizeLimits(float minWidth, float maxWidth, float minHeight,