From f2f3ee8fe7bf878c80c4d78c5eb6f394e55ef08e Mon Sep 17 00:00:00 2001 From: Adi Oanca Date: Mon, 17 Oct 2005 18:13:16 +0000 Subject: [PATCH] Undid my last checkin git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14406 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Window.cpp | 54 ++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 7d309cfef1..dd69e8a949 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -812,6 +812,58 @@ BWindow::DispatchMessage(BMessage *msg, BHandler *target) break; } + case B_VIEW_RESIZED: + case B_VIEW_MOVED: + { + // NOTE: The problem with this implementation is that BView::Window()->CurrentMessage() + // will show this message, and not what it used to be on R5. This might break apps and + // we need to fix this here or change the way this feature is implemented. However, this + // implementation shows what has to be done when Layers are moved or resized inside the + // app_server. This message is generated from Layer::move_by() and resize_by() in + // Layer::AddToViewsWithInvalidCoords(). + int32 token; + BPoint frameLeftTop; + float width; + float height; + BView *view; + for (int32 i = 0; msg->FindInt32("_token", i, &token) >= B_OK; i++) { + if (token >= 0) { + msg->FindPoint("where", i, &frameLeftTop); + msg->FindFloat("width", i, &width); + msg->FindFloat("height", i, &height); + if ((view = findView(top_view, token))) { + // update the views offset in parent + if (view->LeftTop() != frameLeftTop) { +//printf("updating position (%.1f, %.1f): %s\n", frameLeftTop.x, frameLeftTop.y, view->Name()); + view->fParentOffset = frameLeftTop; + + // optionally call FrameMoved + if (view->fFlags & B_FRAME_EVENTS) { + STRACE(("Calling BView(%s)::FrameMoved( %.1f, %.1f )\n", view->Name(), + frameLeftTop.x, frameLeftTop.y)); + view->FrameMoved(frameLeftTop); + } + } + // update the views width and height + if (view->fBounds.Width() != width || view->fBounds.Height() != height) { +//printf("updating size (%.1f, %.1f): %s\n", width, height, view->Name()); + // TODO: does this work when a views left/top side is resized? + view->fBounds.right = view->fBounds.left + width; + view->fBounds.bottom = view->fBounds.top + height; + // optionally call FrameResized + if (view->fFlags & B_FRAME_EVENTS) { + STRACE(("Calling BView(%s)::FrameResized( %f, %f )\n", view->Name(), width, height)); + view->FrameResized(width, height); + } + } + } else { + fprintf(stderr, "***PANIC: BW: Can't find view with ID: %ld !***\n", token); + } + } + } + break; + } +/* case B_VIEW_MOVED: { BPoint where; @@ -844,7 +896,7 @@ BWindow::DispatchMessage(BMessage *msg, BHandler *target) break; } - +*/ case _MENUS_DONE_: MenusEnded(); break;