From 903936bcec7685f61b848763967614eb2e6484bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 4 Apr 2006 01:51:16 +0000 Subject: [PATCH] Added the scrolling offset when a view is created. This lightens the problem in bug #98 a bit, but doesn't completely fix it; you still don't see any items in that list on the switch, but they now appear again when you scroll around there. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16997 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/View.cpp | 3 +++ src/servers/app/ServerWindow.cpp | 9 ++++++--- src/servers/app/ViewLayer.cpp | 5 +++-- src/servers/app/ViewLayer.h | 4 ++-- src/servers/app/WorkspacesLayer.cpp | 6 +++--- src/servers/app/WorkspacesLayer.h | 4 ++-- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp index b9c4a20185..272a189be8 100644 --- a/src/kits/interface/View.cpp +++ b/src/kits/interface/View.cpp @@ -3463,6 +3463,8 @@ BView::MoveTo(float x, float y) void BView::ResizeBy(float deltaWidth, float deltaHeight) { + // TODO: this doesn't look like it would work correctly with scrolled views + // NOTE: I think this check makes sense, but I didn't // test what R5 does. if (fBounds.right + deltaWidth < 0) @@ -3972,6 +3974,7 @@ BView::_CreateSelf() fOwner->fLink->Attach(_get_object_token_(this)); fOwner->fLink->AttachString(Name()); fOwner->fLink->Attach(Frame()); + fOwner->fLink->Attach(LeftTop()); fOwner->fLink->Attach(ResizingMode()); fOwner->fLink->Attach(fEventMask); fOwner->fLink->Attach(fEventOptions); diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index b623621803..3bf1be43ac 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -476,10 +476,12 @@ ServerWindow::_CreateLayerTree(BPrivate::LinkReceiver &link, ViewLayer **_parent int32 parentToken; char* name = NULL; rgb_color viewColor; + BPoint scrollingOffset; link.Read(&token); link.ReadString(&name); link.Read(&frame); + link.Read(&scrollingOffset); link.Read(&resizeMask); link.Read(&eventMask); link.Read(&eventOptions); @@ -496,10 +498,11 @@ ServerWindow::_CreateLayerTree(BPrivate::LinkReceiver &link, ViewLayer **_parent if (link.Code() == AS_LAYER_CREATE_ROOT && (fWindowLayer->Flags() & kWorkspacesWindowFlag) != 0) { // this is a workspaces window! - newLayer = new (nothrow) WorkspacesLayer(frame, name, token, resizeMask, - flags); + newLayer = new (nothrow) WorkspacesLayer(frame, scrollingOffset, name, + token, resizeMask, flags); } else { - newLayer = new (nothrow) ViewLayer(frame, name, token, resizeMask, flags); + newLayer = new (nothrow) ViewLayer(frame, scrollingOffset, name, token, + resizeMask, flags); } free(name); diff --git a/src/servers/app/ViewLayer.cpp b/src/servers/app/ViewLayer.cpp index 3e22852ce6..06c6f186ba 100644 --- a/src/servers/app/ViewLayer.cpp +++ b/src/servers/app/ViewLayer.cpp @@ -34,14 +34,15 @@ using std::nothrow; -ViewLayer::ViewLayer(BRect frame, const char* name, + +ViewLayer::ViewLayer(BRect frame, BPoint scrollingOffset, const char* name, int32 token, uint32 resizeMode, uint32 flags) : fName(name), fToken(token), fFrame(frame), - fScrollingOffset(0.0, 0.0), + fScrollingOffset(scrollingOffset), fViewColor(RGBColor(255, 255, 255)), fDrawState(new (nothrow) DrawState), diff --git a/src/servers/app/ViewLayer.h b/src/servers/app/ViewLayer.h index 29b06a2eb0..d327dec8ba 100644 --- a/src/servers/app/ViewLayer.h +++ b/src/servers/app/ViewLayer.h @@ -33,8 +33,8 @@ class ServerPicture; class ViewLayer { public: - ViewLayer(BRect frame, const char* name, - int32 token, uint32 resizeMode, + ViewLayer(BRect frame, BPoint scrollingOffset, + const char* name, int32 token, uint32 resizeMode, uint32 flags); virtual ~ViewLayer(); diff --git a/src/servers/app/WorkspacesLayer.cpp b/src/servers/app/WorkspacesLayer.cpp index e80823bda9..31c25a5847 100644 --- a/src/servers/app/WorkspacesLayer.cpp +++ b/src/servers/app/WorkspacesLayer.cpp @@ -19,9 +19,9 @@ #include -WorkspacesLayer::WorkspacesLayer(BRect frame, const char* name, - int32 token, uint32 resizeMode, uint32 flags) - : ViewLayer(frame, name, token, resizeMode, flags), +WorkspacesLayer::WorkspacesLayer(BRect frame, BPoint scrollingOffset, + const char* name, int32 token, uint32 resizeMode, uint32 flags) + : ViewLayer(frame, scrollingOffset, name, token, resizeMode, flags), fSelectedWindow(NULL), fSelectedWorkspace(-1), fHasMoved(false) diff --git a/src/servers/app/WorkspacesLayer.h b/src/servers/app/WorkspacesLayer.h index 8621cf1c70..410232c9f3 100644 --- a/src/servers/app/WorkspacesLayer.h +++ b/src/servers/app/WorkspacesLayer.h @@ -16,8 +16,8 @@ class WindowLayer; class WorkspacesLayer : public ViewLayer { public: - WorkspacesLayer(BRect frame, const char* name, int32 token, - uint32 resize, uint32 flags); + WorkspacesLayer(BRect frame, BPoint scrollingOffset, const char* name, + int32 token, uint32 resize, uint32 flags); virtual ~WorkspacesLayer(); virtual void Draw(DrawingEngine* drawingEngine,