From 971ed3de1e9903f6c997fb61a1b42e8bb55ea879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Tue, 8 Nov 2005 01:16:15 +0000 Subject: [PATCH] * origin in DrawState is now the summed up origin, when setting it, use the origin from the previous state as a start * this fixes scrolling again (minus redrawing too much stuff, this is left for Adi :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14770 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/DrawState.cpp | 4 +++- src/servers/app/Layer.cpp | 14 ++++++-------- src/servers/app/ServerWindow.cpp | 3 +-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/servers/app/DrawState.cpp b/src/servers/app/DrawState.cpp index 2ce58790fd..6dbf9c92ec 100644 --- a/src/servers/app/DrawState.cpp +++ b/src/servers/app/DrawState.cpp @@ -268,7 +268,7 @@ DrawState::WriteToLink(BPrivate::LinkSender& link) const void DrawState::SetOrigin(const BPoint& origin) { - fOrigin = origin; + fOrigin = fPreviousState ? fPreviousState->fOrigin + origin : origin; } @@ -371,6 +371,8 @@ DrawState::PenLocation() const void DrawState::SetPenSize(float size) { + // NOTE: since pensize is calculated on the fly, + // it is ok to set it here regardless of previous state fPenSize = size; } diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index dcab577a2a..13d8757842 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -712,13 +712,14 @@ Layer::Activated(bool active) BPoint Layer::BoundsOrigin() const { - BPoint origin(0, 0); + BPoint origin(fDrawState->Origin()); float scale = Scale(); - DrawState* layerData = fDrawState; - do { - origin += layerData->Origin(); - } while ((layerData = layerData->PreviousState()) != NULL); + // TODO: Figure this out, BoundsOrigin() + // is used for BView::Bounds(), but I think + // that the scale has nothing to do with it + // "local coordinate system origin" does have + // something to do with scale. origin.x *= scale; origin.y *= scale; @@ -1473,7 +1474,6 @@ void Layer::do_MoveBy(float dx, float dy) if (dx == 0.0f && dy == 0.0f) return; -// fFrame.Set(fFrame.left+dx, fFrame.top+dy, fFrame.right+dx, fFrame.bottom+dy); fFrame.OffsetBy(dx, dy); // call hook function @@ -1552,8 +1552,6 @@ Layer::do_ScrollBy(float dx, float dy) if (dx != 0.0f || dy != 0.0f) ScrolledByHook(dx, dy); - - SendViewCoordUpdateMsg(); } void diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 1ddbf96874..9365cbbc44 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -765,8 +765,7 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) // our offset in the parent -> will be originX and originY in BView fLink.Attach(fCurrentLayer->fFrame.left); fLink.Attach(fCurrentLayer->fFrame.top); - // convert frame to bounds - fLink.Attach(fCurrentLayer->fFrame.OffsetToCopy(fCurrentLayer->BoundsOrigin())); + fLink.Attach(fCurrentLayer->Bounds()); fLink.Flush(); break; }