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