diff --git a/OpenRA.Game/Widgets/ButtonWidget.cs b/OpenRA.Game/Widgets/ButtonWidget.cs index 861edfdd66..25042782d0 100644 --- a/OpenRA.Game/Widgets/ButtonWidget.cs +++ b/OpenRA.Game/Widgets/ButtonWidget.cs @@ -117,7 +117,7 @@ namespace OpenRA.Widgets public override int2 ChildOrigin { get { return RenderOrigin + ((Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0)); } } - + public override void Draw() { var rb = RenderBounds; @@ -128,7 +128,7 @@ namespace OpenRA.Widgets var s = font.Measure(text); var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0); - DrawBackground("button", rb, disabled, Depressed, Widget.MouseOverWidget == this); + DrawBackground(rb, disabled, Depressed, Widget.MouseOverWidget == this); font.DrawText(text, new int2(rb.X + (UsableWidth - s.X)/ 2, rb.Y + (Bounds.Height - s.Y) / 2) + stateOffset, disabled ? Color.Gray : Color.White); } @@ -136,6 +136,11 @@ namespace OpenRA.Widgets public override Widget Clone() { return new ButtonWidget(this); } public virtual int UsableWidth { get { return Bounds.Width; } } + public virtual void DrawBackground(Rectangle rect, bool disabled, bool pressed, bool hover) + { + ButtonWidget.DrawBackground("button", rect, disabled, pressed, hover); + } + public static void DrawBackground(string baseName, Rectangle rect, bool disabled, bool pressed, bool hover) { var state = disabled ? "-disabled" : diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index 8e97ead0fd..a9ee15e4e3 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -98,12 +98,12 @@ - + diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/ButtonTooltipLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/ButtonTooltipLogic.cs index 9cb12c6d32..ac798f1ce8 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/ButtonTooltipLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/ButtonTooltipLogic.cs @@ -17,7 +17,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic { [ObjectCreator.UseCtor] public ButtonTooltipLogic([ObjectCreator.Param] Widget widget, - [ObjectCreator.Param] TooltipButtonWidget button) + [ObjectCreator.Param] ToggleButtonWidget button) { var label = widget.GetWidget("LABEL"); var hotkey = widget.GetWidget("HOTKEY"); diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs index 4dc0947df9..03224715c8 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs @@ -44,7 +44,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic } } - void SetupProductionGroupButton(ButtonWidget button, string group) + void SetupProductionGroupButton(ToggleButtonWidget button, string group) { Action selectTab = reverse => { @@ -57,7 +57,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic button.IsDisabled = () => queueTabs.Groups[group].Tabs.Count == 0; button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift)); button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift)); - + button.IsToggled = () => queueTabs.QueueGroup == group; var chromeName = group.ToLowerInvariant(); var icon = button.GetWidget("ICON"); icon.GetImageName = () => button.IsDisabled() ? chromeName+"-disabled" : @@ -128,11 +128,11 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic world.ActorRemoved += queueTabs.ActorChanged; var queueTypes = sidebarRoot.GetWidget("PRODUCTION_TYPES"); - SetupProductionGroupButton(queueTypes.GetWidget("BUILDING"), "Building"); - SetupProductionGroupButton(queueTypes.GetWidget("DEFENSE"), "Defense"); - SetupProductionGroupButton(queueTypes.GetWidget("INFANTRY"), "Infantry"); - SetupProductionGroupButton(queueTypes.GetWidget("VEHICLE"), "Vehicle"); - SetupProductionGroupButton(queueTypes.GetWidget("AIRCRAFT"), "Aircraft"); + SetupProductionGroupButton(queueTypes.GetWidget("BUILDING"), "Building"); + SetupProductionGroupButton(queueTypes.GetWidget("DEFENSE"), "Defense"); + SetupProductionGroupButton(queueTypes.GetWidget("INFANTRY"), "Infantry"); + SetupProductionGroupButton(queueTypes.GetWidget("VEHICLE"), "Vehicle"); + SetupProductionGroupButton(queueTypes.GetWidget("AIRCRAFT"), "Aircraft"); playerWidgets.GetWidget("OPTIONS_BUTTON").OnClick = onOptionsClick; diff --git a/OpenRA.Mods.Cnc/Widgets/TooltipButtonWidget.cs b/OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs similarity index 75% rename from OpenRA.Mods.Cnc/Widgets/TooltipButtonWidget.cs rename to OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs index b62ae2bc58..8432aae896 100644 --- a/OpenRA.Mods.Cnc/Widgets/TooltipButtonWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs @@ -8,26 +8,29 @@ */ #endregion +using System; +using System.Drawing; using OpenRA.FileFormats; using OpenRA.Widgets; namespace OpenRA.Mods.Cnc.Widgets { - public class TooltipButtonWidget : ButtonWidget + public class ToggleButtonWidget : ButtonWidget { public readonly string TooltipTemplate = "BUTTON_TOOLTIP"; public readonly string TooltipText; public readonly string TooltipContainer; + public Func IsToggled = () => false; Lazy tooltipContainer; - public TooltipButtonWidget() + public ToggleButtonWidget() : base() { tooltipContainer = new Lazy(() => Widget.RootWidget.GetWidget(TooltipContainer)); } - protected TooltipButtonWidget(TooltipButtonWidget other) + protected ToggleButtonWidget(ToggleButtonWidget other) : base(other) { TooltipTemplate = other.TooltipTemplate; @@ -48,5 +51,11 @@ namespace OpenRA.Mods.Cnc.Widgets if (TooltipContainer == null) return; tooltipContainer.Value.RemoveTooltip(); } + + public override void DrawBackground(Rectangle rect, bool disabled, bool pressed, bool hover) + { + var baseName = IsToggled() ? "button-toggled" : "button"; + ButtonWidget.DrawBackground(baseName, rect, disabled, pressed, hover); + } } } \ No newline at end of file diff --git a/artsrc/cnc/chrome.svg b/artsrc/cnc/chrome.svg index 7cda1a9434..a78a6a1ae2 100644 --- a/artsrc/cnc/chrome.svg +++ b/artsrc/cnc/chrome.svg @@ -61,9 +61,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="4" - inkscape:cx="289.47924" - inkscape:cy="458.66173" + inkscape:zoom="2" + inkscape:cx="159.47924" + inkscape:cy="358.66173" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" @@ -1234,5 +1234,45 @@ id="path3178" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" /> + + + + diff --git a/mods/cnc/chrome.yaml b/mods/cnc/chrome.yaml index 8f4a7e8cf2..21b9e17b4f 100644 --- a/mods/cnc/chrome.yaml +++ b/mods/cnc/chrome.yaml @@ -53,7 +53,51 @@ button-pressed: chrome.png corner-tr: 126,192,2,2 corner-bl: 64,254,2,2 corner-br: 126,254,2,2 - + +button-toggled: chrome.png + background: 257,129,30,30 + border-r: 287,129,1,30 + border-l: 256,129,1,30 + border-b: 257,159,30,1 + border-t: 257,128,30,1 + corner-tl: 256,128,1,1 + corner-tr: 287,128,1,1 + corner-bl: 256,159,1,1 + corner-br: 287,159,1,1 + +button-toggled-hover: chrome.png + background: 289,129,30,30 + border-r: 319,129,1,30 + border-l: 288,129,1,30 + border-b: 289,159,30,1 + border-t: 289,128,30,1 + corner-tl: 288,128,1,1 + corner-tr: 319,128,1,1 + corner-bl: 288,159,1,1 + corner-br: 319,159,1,1 + +button-toggled-pressed: chrome.png + background: 257,161,30,30 + border-r: 287,161,1,30 + border-l: 256,161,1,30 + border-b: 257,191,30,1 + border-t: 257,160,30,1 + corner-tl: 256,160,1,1 + corner-tr: 287,160,1,1 + corner-bl: 256,191,1,1 + corner-br: 287,191,1,1 + +button-toggled-disabled: chrome.png + background: 289,161,30,30 + border-r: 319,161,1,30 + border-l: 288,161,1,30 + border-b: 289,191,30,1 + border-t: 289,160,30,1 + corner-tl: 288,160,1,1 + corner-tr: 319,160,1,1 + corner-bl: 288,191,1,1 + corner-br: 319,191,1,1 + scrollthumb: chrome.png background: 2,194,60,60 border-r: 62,194,2,60 diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 173aa48507..119eeaf894 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -56,7 +56,7 @@ Container@INGAME_ROOT: Container@OBSERVER_WIDGETS: Id:OBSERVER_WIDGETS Children: - TooltipButton@OPTIONS_BUTTON: + ToggleButton@OPTIONS_BUTTON: Id:OPTIONS_BUTTON Key:escape X:WINDOW_RIGHT-202 @@ -127,7 +127,7 @@ Container@PLAYER_WIDGETS: Height:240 Background:panel-black Children: - TooltipButton@OPTIONS_BUTTON: + ToggleButton@OPTIONS_BUTTON: Id:OPTIONS_BUTTON Key:escape X:42 @@ -146,7 +146,7 @@ Container@PLAYER_WIDGETS: Y:5 ImageCollection:order-icons ImageName:options - TooltipButton@SELL_BUTTON: + ToggleButton@SELL_BUTTON: Id:SELL_BUTTON Key: [ X:82 @@ -164,7 +164,7 @@ Container@PLAYER_WIDGETS: X:7 Y:5 ImageCollection:order-icons - TooltipButton@REPAIR_BUTTON: + ToggleButton@REPAIR_BUTTON: Id:REPAIR_BUTTON Key: ] X:122 @@ -246,7 +246,7 @@ Container@PLAYER_WIDGETS: Width:170 Height:30 Children: - TooltipButton@BUILDING: + ToggleButton@BUILDING: Id:BUILDING Width:30 Height:30 @@ -261,7 +261,7 @@ Container@PLAYER_WIDGETS: X:7 Y:7 ImageCollection:production-icons - TooltipButton@DEFENSE: + ToggleButton@DEFENSE: Id:DEFENSE X:35 Width:30 @@ -277,7 +277,7 @@ Container@PLAYER_WIDGETS: X:7 Y:7 ImageCollection:production-icons - TooltipButton@INFANTRY: + ToggleButton@INFANTRY: Id:INFANTRY X:70 Width:30 @@ -293,7 +293,7 @@ Container@PLAYER_WIDGETS: X:7 Y:7 ImageCollection:production-icons - TooltipButton@VEHICLE: + ToggleButton@VEHICLE: Id:VEHICLE X:105 Width:30 @@ -309,7 +309,7 @@ Container@PLAYER_WIDGETS: X:7 Y:7 ImageCollection:production-icons - TooltipButton@AIRCRAFT: + ToggleButton@AIRCRAFT: Id:AIRCRAFT X:140 Width:30 diff --git a/mods/cnc/uibits/chrome.png b/mods/cnc/uibits/chrome.png index 4c3f63526d..998f9a4aa3 100644 Binary files a/mods/cnc/uibits/chrome.png and b/mods/cnc/uibits/chrome.png differ