public Space(ILayout layout) { Layout = layout; _viewports = new List <SpaceView>(); _rootRegion = new SpaceRegion { Rows = layout.Row, Columns = layout.Columns }; }
private static SpaceRegion SplitRegion(SpaceRegion region, int viewRows, int viewColumns) { region.IsOccupied = true; region.BottomRegion = new SpaceRegion { PosX = region.PosX, PosY = region.PosY + viewRows, Columns = region.Columns, Rows = region.Rows - viewRows }; region.RightRegion = new SpaceRegion { PosX = region.PosX + viewColumns, PosY = region.PosY, Columns = region.Columns - viewColumns, Rows = viewRows }; return(region); }
private static SpaceRegion FindRegion(SpaceRegion region, int viewRows, int viewColumns) { if (region == null) { return(null); } if (region.IsOccupied) { var nextNode = FindRegion(region.RightRegion, viewRows, viewColumns) ?? FindRegion(region.BottomRegion, viewRows, viewColumns); return(nextNode); } if (viewRows <= region.Rows && viewColumns <= region.Columns) { return(region); } return(null); }