summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/LayoutOptions.cs
blob: a3a900b054ec84762a038f64616f8ccdbabf2ccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;

namespace Xamarin.Forms
{
	[TypeConverter(typeof(LayoutOptionsConverter))]
	public struct LayoutOptions
	{
		int _flags;

		public static readonly LayoutOptions Start = new LayoutOptions(LayoutAlignment.Start, false);
		public static readonly LayoutOptions Center = new LayoutOptions(LayoutAlignment.Center, false);
		public static readonly LayoutOptions End = new LayoutOptions(LayoutAlignment.End, false);
		public static readonly LayoutOptions Fill = new LayoutOptions(LayoutAlignment.Fill, false);
		public static readonly LayoutOptions StartAndExpand = new LayoutOptions(LayoutAlignment.Start, true);
		public static readonly LayoutOptions CenterAndExpand = new LayoutOptions(LayoutAlignment.Center, true);
		public static readonly LayoutOptions EndAndExpand = new LayoutOptions(LayoutAlignment.End, true);
		public static readonly LayoutOptions FillAndExpand = new LayoutOptions(LayoutAlignment.Fill, true);

		public LayoutOptions(LayoutAlignment alignment, bool expands)
		{
			var a = (int)alignment;
			if (a < 0 || a > 3)
				throw new ArgumentOutOfRangeException();
			_flags = (int)alignment | (expands ? (int)LayoutExpandFlag.Expand : 0);
		}

		public LayoutAlignment Alignment
		{
			get { return (LayoutAlignment)(_flags & 3); }
			set { _flags = (_flags & ~3) | (int)value; }
		}

		public bool Expands
		{
			get { return (_flags & (int)LayoutExpandFlag.Expand) != 0; }
			set { _flags = (_flags & 3) | (value ? (int)LayoutExpandFlag.Expand : 0); }
		}
	}
}