5
// Jérémie Laval <jeremie.laval@xamarin.com>
7
// Copyright (c) 2012 Xamarin, Inc.
13
public class Placement : Widget
16
WidgetSpacing padding;
18
protected new class WidgetBackendHost : Widget.WidgetBackendHost<Placement,IBoxBackend>
22
protected override BackendHost CreateBackendHost ()
24
return new WidgetBackendHost ();
28
get { return (IBoxBackend) BackendHost.Backend; }
41
UnregisterChild (child);
42
Backend.Remove ((IWidgetBackend)GetBackend (child));
46
RegisterChild (child);
47
Backend.Add ((IWidgetBackend)GetBackend (child));
49
OnPreferredSizeChanged ();
53
public double XAlign {
58
public double YAlign {
63
public WidgetSpacing Padding {
64
get { return padding; }
71
public double PaddingLeft {
72
get { return padding.Left; }
79
public double PaddingRight {
80
get { return padding.Right; }
82
padding.Right = value;
87
public double PaddingTop {
88
get { return padding.Top; }
95
public double PaddingBottom {
96
get { return padding.Bottom; }
98
padding.Bottom = value;
103
void UpdatePadding ()
105
OnPreferredSizeChanged();
108
protected override void OnReallocate ()
110
var size = Backend.Size;
111
double childWidth, childHeight;
114
if (child.Surface.SizeRequestMode == SizeRequestMode.HeightForWidth) {
115
childWidth = child.Surface.GetPreferredWidth ().NaturalSize;
116
if (childWidth > size.Width)
117
childWidth = size.Width;
118
childHeight = child.Surface.GetPreferredHeightForWidth (childWidth).NaturalSize;
119
if (childHeight > size.Height)
120
childHeight = size.Height;
123
childHeight = child.Surface.GetPreferredHeight ().NaturalSize;
124
if (childHeight > size.Height)
125
childHeight = size.Height;
126
childWidth = child.Surface.GetPreferredWidthForHeight (childHeight).NaturalSize;
127
if (childWidth > size.Width)
128
childWidth = size.Width;
136
var x = XAlign * (size.Width - childWidth - Padding.HorizontalSpacing) + Padding.Left - Padding.Right;
137
var y = YAlign * (size.Height - childHeight - Padding.VerticalSpacing) + Padding.Top - Padding.Bottom;
139
Backend.SetAllocation (new[] { (IWidgetBackend)GetBackend (child) }, new[] { new Rectangle (x, y, childWidth, childHeight) });
141
if (!Application.EngineBackend.HandlesSizeNegotiation)
142
child.Surface.Reallocate ();
146
protected override WidgetSize OnGetPreferredHeight ()
148
WidgetSize s = new WidgetSize ();
150
s += child.Surface.GetPreferredHeight ();
154
protected override WidgetSize OnGetPreferredWidth ()
156
WidgetSize s = new WidgetSize ();
158
s += child.Surface.GetPreferredWidth ();
162
protected override WidgetSize OnGetPreferredHeightForWidth (double width)
164
WidgetSize s = new WidgetSize ();
166
s += child.Surface.GetPreferredHeightForWidth (width);
170
protected override WidgetSize OnGetPreferredWidthForHeight (double height)
172
WidgetSize s = new WidgetSize ();
174
s += child.Surface.GetPreferredWidthForHeight (height);