xref: /haiku/src/tests/kits/interface/layout/widget_layout_test/WrapperView.cpp (revision 48d27198d0c684ad918733a087ea94897d7d6a4f)
1 /*
2  * Copyright 2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 
6 #include "WrapperView.h"
7 
8 #include <LayoutUtils.h>
9 #include <View.h>
10 
11 
12 WrapperView::WrapperView(BView* view)
13 	: View(),
14 	  fView(view),
15 	  fInsets(1, 1, 1, 1)
16 {
17 	SetViewColor((rgb_color){255, 0, 0, 255});
18 }
19 
20 
21 BView*
22 WrapperView::GetView() const
23 {
24 	return fView;
25 }
26 
27 
28 BSize
29 WrapperView::MinSize()
30 {
31 	return _FromViewSize(fView->MinSize());
32 }
33 
34 
35 BSize
36 WrapperView::MaxSize()
37 {
38 	return _FromViewSize(fView->MaxSize());
39 }
40 
41 
42 BSize
43 WrapperView::PreferredSize()
44 {
45 	return _FromViewSize(fView->PreferredSize());
46 }
47 
48 
49 void
50 WrapperView::AddedToContainer()
51 {
52 	_UpdateViewFrame();
53 
54 	Container()->AddChild(fView);
55 }
56 
57 
58 void
59 WrapperView::RemovingFromContainer()
60 {
61 	Container()->RemoveChild(fView);
62 }
63 
64 
65 void
66 WrapperView::FrameChanged(BRect oldFrame, BRect newFrame)
67 {
68 	_UpdateViewFrame();
69 }
70 
71 
72 void
73 WrapperView::_UpdateViewFrame()
74 {
75 	BRect frame(_ViewFrameInContainer());
76 	fView->MoveTo(frame.LeftTop());
77 	fView->ResizeTo(frame.Width(), frame.Height());
78 }
79 
80 
81 BRect
82 WrapperView::_ViewFrame() const
83 {
84 	BRect viewFrame(Bounds());
85 	viewFrame.left += fInsets.left;
86 	viewFrame.top += fInsets.top;
87 	viewFrame.right -= fInsets.right;
88 	viewFrame.bottom -= fInsets.bottom;
89 
90 	return viewFrame;
91 }
92 
93 
94 BRect
95 WrapperView::_ViewFrameInContainer() const
96 {
97 	return ConvertToContainer(_ViewFrame());
98 }
99 
100 
101 BSize
102 WrapperView::_FromViewSize(BSize size) const
103 {
104 	float horizontalInsets = fInsets.left + fInsets.right - 1;
105 	float verticalInsets = fInsets.top + fInsets.bottom - 1;
106 	return BSize(BLayoutUtils::AddDistances(size.width, horizontalInsets),
107 		BLayoutUtils::AddDistances(size.height, verticalInsets));
108 }
109