protected override void OnSizeAllocated(Rectangle allocation) { const int overviewWidth = 16; int vwidth = 1; bool hScrollBarVisible = hScrollBars[0].Visible; int hheight = hScrollBarVisible ? hScrollBars[0].Requisition.Height : 0; int headerSize = 0; if (headerWidgets != null) { headerSize = System.Math.Max(headerWidgets[0].SizeRequest().Height, 16); } Rectangle childRectangle = new Rectangle(allocation.X + overviewWidth + 1, allocation.Y + headerSize + 1, allocation.Width - vwidth - overviewWidth * 2, allocation.Height - hheight - headerSize - 1); leftDiffScrollBar.SizeAllocate(new Rectangle(allocation.Left, childRectangle.Y, overviewWidth - 1, childRectangle.Height)); rightDiffScrollBar.SizeAllocate(new Rectangle(allocation.Right - overviewWidth + 1, childRectangle.Y, overviewWidth - 1, childRectangle.Height)); const int middleAreaWidth = 42; int editorWidth = (childRectangle.Width - middleAreaWidth * (editors.Length - 1)) / editors.Length; for (int i = 0; i < editors.Length; i++) { Rectangle editorRectangle = new Rectangle(childRectangle.X + (editorWidth + middleAreaWidth) * i, childRectangle.Top, editorWidth, childRectangle.Height); editors[i].SizeAllocate(editorRectangle); if (hScrollBarVisible) { hScrollBars[i].SizeAllocate(new Rectangle(editorRectangle.X, editorRectangle.Y + editorRectangle.Height, editorRectangle.Width, hheight)); } if (headerWidgets != null) { headerWidgets[i].SizeAllocate(new Rectangle(editorRectangle.X, allocation.Y + 1, editorRectangle.Width, headerSize)); } } for (int i = 0; i < middleAreas.Length; i++) { middleAreas[i].SizeAllocate(new Rectangle(childRectangle.X + editorWidth * (i + 1) + middleAreaWidth * i, childRectangle.Top, middleAreaWidth + 1, childRectangle.Height)); } base.OnSizeAllocated(allocation); }