diff --git a/OpenRA.Mods.Common/Widgets/GridLayout.cs b/OpenRA.Mods.Common/Widgets/GridLayout.cs index 9c5f2851f4..431a0f0aca 100644 --- a/OpenRA.Mods.Common/Widgets/GridLayout.cs +++ b/OpenRA.Mods.Common/Widgets/GridLayout.cs @@ -24,14 +24,14 @@ namespace OpenRA.Mods.Common.Widgets { if (widget.Children.Count == 0) { - widget.ContentHeight = widget.ItemSpacing; - pos = new int2(widget.ItemSpacing, widget.ItemSpacing); + widget.ContentHeight = 2 * widget.TopBottomSpacing; + pos = new int2(widget.ItemSpacing, widget.TopBottomSpacing); } - if (pos.X + widget.ItemSpacing + w.Bounds.Width > widget.Bounds.Width - widget.ScrollbarWidth) + if (pos.X + w.Bounds.Width + widget.ItemSpacing > widget.Bounds.Width - widget.ScrollbarWidth) { /* start a new row */ - pos = new int2(widget.ItemSpacing, widget.ContentHeight); + pos = new int2(widget.ItemSpacing, widget.ContentHeight - widget.TopBottomSpacing + widget.ItemSpacing); } w.Bounds.X += pos.X; @@ -39,11 +39,9 @@ namespace OpenRA.Mods.Common.Widgets pos = pos.WithX(pos.X + w.Bounds.Width + widget.ItemSpacing); - widget.ContentHeight = Math.Max(widget.ContentHeight, pos.Y + widget.ItemSpacing + w.Bounds.Height); + widget.ContentHeight = Math.Max(widget.ContentHeight, pos.Y + w.Bounds.Height + widget.TopBottomSpacing); } - public void AdjustChildren() - { - } + public void AdjustChildren() { } } } \ No newline at end of file diff --git a/OpenRA.Mods.Common/Widgets/ListLayout.cs b/OpenRA.Mods.Common/Widgets/ListLayout.cs index 15c22681d5..f109c62f93 100644 --- a/OpenRA.Mods.Common/Widgets/ListLayout.cs +++ b/OpenRA.Mods.Common/Widgets/ListLayout.cs @@ -21,22 +21,26 @@ namespace OpenRA.Mods.Common.Widgets public void AdjustChild(Widget w) { if (widget.Children.Count == 0) - widget.ContentHeight = widget.ItemSpacing; + widget.ContentHeight = 2 * widget.TopBottomSpacing - widget.ItemSpacing; - w.Bounds.Y = widget.ContentHeight; + w.Bounds.Y = widget.ContentHeight - widget.TopBottomSpacing + widget.ItemSpacing; if (!widget.CollapseHiddenChildren || w.IsVisible()) widget.ContentHeight += w.Bounds.Height + widget.ItemSpacing; } public void AdjustChildren() { - widget.ContentHeight = widget.ItemSpacing; + widget.ContentHeight = widget.TopBottomSpacing; foreach (var w in widget.Children) { w.Bounds.Y = widget.ContentHeight; if (!widget.CollapseHiddenChildren || w.IsVisible()) widget.ContentHeight += w.Bounds.Height + widget.ItemSpacing; } + + // The loop above appended an extra widget.ItemSpacing after the last item. + // Replace it with proper bottom spacing. + widget.ContentHeight += widget.TopBottomSpacing - widget.ItemSpacing; } } } diff --git a/OpenRA.Mods.Common/Widgets/ScrollPanelWidget.cs b/OpenRA.Mods.Common/Widgets/ScrollPanelWidget.cs index 7031191a2a..79b78b5d33 100644 --- a/OpenRA.Mods.Common/Widgets/ScrollPanelWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ScrollPanelWidget.cs @@ -33,7 +33,8 @@ namespace OpenRA.Mods.Common.Widgets { readonly Ruleset modRules; public int ScrollbarWidth = 24; - public int ItemSpacing = 2; + public int TopBottomSpacing = 2; + public int ItemSpacing = 0; public int ButtonDepth = ChromeMetrics.Get("ButtonDepth"); public string Background = "scrollpanel-bg"; public string Button = "scrollpanel-button"; diff --git a/mods/cnc/chrome/dialogs.yaml b/mods/cnc/chrome/dialogs.yaml index 3974db7ae3..e93ecdbef5 100644 --- a/mods/cnc/chrome/dialogs.yaml +++ b/mods/cnc/chrome/dialogs.yaml @@ -250,6 +250,7 @@ ScrollPanel@NEWS_PANEL: Width: 400 Height: 265 Background: panel-black + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@NEWS_ITEM_TEMPLATE: diff --git a/mods/cnc/chrome/editor.yaml b/mods/cnc/chrome/editor.yaml index ea63fc785b..2ec26880ee 100644 --- a/mods/cnc/chrome/editor.yaml +++ b/mods/cnc/chrome/editor.yaml @@ -264,6 +264,7 @@ Container@EDITOR_WORLD_ROOT: Y: 24 Width: PARENT_RIGHT Height: PARENT_BOTTOM - 24 + TopBottomSpacing: 4 ItemSpacing: 4 Children: ScrollItem@TILEPREVIEW_TEMPLATE: @@ -289,6 +290,7 @@ Container@EDITOR_WORLD_ROOT: ScrollPanel@LAYERTEMPLATE_LIST: Width: PARENT_RIGHT Height: PARENT_BOTTOM + TopBottomSpacing: 4 ItemSpacing: 4 Children: ScrollItem@LAYERPREVIEW_TEMPLATE: @@ -320,6 +322,7 @@ Container@EDITOR_WORLD_ROOT: Y: 24 Width: PARENT_RIGHT Height: PARENT_BOTTOM - 24 + TopBottomSpacing: 4 ItemSpacing: 4 Children: ScrollItem@ACTORPREVIEW_TEMPLATE: @@ -389,4 +392,4 @@ Container@EDITOR_WORLD_ROOT: Height: 25 Align: Left Font: Bold - Contrast: true \ No newline at end of file + Contrast: true diff --git a/mods/cnc/chrome/ingame-chat.yaml b/mods/cnc/chrome/ingame-chat.yaml index 6fdcc04bbb..2ac860f8a2 100644 --- a/mods/cnc/chrome/ingame-chat.yaml +++ b/mods/cnc/chrome/ingame-chat.yaml @@ -45,6 +45,7 @@ Container@CHAT_PANEL: Y: PARENT_BOTTOM - HEIGHT - 30 Width: 550 Height: 164 + TopBottomSpacing: 4 ItemSpacing: 4 Align: Bottom Children: diff --git a/mods/cnc/chrome/ingame-infoobjectives.yaml b/mods/cnc/chrome/ingame-infoobjectives.yaml index 7fc4830e8a..8d177ff310 100644 --- a/mods/cnc/chrome/ingame-infoobjectives.yaml +++ b/mods/cnc/chrome/ingame-infoobjectives.yaml @@ -21,6 +21,7 @@ Container@MISSION_OBJECTIVES: Y: 50 Width: 482 Height: 310 + TopBottomSpacing: 15 ItemSpacing: 15 Children: Container@OBJECTIVE_TEMPLATE: diff --git a/mods/cnc/chrome/ingame-infostats.yaml b/mods/cnc/chrome/ingame-infostats.yaml index f2f99e6431..0667ced06c 100644 --- a/mods/cnc/chrome/ingame-infostats.yaml +++ b/mods/cnc/chrome/ingame-infostats.yaml @@ -69,6 +69,7 @@ Container@SKIRMISH_STATS: Y: 105 Width: 482 Height: 255 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@PLAYER_TEMPLATE: diff --git a/mods/cnc/chrome/ingame-observerstats.yaml b/mods/cnc/chrome/ingame-observerstats.yaml index 6e2e346089..0bd3ca3211 100644 --- a/mods/cnc/chrome/ingame-observerstats.yaml +++ b/mods/cnc/chrome/ingame-observerstats.yaml @@ -258,6 +258,7 @@ Background@INGAME_OBSERVERSTATS_BG: Y: 70 Width: PARENT_RIGHT-30 Height: PARENT_BOTTOM-35-50 + TopBottomSpacing: 5 ItemSpacing: 5 Children: ScrollItem@TEAM_TEMPLATE: diff --git a/mods/cnc/chrome/lobby-playerbin.yaml b/mods/cnc/chrome/lobby-playerbin.yaml index 035cf1b718..430ce6e176 100644 --- a/mods/cnc/chrome/lobby-playerbin.yaml +++ b/mods/cnc/chrome/lobby-playerbin.yaml @@ -3,6 +3,7 @@ ScrollPanel@LOBBY_PLAYER_BIN: Y: 30 Width: 556 Height: 219 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@TEMPLATE_EDITABLE_PLAYER: diff --git a/mods/cnc/chrome/lobby.yaml b/mods/cnc/chrome/lobby.yaml index a9f14a999a..4b6cf31c3e 100644 --- a/mods/cnc/chrome/lobby.yaml +++ b/mods/cnc/chrome/lobby.yaml @@ -94,6 +94,7 @@ Container@SERVER_LOBBY: Y: 285 Width: PARENT_RIGHT - 30 Height: PARENT_BOTTOM - 324 + TopBottomSpacing: 2 ItemSpacing: 2 Children: Container@CHAT_TEMPLATE: diff --git a/mods/cnc/chrome/settings.yaml b/mods/cnc/chrome/settings.yaml index e84d284e73..b1558b8a18 100644 --- a/mods/cnc/chrome/settings.yaml +++ b/mods/cnc/chrome/settings.yaml @@ -396,6 +396,7 @@ Container@SETTINGS_PANEL: X: 15 Y: 155 Width: 560 + TopBottomSpacing: 4 ItemSpacing: 4 Height: 190 Children: diff --git a/mods/d2k/chrome/dropdowns.yaml b/mods/d2k/chrome/dropdowns.yaml index 3acd9bb2ed..e6ccf220b3 100644 --- a/mods/d2k/chrome/dropdowns.yaml +++ b/mods/d2k/chrome/dropdowns.yaml @@ -98,6 +98,7 @@ ScrollPanel@SPECTATOR_DROPDOWN_TEMPLATE: ScrollPanel@NEWS_PANEL: Width: 370 Height: 265 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@NEWS_ITEM_TEMPLATE: diff --git a/mods/d2k/chrome/ingame-infostats.yaml b/mods/d2k/chrome/ingame-infostats.yaml index 465e93ee56..c480924796 100644 --- a/mods/d2k/chrome/ingame-infostats.yaml +++ b/mods/d2k/chrome/ingame-infostats.yaml @@ -69,6 +69,7 @@ Container@SKIRMISH_STATS: Y: 105 Width: 482 Height: 265 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@PLAYER_TEMPLATE: diff --git a/mods/d2k/chrome/lobby-playerbin.yaml b/mods/d2k/chrome/lobby-playerbin.yaml index 4cb153adf3..d504671df4 100644 --- a/mods/d2k/chrome/lobby-playerbin.yaml +++ b/mods/d2k/chrome/lobby-playerbin.yaml @@ -1,6 +1,7 @@ ScrollPanel@LOBBY_PLAYER_BIN: X: 20 Y: 67 + TopBottomSpacing: 5 ItemSpacing: 5 Width: 593 Height: 235 diff --git a/mods/ra/chrome/dropdowns.yaml b/mods/ra/chrome/dropdowns.yaml index e690de1ba2..2a253c97d7 100644 --- a/mods/ra/chrome/dropdowns.yaml +++ b/mods/ra/chrome/dropdowns.yaml @@ -101,6 +101,7 @@ ScrollPanel@SPECTATOR_DROPDOWN_TEMPLATE: ScrollPanel@NEWS_PANEL: Width: 370 Height: 265 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@NEWS_ITEM_TEMPLATE: diff --git a/mods/ra/chrome/editor.yaml b/mods/ra/chrome/editor.yaml index 3dc9e2fd68..306be8f0aa 100644 --- a/mods/ra/chrome/editor.yaml +++ b/mods/ra/chrome/editor.yaml @@ -241,6 +241,7 @@ Container@EDITOR_WORLD_ROOT: Y: 35 Width: PARENT_RIGHT-20 Height: PARENT_BOTTOM-45 + TopBottomSpacing: 4 ItemSpacing: 4 Children: ScrollItem@TILEPREVIEW_TEMPLATE: @@ -266,6 +267,7 @@ Container@EDITOR_WORLD_ROOT: Y: 10 Width: PARENT_RIGHT-20 Height: PARENT_BOTTOM-20 + TopBottomSpacing: 4 ItemSpacing: 4 Children: ScrollItem@LAYERPREVIEW_TEMPLATE: @@ -298,6 +300,7 @@ Container@EDITOR_WORLD_ROOT: Y: 35 Width: PARENT_RIGHT-20 Height: PARENT_BOTTOM-45 + TopBottomSpacing: 4 ItemSpacing: 4 Children: ScrollItem@ACTORPREVIEW_TEMPLATE: @@ -376,4 +379,4 @@ Container@EDITOR_WORLD_ROOT: Height: 25 Align: Left Font: Bold - Contrast: true \ No newline at end of file + Contrast: true diff --git a/mods/ra/chrome/ingame-chat.yaml b/mods/ra/chrome/ingame-chat.yaml index de3854c23f..e36a7ff94b 100644 --- a/mods/ra/chrome/ingame-chat.yaml +++ b/mods/ra/chrome/ingame-chat.yaml @@ -41,6 +41,7 @@ Container@CHAT_PANEL: Y: PARENT_BOTTOM - HEIGHT - 30 Width: 550 Height: 164 + TopBottomSpacing: 4 ItemSpacing: 4 Align: Bottom Children: diff --git a/mods/ra/chrome/ingame-diplomacy.yaml b/mods/ra/chrome/ingame-diplomacy.yaml index df74221875..9b62704307 100644 --- a/mods/ra/chrome/ingame-diplomacy.yaml +++ b/mods/ra/chrome/ingame-diplomacy.yaml @@ -44,6 +44,7 @@ Background@INGAME_DIPLOMACY_BG: Y: 67 Width: PARENT_RIGHT-40 Height: PARENT_BOTTOM-87-35 + TopBottomSpacing: 5 ItemSpacing: 5 Children: ScrollItem@TEAM_TEMPLATE: diff --git a/mods/ra/chrome/ingame-infoobjectives.yaml b/mods/ra/chrome/ingame-infoobjectives.yaml index df9680db4a..a3c9b0c3df 100644 --- a/mods/ra/chrome/ingame-infoobjectives.yaml +++ b/mods/ra/chrome/ingame-infoobjectives.yaml @@ -21,6 +21,7 @@ Container@MISSION_OBJECTIVES: Y: 60 Width: 482 Height: 310 + TopBottomSpacing: 15 ItemSpacing: 15 Children: Container@OBJECTIVE_TEMPLATE: diff --git a/mods/ra/chrome/ingame-infostats.yaml b/mods/ra/chrome/ingame-infostats.yaml index 5bb1cef853..4f5b748099 100644 --- a/mods/ra/chrome/ingame-infostats.yaml +++ b/mods/ra/chrome/ingame-infostats.yaml @@ -69,6 +69,7 @@ Container@SKIRMISH_STATS: Y: 105 Width: 482 Height: 265 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@PLAYER_TEMPLATE: diff --git a/mods/ra/chrome/ingame-observerstats.yaml b/mods/ra/chrome/ingame-observerstats.yaml index 14dd5c30d7..4d82713e24 100644 --- a/mods/ra/chrome/ingame-observerstats.yaml +++ b/mods/ra/chrome/ingame-observerstats.yaml @@ -258,6 +258,7 @@ Background@INGAME_OBSERVERSTATS_BG: Y: 70 Width: PARENT_RIGHT-50 Height: PARENT_BOTTOM-45-50 + TopBottomSpacing: 5 ItemSpacing: 5 Children: ScrollItem@TEAM_TEMPLATE: diff --git a/mods/ra/chrome/lobby-playerbin.yaml b/mods/ra/chrome/lobby-playerbin.yaml index 20ea8f4c9a..2e9a6b5c57 100644 --- a/mods/ra/chrome/lobby-playerbin.yaml +++ b/mods/ra/chrome/lobby-playerbin.yaml @@ -1,6 +1,7 @@ ScrollPanel@LOBBY_PLAYER_BIN: X: 20 Y: 67 + TopBottomSpacing: 5 ItemSpacing: 5 Width: 593 Height: 235 diff --git a/mods/ra/chrome/lobby.yaml b/mods/ra/chrome/lobby.yaml index 20656b3a73..62fbe85d35 100644 --- a/mods/ra/chrome/lobby.yaml +++ b/mods/ra/chrome/lobby.yaml @@ -96,6 +96,7 @@ Background@SERVER_LOBBY: Y: PARENT_BOTTOM - HEIGHT - 52 Width: 818 Height: 210 + TopBottomSpacing: 2 ItemSpacing: 2 Children: Container@CHAT_TEMPLATE: diff --git a/mods/ra/chrome/settings.yaml b/mods/ra/chrome/settings.yaml index d4186450c6..ae228f33eb 100644 --- a/mods/ra/chrome/settings.yaml +++ b/mods/ra/chrome/settings.yaml @@ -400,6 +400,7 @@ Background@SETTINGS_PANEL: X: 15 Y: 155 Width: 560 + TopBottomSpacing: 4 ItemSpacing: 4 Height: 190 Children: diff --git a/mods/ts/chrome/dropdowns.yaml b/mods/ts/chrome/dropdowns.yaml index 604276eaff..471266fe44 100644 --- a/mods/ts/chrome/dropdowns.yaml +++ b/mods/ts/chrome/dropdowns.yaml @@ -98,6 +98,7 @@ ScrollPanel@SPECTATOR_DROPDOWN_TEMPLATE: ScrollPanel@NEWS_PANEL: Width: 370 Height: 265 + TopBottomSpacing: 5 ItemSpacing: 5 Children: Container@NEWS_ITEM_TEMPLATE: