From 85c519c0739f69d4e7fbe9df3ee7e42a316a99ec Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Tue, 17 May 2011 13:42:34 +1200 Subject: [PATCH] Normalize checkboxes --- OpenRA.Game/Widgets/CheckboxWidget.cs | 79 +++++++++--------- OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs | 14 ++-- OpenRA.Mods.Cnc/Widgets/CncLobbyLogic.cs | 8 +- OpenRA.Mods.Cnc/Widgets/CncMenuButton.cs | 31 +------ .../Widgets/CncMusicPlayerLogic.cs | 4 +- .../Widgets/CncServerCreationLogic.cs | 2 +- OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs | 18 ++-- mods/cnc/chrome.yaml | 56 ++++++++++++- mods/cnc/chrome/cheats.yaml | 14 ++-- mods/cnc/chrome/createserver.yaml | 2 +- mods/cnc/chrome/lobby.yaml | 8 +- mods/cnc/chrome/music.yaml | 4 +- mods/cnc/chrome/preferences.yaml | 16 ++-- mods/cnc/uibits/buttons.png | Bin 20097 -> 19598 bytes mods/ra/chrome.yaml | 55 +++++++++++- 15 files changed, 192 insertions(+), 119 deletions(-) diff --git a/OpenRA.Game/Widgets/CheckboxWidget.cs b/OpenRA.Game/Widgets/CheckboxWidget.cs index beddc6ff75..9ad55f83f8 100644 --- a/OpenRA.Game/Widgets/CheckboxWidget.cs +++ b/OpenRA.Game/Widgets/CheckboxWidget.cs @@ -15,40 +15,32 @@ using System.Reflection; namespace OpenRA.Widgets { - public class CheckboxWidget : Widget + public class CheckboxWidget : ButtonWidget { - public string Text = ""; - public int baseLine = 1; - public bool Bold = false; public Func IsChecked = () => false; - public event Action OnChange = _ => {}; + public int BaseLine = 1; object boundObject; bool boundReadOnly; FieldInfo boundField; + [Obsolete] public event Action OnChange = _ => {}; - public override void DrawInner() + public CheckboxWidget() + : base() { - var font = Bold ? Game.Renderer.Fonts["Bold"] : Game.Renderer.Fonts["Regular"]; - var pos = RenderOrigin; - var rect = RenderBounds; - var check = new Rectangle(rect.Location, - new Size(Bounds.Height, Bounds.Height)); - WidgetUtils.DrawPanel("dialog3", check); - - var textSize = font.Measure(Text); - font.DrawText(Text, - new float2(rect.Left + rect.Height * 1.5f, - pos.Y - baseLine + (Bounds.Height - textSize.Y)/2), Color.White); - - if ((boundObject != null && (bool)boundField.GetValue(boundObject)) || IsChecked()) - WidgetUtils.DrawRGBA( - ChromeProvider.GetImage("checkbox", "checked"), - new float2(rect.Left + 2, rect.Top + 2)); + OnClick = OldClickBehavior; + IsChecked = () => (boundObject != null && (bool)boundField.GetValue(boundObject)); } - public void Bind(object obj, string field) { Bind(obj, field, false); } - public void BindReadOnly(object obj, string field) { Bind(obj, field, true); } + protected CheckboxWidget(CheckboxWidget widget) + : base(widget) + { + OnClick = OldClickBehavior; + IsChecked = () => (boundObject != null && (bool)boundField.GetValue(boundObject)); + } + + [Obsolete] public void Bind(object obj, string field) { Bind(obj, field, false); } + [Obsolete] public void BindReadOnly(object obj, string field) { Bind(obj, field, true); } void Bind(object obj, string field, bool readOnly) { @@ -56,14 +48,9 @@ namespace OpenRA.Widgets boundReadOnly = readOnly; boundField = obj.GetType().GetField(field); } - - // TODO: CheckboxWidget doesn't support raising events for mouse input - public override bool HandleMouseInput(MouseInput mi) + + void OldClickBehavior() { - // Checkboxes require lmb - if (mi.Button != MouseButton.Left || mi.Event != MouseInputEvent.Down) - return false; - bool newVal = !IsChecked(); if (boundObject != null && !boundReadOnly) { @@ -72,15 +59,31 @@ namespace OpenRA.Widgets } OnChange(newVal); - return true; } - - public CheckboxWidget() : base() { } - - protected CheckboxWidget(CheckboxWidget other) - : base(other) + + public override void DrawInner() { - Text = other.Text; + if (Font == "Regular" && Bold) + Font = "Bold"; + + var font = Game.Renderer.Fonts[Font]; + var rect = RenderBounds; + var check = new Rectangle(rect.Location, new Size(Bounds.Height, Bounds.Height)); + var state = IsDisabled() ? "checkbox-disabled" : + Depressed ? "checkbox-pressed" : + RenderBounds.Contains(Viewport.LastMousePos) ? "checkbox-hover" : + "checkbox"; + + WidgetUtils.DrawPanel(state, check); + + var textSize = font.Measure(Text); + font.DrawText(Text, + new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - BaseLine + (Bounds.Height - textSize.Y)/2), Color.White); + + if (IsChecked() || Depressed) + WidgetUtils.DrawRGBA( + ChromeProvider.GetImage("checkbox-bits", Depressed ? "pressed" : "checked"), + new float2(rect.Left + 2, rect.Top + 2)); } public override Widget Clone() { return new CheckboxWidget(this); } diff --git a/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs index 6969da9f14..0b7d6a4f2f 100644 --- a/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs @@ -32,11 +32,11 @@ namespace OpenRA.Mods.Cnc.Widgets var panel = widget.GetWidget("CHEATS_PANEL"); var devTrait = world.LocalPlayer.PlayerActor.Trait(); - var shroudCheckbox = panel.GetWidget("SHROUD_CHECKBOX"); + var shroudCheckbox = panel.GetWidget("SHROUD_CHECKBOX"); shroudCheckbox.IsChecked = () => devTrait.DisableShroud; shroudCheckbox.OnClick = () => Order(world, "DevShroud"); - var pathCheckbox = panel.GetWidget("PATHDEBUG_CHECKBOX"); + var pathCheckbox = panel.GetWidget("PATHDEBUG_CHECKBOX"); pathCheckbox.IsChecked = () => devTrait.PathDebug; pathCheckbox.OnClick = () => Order(world, "DevPathDebug"); @@ -44,23 +44,23 @@ namespace OpenRA.Mods.Cnc.Widgets panel.GetWidget("GIVE_CASH_BUTTON").OnClick = () => world.IssueOrder(new Order("DevGiveCash", world.LocalPlayer.PlayerActor, false)); - var fastBuildCheckbox = panel.GetWidget("INSTANT_BUILD_CHECKBOX"); + var fastBuildCheckbox = panel.GetWidget("INSTANT_BUILD_CHECKBOX"); fastBuildCheckbox.IsChecked = () => devTrait.FastBuild; fastBuildCheckbox.OnClick = () => Order(world, "DevFastBuild"); - var fastChargeCheckbox = panel.GetWidget("INSTANT_CHARGE_CHECKBOX"); + var fastChargeCheckbox = panel.GetWidget("INSTANT_CHARGE_CHECKBOX"); fastChargeCheckbox.IsChecked = () => devTrait.FastCharge; fastChargeCheckbox.OnClick = () => Order(world, "DevFastCharge"); - var allTechCheckbox = panel.GetWidget("ENABLE_TECH_CHECKBOX"); + var allTechCheckbox = panel.GetWidget("ENABLE_TECH_CHECKBOX"); allTechCheckbox.IsChecked = () => devTrait.AllTech; allTechCheckbox.OnClick = () => Order(world, "DevEnableTech"); - var powerCheckbox = panel.GetWidget("UNLIMITED_POWER_CHECKBOX"); + var powerCheckbox = panel.GetWidget("UNLIMITED_POWER_CHECKBOX"); powerCheckbox.IsChecked = () => devTrait.UnlimitedPower; powerCheckbox.OnClick = () => Order(world, "DevUnlimitedPower"); - var buildAnywhereCheckbox = panel.GetWidget("BUILD_ANYWHERE_CHECKBOX"); + var buildAnywhereCheckbox = panel.GetWidget("BUILD_ANYWHERE_CHECKBOX"); buildAnywhereCheckbox.IsChecked = () => devTrait.BuildAnywhere; buildAnywhereCheckbox.OnClick = () => Order(world, "DevBuildAnywhere"); diff --git a/OpenRA.Mods.Cnc/Widgets/CncLobbyLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncLobbyLogic.cs index f0a06307f5..2797439b7a 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncLobbyLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncLobbyLogic.cs @@ -209,13 +209,13 @@ namespace OpenRA.Mods.Cnc.Widgets disconnectButton.OnClick = () => { Widget.CloseWindow(); onExit(); }; var gameStarting = false; - var lockTeamsCheckbox = lobby.GetWidget("LOCKTEAMS_CHECKBOX"); + var lockTeamsCheckbox = lobby.GetWidget("LOCKTEAMS_CHECKBOX"); lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams; lockTeamsCheckbox.IsDisabled = () => !Game.IsHost || gameStarting; lockTeamsCheckbox.OnClick = () => orderManager.IssueOrder(Order.Command( "lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams))); - var allowCheats = lobby.GetWidget("ALLOWCHEATS_CHECKBOX"); + var allowCheats = lobby.GetWidget("ALLOWCHEATS_CHECKBOX"); allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats; allowCheats.IsDisabled = () => !Game.IsHost || gameStarting; allowCheats.OnClick = () => orderManager.IssueOrder(Order.Command( @@ -521,7 +521,7 @@ namespace OpenRA.Mods.Cnc.Widgets team.OnMouseDown = _ => ShowTeamDropDown(team); team.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString(); - var status = template.GetWidget("STATUS"); + var status = template.GetWidget("STATUS"); status.IsChecked = () => c.State == Session.ClientState.Ready; status.OnClick += CycleReady; @@ -553,7 +553,7 @@ namespace OpenRA.Mods.Cnc.Widgets var team = template.GetWidget("TEAM"); team.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString(); - var status = template.GetWidget("STATUS"); + var status = template.GetWidget("STATUS"); status.IsChecked = () => c.State == Session.ClientState.Ready; if (c.Index == orderManager.LocalClient.Index) status.OnClick += CycleReady; diff --git a/OpenRA.Mods.Cnc/Widgets/CncMenuButton.cs b/OpenRA.Mods.Cnc/Widgets/CncMenuButton.cs index f7b9c21e40..62191d2930 100644 --- a/OpenRA.Mods.Cnc/Widgets/CncMenuButton.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncMenuButton.cs @@ -13,39 +13,10 @@ using System.Collections.Generic; using System.Drawing; using OpenRA.Graphics; using OpenRA.Widgets; +using System.Reflection; namespace OpenRA.Mods.Cnc.Widgets { - public class CncCheckboxWidget : ButtonWidget - { - public CncCheckboxWidget() - : base() { } - protected CncCheckboxWidget(CncCheckboxWidget widget) - : base(widget) { } - - public Func IsChecked = () => false; - public int baseLine = 1; - - public override void DrawInner() - { - var font = Game.Renderer.Fonts[Font]; - var rect = RenderBounds; - ButtonWidget.DrawBackground(new Rectangle(rect.Location, new Size(Bounds.Height, Bounds.Height)), - IsDisabled(), Depressed, RenderBounds.Contains(Viewport.LastMousePos)); - - var textSize = font.Measure(Text); - font.DrawText(Text, - new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - baseLine + (Bounds.Height - textSize.Y)/2), Color.White); - - if (IsChecked()) - WidgetUtils.DrawRGBA( - ChromeProvider.GetImage("checkbox", "checked"), - new float2(rect.Left + 2, rect.Top + 2)); - } - - public override Widget Clone() { return new CncCheckboxWidget(this); } - } - public class CncDropDownButtonWidget : DropDownButtonWidget { public CncDropDownButtonWidget() : base() { } diff --git a/OpenRA.Mods.Cnc/Widgets/CncMusicPlayerLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncMusicPlayerLogic.cs index 079a30a8b8..8874a06c04 100644 --- a/OpenRA.Mods.Cnc/Widgets/CncMusicPlayerLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncMusicPlayerLogic.cs @@ -81,11 +81,11 @@ namespace OpenRA.Mods.Cnc.Widgets prevButton.OnClick = () => { currentSong = GetPrevSong(); Play(); }; prevButton.IsDisabled = noMusic; - var shuffleCheckbox = panel.GetWidget("SHUFFLE"); + var shuffleCheckbox = panel.GetWidget("SHUFFLE"); shuffleCheckbox.IsChecked = () => Game.Settings.Sound.Shuffle; shuffleCheckbox.OnClick = () => Game.Settings.Sound.Shuffle ^= true; - var repeatCheckbox = panel.GetWidget("REPEAT"); + var repeatCheckbox = panel.GetWidget("REPEAT"); repeatCheckbox.IsChecked = () => Game.Settings.Sound.Repeat; repeatCheckbox.OnClick = () => Game.Settings.Sound.Repeat ^= true; diff --git a/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs index 7e3fa2fa5f..1eced5335d 100644 --- a/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs @@ -62,7 +62,7 @@ namespace OpenRA.Mods.Cnc.Widgets externalPort.Text = settings.Server.ExternalPort.ToString(); externalPort.IsDisabled = () => !advertiseOnline; - var advertiseCheckbox = panel.GetWidget("ADVERTISE_CHECKBOX"); + var advertiseCheckbox = panel.GetWidget("ADVERTISE_CHECKBOX"); advertiseCheckbox.IsChecked = () => advertiseOnline; advertiseCheckbox.OnClick = () => advertiseOnline ^= true; diff --git a/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs index 107d41b221..88bf984d86 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs @@ -64,22 +64,22 @@ namespace OpenRA.Mods.Cnc.Widgets // Debug var perftext = Game.Settings.Debug.PerfText; - var perftextCheckbox = generalPane.GetWidget("PERFTEXT_CHECKBOX"); + var perftextCheckbox = generalPane.GetWidget("PERFTEXT_CHECKBOX"); perftextCheckbox.IsChecked = () => perftext; perftextCheckbox.OnClick = () => perftext ^= true; var perfgraph = Game.Settings.Debug.PerfGraph; - var perfgraphCheckbox = generalPane.GetWidget("PERFGRAPH_CHECKBOX"); + var perfgraphCheckbox = generalPane.GetWidget("PERFGRAPH_CHECKBOX"); perfgraphCheckbox.IsChecked = () => perfgraph; perfgraphCheckbox.OnClick = () => perfgraph ^= true; var matchtimer = Game.Settings.Game.MatchTimer; - var matchtimerCheckbox = generalPane.GetWidget("MATCHTIME_CHECKBOX"); + var matchtimerCheckbox = generalPane.GetWidget("MATCHTIME_CHECKBOX"); matchtimerCheckbox.IsChecked = () => matchtimer; matchtimerCheckbox.OnClick = () => matchtimer ^= true; var checkunsynced = Game.Settings.Debug.SanityCheckUnsyncedCode; - var checkunsyncedCheckbox = generalPane.GetWidget("CHECKUNSYNCED_CHECKBOX"); + var checkunsyncedCheckbox = generalPane.GetWidget("CHECKUNSYNCED_CHECKBOX"); checkunsyncedCheckbox.IsChecked = () => checkunsynced; checkunsyncedCheckbox.OnClick = () => checkunsynced ^= true; @@ -110,7 +110,7 @@ namespace OpenRA.Mods.Cnc.Widgets musicSlider.SetOffset(musicVolume); var shellmapMusic = Game.Settings.Game.ShellmapMusic; - var shellmapMusicCheckbox = generalPane.GetWidget("SHELLMAP_MUSIC"); + var shellmapMusicCheckbox = generalPane.GetWidget("SHELLMAP_MUSIC"); shellmapMusicCheckbox.IsChecked = () => shellmapMusic; shellmapMusicCheckbox.OnClick = () => shellmapMusic ^= true; @@ -122,8 +122,8 @@ namespace OpenRA.Mods.Cnc.Widgets var inputButton = panel.GetWidget("INPUT_BUTTON"); inputButton.OnClick = () => Settings = PanelType.Input; inputButton.IsDisabled = () => Settings == PanelType.Input; - - inputPane.GetWidget("CLASSICORDERS_CHECKBOX").IsDisabled = () => true; + + inputPane.GetWidget("CLASSICORDERS_CHECKBOX").IsDisabled = () => true; var scrollStrength = Game.Settings.Game.ViewportEdgeScrollStep; var scrollSlider = inputPane.GetWidget("SCROLLSPEED_SLIDER"); @@ -131,7 +131,7 @@ namespace OpenRA.Mods.Cnc.Widgets scrollSlider.SetOffset(scrollStrength); var edgescroll = Game.Settings.Game.ViewportEdgeScroll; - var edgescrollCheckbox = inputPane.GetWidget("EDGESCROLL_CHECKBOX"); + var edgescrollCheckbox = inputPane.GetWidget("EDGESCROLL_CHECKBOX"); edgescrollCheckbox.IsChecked = () => edgescroll; edgescrollCheckbox.OnClick = () => edgescroll ^= true; @@ -141,7 +141,7 @@ namespace OpenRA.Mods.Cnc.Widgets mouseScrollDropdown.GetText = () => mouseScroll.ToString(); var teamchat = Game.Settings.Game.TeamChatToggle; - var teamchatCheckbox = inputPane.GetWidget("TEAMCHAT_CHECKBOX"); + var teamchatCheckbox = inputPane.GetWidget("TEAMCHAT_CHECKBOX"); teamchatCheckbox.IsChecked = () => teamchat; teamchatCheckbox.OnClick = () => teamchat ^= true; diff --git a/mods/cnc/chrome.yaml b/mods/cnc/chrome.yaml index a668ea97e7..e181ebfd22 100644 --- a/mods/cnc/chrome.yaml +++ b/mods/cnc/chrome.yaml @@ -181,6 +181,59 @@ slider-track: chrome.png corner-bl: 64,126,2,2 corner-br: 126,126,2,2 + +# A copy of button +checkbox: chrome.png + background: 2,194,60,60 + border-r: 62,194,2,60 + border-l: 0,194,2,60 + border-b: 2,254,60,2 + border-t: 2,192,60,2 + corner-tl: 0,192,2,2 + corner-tr: 62,192,2,2 + corner-bl: 0,254,2,2 + corner-br: 62,254,2,2 + +# A copy of button-hover +checkbox-hover: chrome.png + background: 2,130,60,60 + border-r: 62,132,2,60 + border-l: 0,130,2,60 + border-b: 2,190,60,2 + border-t: 2,128,60,2 + corner-tl: 0,128,2,2 + corner-tr: 62,128,2,2 + corner-bl: 0,190,2,2 + corner-br: 62,190,2,2 + +# A copy of button-disabled +checkbox-disabled: chrome.png + background: 66,130,60,60 + border-r: 126,130,2,60 + border-l: 64,130,2,60 + border-b: 66,190,60,2 + border-t: 66,128,60,2 + corner-tl: 64,128,2,2 + corner-tr: 126,128,2,2 + corner-bl: 64,190,2,2 + corner-br: 126,190,2,2 + +# A copy of button-pressed +checkbox-pressed: chrome.png + background: 66,194,60,60 + border-r: 126,194,2,60 + border-l: 64,194,2,60 + border-b: 66,254,60,2 + border-t: 66,192,60,2 + corner-tl: 64,192,2,2 + corner-tr: 126,192,2,2 + corner-bl: 64,254,2,2 + corner-br: 126,254,2,2 + +checkbox-bits: buttons.png + checked: 0,112,16,16 + pressed: 0,128,16,16 + panel-black: chrome.png background: 66,2,60,60 border-r: 126,2,2,60 @@ -258,9 +311,6 @@ scrollbar: buttons.png down_arrow: 16,112,16,16 up_arrow: 32,112,16,16 -checkbox: buttons.png - checked: 0,112,16,16 - strategic: strategic.png unowned: 0,0,32,32 critical_unowned: 0,32,32,32 diff --git a/mods/cnc/chrome/cheats.yaml b/mods/cnc/chrome/cheats.yaml index 281d57cf9a..de8d2d69af 100644 --- a/mods/cnc/chrome/cheats.yaml +++ b/mods/cnc/chrome/cheats.yaml @@ -18,49 +18,49 @@ Container@CHEATS_PANEL: Height:110 Background:panel-black Children: - CncCheckbox@INSTANT_BUILD: + Checkbox@INSTANT_BUILD: Id:INSTANT_BUILD_CHECKBOX X:15 Y:15 Width:200 Height:20 Text:Instant Build Speed - CncCheckbox@ENABLE_TECH: + Checkbox@ENABLE_TECH: Id:ENABLE_TECH_CHECKBOX X:15 Y:45 Width:200 Height:20 Text:Build Everything - CncCheckbox@BUILD_ANYWHERE: + Checkbox@BUILD_ANYWHERE: Id:BUILD_ANYWHERE_CHECKBOX X:15 Y:75 Width:200 Height:20 Text:Build Anywhere - CncCheckbox@UNLIMITED_POWER: + Checkbox@UNLIMITED_POWER: Id:UNLIMITED_POWER_CHECKBOX X:200 Y:15 Width:200 Height:20 Text:Unlimited Power - CncCheckbox@INSTANT_CHARGE: + Checkbox@INSTANT_CHARGE: Id:INSTANT_CHARGE_CHECKBOX X:200 Y:45 Width:200 Height:20 Text:Instant Charge Time - CncCheckbox@CHECKBOX_SHROUD: + Checkbox@CHECKBOX_SHROUD: Id:SHROUD_CHECKBOX X:400 Y:15 Height:20 Width:200 Text:Disable Shroud - CncCheckbox@CHECKBOX_PATHDEBUG: + Checkbox@CHECKBOX_PATHDEBUG: Id:PATHDEBUG_CHECKBOX X:400 Y:45 diff --git a/mods/cnc/chrome/createserver.yaml b/mods/cnc/chrome/createserver.yaml index 263b0309ca..f01e8c0d58 100644 --- a/mods/cnc/chrome/createserver.yaml +++ b/mods/cnc/chrome/createserver.yaml @@ -100,7 +100,7 @@ Container@CREATESERVER_PANEL: MaxLength:5 Height:25 Text:1234 - CncCheckbox@ADVERTISE_CHECKBOX: + Checkbox@ADVERTISE_CHECKBOX: Id:ADVERTISE_CHECKBOX X:110 Y:155 diff --git a/mods/cnc/chrome/lobby.yaml b/mods/cnc/chrome/lobby.yaml index 1359d5d115..0324f3da8b 100644 --- a/mods/cnc/chrome/lobby.yaml +++ b/mods/cnc/chrome/lobby.yaml @@ -31,14 +31,14 @@ Container@SERVER_LOBBY: Y:1 Width:192 Height:192 - CncCheckbox@LOCKTEAMS_CHECKBOX: + Checkbox@LOCKTEAMS_CHECKBOX: Id:LOCKTEAMS_CHECKBOX X:PARENT_RIGHT-209 Y:230 Width:130 Height:20 Text: Lock Teams - CncCheckbox@ALLOWCHEATS_CHECKBOX: + Checkbox@ALLOWCHEATS_CHECKBOX: Id:ALLOWCHEATS_CHECKBOX X:PARENT_RIGHT-209 Y:255 @@ -107,7 +107,7 @@ Container@SERVER_LOBBY: Height:25 X:390 Font:Regular - CncCheckbox@STATUS: + Checkbox@STATUS: Id:STATUS X:448 Y:2 @@ -179,7 +179,7 @@ Container@SERVER_LOBBY: Align:Center X:390 Y:0 - CncCheckbox@STATUS: + Checkbox@STATUS: Id:STATUS X:448 Y:2 diff --git a/mods/cnc/chrome/music.yaml b/mods/cnc/chrome/music.yaml index b08b0ad24a..b81ab588c1 100644 --- a/mods/cnc/chrome/music.yaml +++ b/mods/cnc/chrome/music.yaml @@ -155,14 +155,14 @@ Container@MUSIC_PANEL: Height:25 Align:Center Font:Bold - CncCheckbox@SHUFFLE: + Checkbox@SHUFFLE: Id:SHUFFLE X:15 Y:PARENT_BOTTOM-15-HEIGHT Width:85 Height:20 Text:Shuffle - CncCheckbox@REPEAT: + Checkbox@REPEAT: Id:REPEAT X:PARENT_RIGHT-15-WIDTH Y:PARENT_BOTTOM-15-HEIGHT diff --git a/mods/cnc/chrome/preferences.yaml b/mods/cnc/chrome/preferences.yaml index 29693f3ec8..3d5ed96c8f 100644 --- a/mods/cnc/chrome/preferences.yaml +++ b/mods/cnc/chrome/preferences.yaml @@ -60,7 +60,7 @@ Container@SETTINGS_PANEL: Font:Bold Text:Debug Align:Center - CncCheckbox@PERFINFO_CHECKBOX: + Checkbox@PERFINFO_CHECKBOX: Id:PERFTEXT_CHECKBOX X:15 Y:120 @@ -68,7 +68,7 @@ Container@SETTINGS_PANEL: Height:20 Font:Regular Text:Show Performance Text - CncCheckbox@PERFGRAPH_CHECKBOX: + Checkbox@PERFGRAPH_CHECKBOX: Id:PERFGRAPH_CHECKBOX X:15 Y:150 @@ -76,7 +76,7 @@ Container@SETTINGS_PANEL: Height:20 Font:Regular Text:Show Performance Graph - CncCheckbox@MATCHTIME_CHECKBOX: + Checkbox@MATCHTIME_CHECKBOX: Id:MATCHTIME_CHECKBOX X:15 Y:180 @@ -84,7 +84,7 @@ Container@SETTINGS_PANEL: Height:20 Font:Regular Text:Show Match Timer - CncCheckbox@CHECKUNSYNCED_CHECKBOX: + Checkbox@CHECKUNSYNCED_CHECKBOX: Id:CHECKUNSYNCED_CHECKBOX X:15 Y:210 @@ -190,7 +190,7 @@ Container@SETTINGS_PANEL: Width:240 Height:20 Ticks:5 - CncCheckbox@SHELLMAP_MUSIC: + Checkbox@SHELLMAP_MUSIC: Id:SHELLMAP_MUSIC X:375 Y:200 @@ -212,7 +212,7 @@ Container@SETTINGS_PANEL: X:15 Y:20 Width:340 - CncCheckbox@CLASSICORDERS_CHECKBOX: + Checkbox@CLASSICORDERS_CHECKBOX: Id:CLASSICORDERS_CHECKBOX X:15 Y:35 @@ -241,7 +241,7 @@ Container@SETTINGS_PANEL: Height:20 Ticks:5 Range:10,50 - CncCheckbox@EDGESCROLL_CHECKBOX: + Checkbox@EDGESCROLL_CHECKBOX: Id:EDGESCROLL_CHECKBOX X:15 Y:150 @@ -288,7 +288,7 @@ Container@SETTINGS_PANEL: Font:Bold Text:Keyboard Input Align:Center - CncCheckbox@TEAMCHAT_CHECKBOX: + Checkbox@TEAMCHAT_CHECKBOX: Id:TEAMCHAT_CHECKBOX X:375 Y:35 diff --git a/mods/cnc/uibits/buttons.png b/mods/cnc/uibits/buttons.png index 9efcfbc8a140f4008c6602aa7a6e918c59ff6ade..db1b273c02dceb7d7189903ba12506c407e528d8 100644 GIT binary patch delta 17037 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 b&(9F