public FullsizeContainer(Widget widget)
			: base()
		{
			if (widget == null) {
				throw new ArgumentException("widget");
			}

			Widget = widget;

			if (widget != null && widget.Invalid) {
				Invalid = true;
			}
		}
		public int Draw(Widget widget, int x, int y)
		{
			return Draw(widget, String, x, y);
		}
		public int Draw(Widget widget, out int endx, out int endy)
		{
			return Draw(widget, String, out endx, out endy);
		}
		public static int Fill(Widget widget, string str, char ch, int x, int y, int w, int h)
		{
			int endx, endy;
			int length = Draw(widget, str, x, y, w, h, out endx, out endy);
			widget.Fill(ch, x, y, w, h, endx, endy);
			return length;
		}
		public static int Draw(Widget widget, string str)
		{
			return Draw(widget, str, 0, 0);

		}
		public int Fill(Widget widget, int x, int y, int w, int h)
		{
			return Fill(widget, ' ', x, y, w, h);
		}
		public int Fill(Widget widget, int x, int y)
		{
			return Fill(widget, ' ', x, y);
		}
		public int Fill(Widget widget)
		{
			return Fill(widget, ' ');
		}
		public static int Fill(Widget widget, string str, char ch)
		{
			return Fill(widget, str, ch, 0, 0);
		}
		public static int Fill(Widget widget, string str)
		{
			return Fill(widget, str, ' ', 0, 0);
		}
		public static int Draw(Widget widget, string str, int x, int y, int w, int h, out int endx, out int endy)
		{
			int xi = 0, yi = 0;
			int length = Each(str, delegate (char ch) {
				widget.Set(xi + x, yi + y, ch);

				xi++;
				if (xi >= w) {
					xi = 0;
					yi++;
					if (yi >= h) {
						return false;
					}
				}
				return true;
			});
			endx = xi + x;
			endy = yi + y;
			return length;
		}
		public static int Draw(Widget widget, string str, int x, int y, int w, int h)
		{
			int endx, endy;
			return Draw(widget, str, x, y, w, h, out endx, out endy);
		}
		public static int Draw(Widget widget, string str, int x, int y, out int endx, out int endy)
		{
			return Draw(widget, str, x, y, widget.Width - x, widget.Height - y, out endx, out endy);
		}
		public static int Draw(Widget widget, string str, int x, int y)
		{
			return Draw(widget, str, x, y, widget.Width, widget.Height);
		}
		public static int Draw(Widget widget, string str, out int endx, out int endy)
		{
			return Draw(widget, str, 0, 0, out endx, out endy);
		}
		public int Draw(Widget widget, int x, int y, int w, int h)
		{
			return Draw(widget, String, x, y, w, h);
		}
		public int Draw(Widget widget, int x, int y, int w, int h, out int endx, out int endy)
		{
			return Draw(widget, String, x, y, w, h, out endx, out endy);
		}
		public static int Fill(Widget widget, string str, int x, int y)
		{
			return Fill(widget, str, ' ', x, y);
		}
		public int Fill(Widget widget, char ch)
		{
			return Fill(widget, ch, 0, 0);
		}
		public int Draw(Widget widget)
		{
			return Draw(widget, String);
		}
		public int Fill(Widget widget, char ch, int x, int y)
		{
			return Fill(widget, String, ch, x, y, widget.Width - x, widget.Height - y);
		}
		public static int Fill(Widget widget, string str, char ch, int x, int y)
		{
			return Fill(widget, str, ch, x, y, widget.Width - x, widget.Height - y);
		}
		public int Fill(Widget widget, char ch, int x, int y, int w, int h)
		{
			return Fill(widget, String, ch, x, y, w, h);
		}
		public static int Fill(Widget widget, string str, int x, int y, int w, int h)
		{
			return Fill(widget, str, ' ', x, y, w, h);
		}