diff --git a/OpenRa.Game/Region.cs b/OpenRa.Game/Region.cs index 4b32a04f22..683fb0f18a 100644 --- a/OpenRa.Game/Region.cs +++ b/OpenRa.Game/Region.cs @@ -12,7 +12,47 @@ namespace OpenRa.Game Size size; MethodInvoker drawFunction; - public Region(Point location, Size size, MethodInvoker drawFunction) + static Size MakeSize(Viewport v, DockStyle d, int size) + { + switch (d) + { + case DockStyle.Top: + case DockStyle.Bottom: + return new Size(v.Width, size); + + case DockStyle.Left: + case DockStyle.Right: + return new Size(size, v.Height); + + default: + throw new NotImplementedException(); + } + } + + public static Region Create(Viewport v, DockStyle d, int size, MethodInvoker f) + { + Point topLeft = new Point(0, 0); + Point bottomRight = new Point(v.ClientSize); + + Size s = MakeSize(v, d, size); + + switch (d) + { + case DockStyle.Top: + case DockStyle.Left: + return new Region(topLeft, s, f); + + case DockStyle.Right: + case DockStyle.Bottom: + Point origin = bottomRight; origin.Offset( -s.Width, -s.Height ); + return new Region(origin, s, f); + + default: + throw new NotImplementedException(); + } + } + + Region(Point location, Size size, MethodInvoker drawFunction) { this.location = location; this.size = size; diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index e10a6b50b5..0ee8d6bb71 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -25,7 +25,7 @@ namespace OpenRa.Game public Sidebar(Race race, Renderer renderer, Viewport viewport) { this.viewport = viewport; - viewport.RequestRegion(AnchorStyles.Right, 128, Paint); + viewport.AddRegion( Region.Create(viewport, DockStyle.Right, 128, Paint)); techTree.CurrentRace = race; techTree.Build("FACT", true); spriteRenderer = new SpriteRenderer(renderer, false); diff --git a/OpenRa.Game/TerrainRenderer.cs b/OpenRa.Game/TerrainRenderer.cs index d18946bf5a..7a77d8cafd 100644 --- a/OpenRa.Game/TerrainRenderer.cs +++ b/OpenRa.Game/TerrainRenderer.cs @@ -24,7 +24,7 @@ namespace OpenRa.Game { this.renderer = renderer; this.viewport = viewport; - viewport.RequestRegion(AnchorStyles.Left, viewport.ClientSize.Width - 128, Draw); + viewport.AddRegion(Region.Create(viewport, DockStyle.Left, viewport.ClientSize.Width - 128, Draw)); this.map = map; tileSet = new TileSet(tilePackage, map.TileSuffix); diff --git a/OpenRa.Game/Viewport.cs b/OpenRa.Game/Viewport.cs index 3b0730cc79..768df0c77b 100644 --- a/OpenRa.Game/Viewport.cs +++ b/OpenRa.Game/Viewport.cs @@ -19,6 +19,9 @@ namespace OpenRa.Game public float2 Location { get { return scrollPosition; } } public float2 Size { get { return new float2(ClientSize); } } + public int Width { get { return clientSize.Width; } } + public int Height { get { return clientSize.Height; } } + public void Scroll(float2 delta) { scrollPosition = (scrollPosition + delta).Constrain( @@ -33,25 +36,9 @@ namespace OpenRa.Game } List regions = new List(); - public void RequestRegion(AnchorStyles anchor, int distanceFromAnchor, MethodInvoker drawFunction) + public void AddRegion(Region r) { - switch (anchor) - { - case AnchorStyles.Top: - regions.Add(new Region(new Point(0, 0), new Size(clientSize.Width, distanceFromAnchor), drawFunction)); - break; - case AnchorStyles.Bottom: - regions.Add(new Region(new Point(0, clientSize.Height - distanceFromAnchor), new Size(clientSize.Width, distanceFromAnchor), drawFunction)); - break; - case AnchorStyles.Left: - regions.Add(new Region(new Point(0, 0), new Size(distanceFromAnchor, clientSize.Height), drawFunction)); - break; - case AnchorStyles.Right: - regions.Add(new Region(new Point(clientSize.Width - distanceFromAnchor, 0), new Size(distanceFromAnchor, clientSize.Height), drawFunction)); - break; - case AnchorStyles.None: - throw new NotImplementedException(); - } + regions.Add(r); } public void DrawRegions() diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index 4c26ae4108..31ceff7a46 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -19,7 +19,7 @@ namespace OpenRa.Game { this.renderer = renderer; this.viewport = viewport; - viewport.RequestRegion(AnchorStyles.Left, viewport.ClientSize.Width - 128, Draw); + viewport.AddRegion(Region.Create(viewport, DockStyle.Left, viewport.ClientSize.Width - 128, Draw)); spriteRenderer = new SpriteRenderer(renderer, true); }