From 2e44cfce6671cbb0a5a1658fbb197899def3c73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sun, 29 Mar 2009 10:51:26 +0000 Subject: [PATCH] Make BView::PopState() (executed at least on every call to Draw()) a lot cheaper by preventing to rebuild the clipping on the app_server side. I think this was commented out, because user clipping was broken until some point and I forgot to reenable it after I fixed it. At least I cannot spot any regressions when running with this patch now would I expect to see regressions, since DrawStates do not mess with the screen clipping, unless they get a clipping region assigned when the (user) clipping changes during the state's life time. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29773 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/DrawState.cpp | 11 +++++++++-- src/servers/app/DrawState.h | 1 + src/servers/app/View.cpp | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/servers/app/DrawState.cpp b/src/servers/app/DrawState.cpp index 892d3ca826..ade88cae62 100644 --- a/src/servers/app/DrawState.cpp +++ b/src/servers/app/DrawState.cpp @@ -135,7 +135,7 @@ DrawState::ReadFontFromLink(BPrivate::LinkReceiver& link) link.Read(&size); fFont.SetSize(size); } - + if (mask & B_FONT_SHEAR) { float shear; link.Read(&shear); @@ -246,7 +246,7 @@ DrawState::WriteToLink(BPrivate::LinkSender& link) const link.Attach(fFont.Encoding()); link.Attach(fFont.Face()); link.Attach(fFont.Flags()); - + // Attach view state link.Attach(fPenLocation); link.Attach(fPenSize); @@ -341,6 +341,13 @@ DrawState::HasClipping() const } +bool +DrawState::HasAdditionalClipping() const +{ + return fClippingRegion != NULL; +} + + bool DrawState::GetCombinedClippingRegion(BRegion* region) const { diff --git a/src/servers/app/DrawState.h b/src/servers/app/DrawState.h index e7c0be4b35..a050f53644 100644 --- a/src/servers/app/DrawState.h +++ b/src/servers/app/DrawState.h @@ -65,6 +65,7 @@ public: void SetClippingRegion(const BRegion* region); bool HasClipping() const; + bool HasAdditionalClipping() const; bool GetCombinedClippingRegion(BRegion* region) const; // coordinate transformations diff --git a/src/servers/app/View.cpp b/src/servers/app/View.cpp index 097168ec44..193bdad2e7 100644 --- a/src/servers/app/View.cpp +++ b/src/servers/app/View.cpp @@ -1260,7 +1260,7 @@ View::PopState() return; } - bool rebuildClipping = true; //fDrawState->ClippingRegion() != NULL; + bool rebuildClipping = fDrawState->HasAdditionalClipping(); fDrawState = fDrawState->PopState(); fDrawState->SetSubPixelPrecise(fFlags & B_SUBPIXEL_PRECISE);