private void AddWidgetRelative( int rowNum, int colNum, Widget widget, AlignMode hAlign = AlignMode.Left, AlignMode vAlign = AlignMode.Left, DockMode dock = DockMode.None, int rowSpan = 1, int colSpan = 1, bool isAddedWidgetToAnotherWidget = true) { widget.Col = colNum; widget.Row = rowNum; widgets.Add(widget); widget.Parent = this; ((OverlayContainer)element).AddChild(widget.OverlayElement); var c = cols[colNum - 1]; var r = rows[rowNum - 1]; switch (dock) { case DockMode.Fill: widget.Height = r.RealHeight - (Padding.PaddingDown + Padding.PaddingTop); widget.Width = c.RealWidth - (Padding.PaddingLeft + Padding.PaddingRight); widget.Left += Padding.PaddingLeft; widget.Top += Padding.PaddingTop; break; case DockMode.FillHeight: widget.Height = r.RealHeight - (Padding.PaddingDown + Padding.PaddingTop); widget.Top += Padding.PaddingTop; break; case DockMode.FillWidth: widget.Width = c.RealWidth - (Padding.PaddingLeft + Padding.PaddingRight); widget.Left += Padding.PaddingLeft; break; case DockMode.None: widget.Width *= c.RealWidth; widget.Height *= r.RealHeight; break; } if (c.Type == ValueType.Auto) { c.Width = widget.Width; } if (r.Type == ValueType.Auto) { r.Height = widget.Height; } float relativeLeft = 0; float relativeTop = 0; for (int i = 0; i < rowNum - 1; i++) { relativeTop += rows[i].RealHeight; } for (int i = 0; i < colNum - 1; i++) { relativeLeft += cols[i].RealWidth; } widget.Left += relativeLeft; widget.Top += relativeTop; if (rowSpan > 1) { for (int i = 0; i < rowSpan - 1; i++) { widget.Height += rows[i].RealHeight; } } if (colSpan > 1) { for (int i = 0; i < colSpan - 1; i++) { widget.Width += cols[i].RealWidth; } } switch (hAlign) { case AlignMode.Center: if (colNum == 1) { widget.Left = (c.RealWidth - widget.Width) / 2; } else { widget.Left += (c.RealWidth - widget.Width) / 2; } break; } switch (vAlign) { case AlignMode.Center: if (rowNum == 1) { widget.Top = (r.RealHeight - widget.Height) / 2; } else { widget.Top += (r.RealHeight - widget.Height) / 2; } break; } if (isAddedWidgetToAnotherWidget) { widget.AddedToAnotherWidgetFinished(hAlign, relativeLeft, c.RealWidth, relativeTop, r.RealHeight); } }
private void AddWidgetPixels( int rowNum, int colNum, Widget widget, AlignMode hAlign, AlignMode vAlign, DockMode dock, int rowSpan, int colSpan) { widget.Col = colNum; widget.Row = rowNum; widget.Left += Padding.PaddingLeft; widgets.Add(widget); widget.Parent = this; ((OverlayContainer)element).AddChild(widget.OverlayElement); var c = cols[colNum - 1]; var r = rows[rowNum - 1]; switch (dock) { case DockMode.Fill: widget.Height = RelativeToPixels(r.RealHeight, float.Parse(EngineManager.Instance.VideoMode["Height"])); widget.Width = RelativeToPixels(c.RealWidth, float.Parse(EngineManager.Instance.VideoMode["Width"])); break; case DockMode.FillHeight: widget.Height = RelativeToPixels(r.RealHeight, float.Parse(EngineManager.Instance.VideoMode["Height"])); break; case DockMode.FillWidth: widget.Width = RelativeToPixels(c.RealWidth, float.Parse(EngineManager.Instance.VideoMode["Width"])); break; case DockMode.Center: widget.Width = widget.Width * RelativeToPixels(c.RealWidth, float.Parse(EngineManager.Instance.VideoMode["Width"])); //widget.Height = widget.Height * r.AbosulteHeight; break; default: widget.Width = RelativeToPixels(c.RealWidth, float.Parse(EngineManager.Instance.VideoMode["Width"])); widget.Height = RelativeToPixels(r.RealHeight, float.Parse(EngineManager.Instance.VideoMode["Height"])); break; } if (c.Type == ValueType.Auto) { c.Width = PixelsToRelative(widget.Width, RelativeToPixels(c.RealWidth, float.Parse(EngineManager.Instance.VideoMode["Width"]))); } if (r.Type == ValueType.Auto) { r.Height = PixelsToRelative(widget.Height, RelativeToPixels(r.RealHeight, float.Parse(EngineManager.Instance.VideoMode["Height"]))); } float relativeLeft = 0; float relativeTop = 0; for (int i = 0; i < rowNum - 1; i++) { relativeTop += rows[i].RealHeight; } for (int i = 0; i < colNum - 1; i++) { relativeLeft += cols[i].RealWidth; } widget.Left += relativeLeft; widget.Top += RelativeToPixels(relativeTop, float.Parse(EngineManager.Instance.VideoMode["Height"])); if (rowSpan > 1) { for (int i = 0; i < rowSpan - 1; i++) { widget.Height += RelativeToPixels(rows[i].RealHeight, float.Parse(EngineManager.Instance.VideoMode["Height"])); } } if (colSpan > 1) { for (int i = 0; i < colSpan - 1; i++) { widget.Width += RelativeToPixels(cols[i].RealWidth, float.Parse(EngineManager.Instance.VideoMode["Width"])); } } switch (hAlign) { case AlignMode.Center: widget.Left = RelativeToPixels((c.RealWidth - widget.Width) / 2, float.Parse(EngineManager.Instance.VideoMode["Width"])); break; case AlignMode.Right: break; } switch (vAlign) { case AlignMode.Center: widget.Top += RelativeToPixels((r.RealHeight - widget.Height) / 2, float.Parse(EngineManager.Instance.VideoMode["Height"])); break; } widget.AddedToAnotherWidgetFinished(hAlign, relativeLeft, c.RealWidth, relativeTop, r.RealHeight); }