root/src/tests/kits/interface/layout/widget_layout_test/WrapperView.cpp
/*
 * Copyright 2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */

#include "WrapperView.h"

#include <LayoutUtils.h>
#include <View.h>


WrapperView::WrapperView(BView* view)
        : View(),
          fView(view),
          fInsets(1, 1, 1, 1)
{
        SetViewColor((rgb_color){255, 0, 0, 255});
}


BView*
WrapperView::GetView() const
{
        return fView;
}


BSize
WrapperView::MinSize()
{
        return _FromViewSize(fView->MinSize());
}


BSize
WrapperView::MaxSize()
{
        return _FromViewSize(fView->MaxSize());
}


BSize
WrapperView::PreferredSize()
{
        return _FromViewSize(fView->PreferredSize());
}


void
WrapperView::AddedToContainer()
{
        _UpdateViewFrame();

        Container()->AddChild(fView);
}


void
WrapperView::RemovingFromContainer()
{
        Container()->RemoveChild(fView);
}


void
WrapperView::FrameChanged(BRect oldFrame, BRect newFrame)
{
        _UpdateViewFrame();
}


void
WrapperView::_UpdateViewFrame()
{
        BRect frame(_ViewFrameInContainer());
        fView->MoveTo(frame.LeftTop());
        fView->ResizeTo(frame.Width(), frame.Height());
}


BRect
WrapperView::_ViewFrame() const
{
        BRect viewFrame(Bounds());
        viewFrame.left += fInsets.left;
        viewFrame.top += fInsets.top;
        viewFrame.right -= fInsets.right;
        viewFrame.bottom -= fInsets.bottom;

        return viewFrame;
}


BRect
WrapperView::_ViewFrameInContainer() const
{
        return ConvertToContainer(_ViewFrame());
}


BSize
WrapperView::_FromViewSize(BSize size) const
{
        float horizontalInsets = fInsets.left + fInsets.right - 1;
        float verticalInsets = fInsets.top + fInsets.bottom - 1;
        return BSize(BLayoutUtils::AddDistances(size.width, horizontalInsets),
                BLayoutUtils::AddDistances(size.height, verticalInsets));
}