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 12WrapperView::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 21BView* 22WrapperView::GetView() const 23{ 24 return fView; 25} 26 27 28BSize 29WrapperView::MinSize() 30{ 31 return _FromViewSize(fView->MinSize()); 32} 33 34 35BSize 36WrapperView::MaxSize() 37{ 38 return _FromViewSize(fView->MaxSize()); 39} 40 41 42BSize 43WrapperView::PreferredSize() 44{ 45 return _FromViewSize(fView->PreferredSize()); 46} 47 48 49void 50WrapperView::AddedToContainer() 51{ 52 _UpdateViewFrame(); 53 54 Container()->AddChild(fView); 55} 56 57 58void 59WrapperView::RemovingFromContainer() 60{ 61 Container()->RemoveChild(fView); 62} 63 64 65void 66WrapperView::FrameChanged(BRect oldFrame, BRect newFrame) 67{ 68 _UpdateViewFrame(); 69} 70 71 72void 73WrapperView::_UpdateViewFrame() 74{ 75 BRect frame(_ViewFrameInContainer()); 76 fView->MoveTo(frame.LeftTop()); 77 fView->ResizeTo(frame.Width(), frame.Height()); 78} 79 80 81BRect 82WrapperView::_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 94BRect 95WrapperView::_ViewFrameInContainer() const 96{ 97 return ConvertToContainer(_ViewFrame()); 98} 99 100 101BSize 102WrapperView::_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