From 0c6daf191cf76c40cd569101a0d95c6cf3dc9d90 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Sat, 29 Sep 2012 20:16:05 +1200 Subject: [PATCH] Add button highlighting/glow effect, to be used for the objective button when the objectives update --- OpenRA.Game/Widgets/ButtonWidget.cs | 16 ++++-- OpenRA.Game/Widgets/ScrollPanelWidget.cs | 6 +-- OpenRA.Game/Widgets/SliderWidget.cs | 2 +- .../Widgets/ProductionTabsWidget.cs | 6 +-- OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs | 6 +-- .../Widgets/Logic/IngameChromeLogic.cs | 5 +- .../Widgets/Logic/MissionObjectivesLogic.cs | 12 ++++- mods/ra/chrome.yaml | 46 +++++++++++++++++- mods/ra/uibits/dialog.png | Bin 19241 -> 19422 bytes 9 files changed, 78 insertions(+), 21 deletions(-) diff --git a/OpenRA.Game/Widgets/ButtonWidget.cs b/OpenRA.Game/Widgets/ButtonWidget.cs index 4fc4e832cb..4bc60a33b3 100644 --- a/OpenRA.Game/Widgets/ButtonWidget.cs +++ b/OpenRA.Game/Widgets/ButtonWidget.cs @@ -23,8 +23,10 @@ namespace OpenRA.Widgets public int VisualHeight = ChromeMetrics.Get("ButtonDepth"); public string Font = ChromeMetrics.Get("ButtonFont"); public bool Disabled = false; + public bool Highlighted = false; public Func GetText; public Func IsDisabled; + public Func IsHighlighted; public Action OnMouseDown = _ => {}; public Action OnMouseUp = _ => {}; @@ -39,6 +41,7 @@ namespace OpenRA.Widgets OnMouseUp = _ => OnClick(); OnKeyPress = _ => OnClick(); IsDisabled = () => Disabled; + IsHighlighted = () => Highlighted; } protected ButtonWidget(ButtonWidget widget) @@ -52,6 +55,8 @@ namespace OpenRA.Widgets OnMouseDown = widget.OnMouseDown; Disabled = widget.Disabled; IsDisabled = widget.IsDisabled; + Highlighted = widget.Highlighted; + IsHighlighted = widget.IsHighlighted; OnMouseUp = mi => OnClick(); OnKeyPress = _ => OnClick(); @@ -124,13 +129,14 @@ namespace OpenRA.Widgets { var rb = RenderBounds; var disabled = IsDisabled(); + var highlighted = IsHighlighted(); var font = Game.Renderer.Fonts[Font]; var text = GetText(); var s = font.Measure(text); var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0); - DrawBackground(rb, disabled, Depressed, Ui.MouseOverWidget == this); + DrawBackground(rb, disabled, Depressed, Ui.MouseOverWidget == this, highlighted); font.DrawText(text, new int2(rb.X + (UsableWidth - s.X)/ 2, rb.Y + (Bounds.Height - s.Y) / 2) + stateOffset, disabled ? Color.Gray : Color.White); } @@ -138,17 +144,19 @@ 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) + public virtual void DrawBackground(Rectangle rect, bool disabled, bool pressed, bool hover, bool highlighted) { - ButtonWidget.DrawBackground("button", rect, disabled, pressed, hover); + ButtonWidget.DrawBackground("button", rect, disabled, pressed, hover, highlighted); } - public static void DrawBackground(string baseName, Rectangle rect, bool disabled, bool pressed, bool hover) + public static void DrawBackground(string baseName, Rectangle rect, bool disabled, bool pressed, bool hover, bool highlighted) { var state = disabled ? "-disabled" : pressed ? "-pressed" : hover ? "-hover" : ""; + if (highlighted) + state += "-highlighted"; WidgetUtils.DrawPanel(baseName + state, rect); } diff --git a/OpenRA.Game/Widgets/ScrollPanelWidget.cs b/OpenRA.Game/Widgets/ScrollPanelWidget.cs index c896775306..365670a007 100644 --- a/OpenRA.Game/Widgets/ScrollPanelWidget.cs +++ b/OpenRA.Game/Widgets/ScrollPanelWidget.cs @@ -79,11 +79,11 @@ namespace OpenRA.Widgets var thumbHover = Ui.MouseOverWidget == this && thumbRect.Contains(Viewport.LastMousePos); WidgetUtils.DrawPanel(Background, backgroundRect); WidgetUtils.DrawPanel("scrollpanel-bg", scrollbarRect); - ButtonWidget.DrawBackground("button", upButtonRect, upDisabled, UpPressed, upHover); - ButtonWidget.DrawBackground("button", downButtonRect, downDisabled, DownPressed, downHover); + ButtonWidget.DrawBackground("button", upButtonRect, upDisabled, UpPressed, upHover, false); + ButtonWidget.DrawBackground("button", downButtonRect, downDisabled, DownPressed, downHover, false); if (thumbHeight > 0) - ButtonWidget.DrawBackground("scrollthumb", thumbRect, false, Focused && thumbHover, thumbHover); + ButtonWidget.DrawBackground("scrollthumb", thumbRect, false, Focused && thumbHover, thumbHover, false); var upOffset = !UpPressed || upDisabled ? 4 : 4 + ButtonDepth; var downOffset = !DownPressed || downDisabled ? 4 : 4 + ButtonDepth; diff --git a/OpenRA.Game/Widgets/SliderWidget.cs b/OpenRA.Game/Widgets/SliderWidget.cs index e94a04f00a..a1cf26e6be 100755 --- a/OpenRA.Game/Widgets/SliderWidget.cs +++ b/OpenRA.Game/Widgets/SliderWidget.cs @@ -118,7 +118,7 @@ namespace OpenRA.Widgets // Thumb var thumbHover = Ui.MouseOverWidget == this && tr.Contains(Viewport.LastMousePos); - ButtonWidget.DrawBackground("scrollthumb", tr, IsDisabled(), isMoving, thumbHover); + ButtonWidget.DrawBackground("scrollthumb", tr, IsDisabled(), isMoving, thumbHover, false); } } } diff --git a/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs b/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs index 3e585f4fe5..95f31484ba 100755 --- a/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs @@ -138,8 +138,8 @@ namespace OpenRA.Mods.Cnc.Widgets var rightHover = Ui.MouseOverWidget == this && rightButtonRect.Contains(Viewport.LastMousePos); WidgetUtils.DrawPanel("panel-black", rb); - ButtonWidget.DrawBackground("button", leftButtonRect, leftDisabled, leftPressed, leftHover); - ButtonWidget.DrawBackground("button", rightButtonRect, rightDisabled, rightPressed, rightHover); + ButtonWidget.DrawBackground("button", leftButtonRect, leftDisabled, leftPressed, leftHover, false); + ButtonWidget.DrawBackground("button", rightButtonRect, rightDisabled, rightPressed, rightHover, false); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", leftPressed || leftDisabled ? "left_pressed" : "left_arrow"), new float2(leftButtonRect.Left + 2, leftButtonRect.Top + 2)); @@ -157,7 +157,7 @@ namespace OpenRA.Mods.Cnc.Widgets var rect = new Rectangle(origin.X + ContentWidth, origin.Y, TabWidth, rb.Height); var hover = !leftHover && !rightHover && Ui.MouseOverWidget == this && rect.Contains(Viewport.LastMousePos); var baseName = tab.Queue == CurrentQueue ? "button-toggled" : "button"; - ButtonWidget.DrawBackground(baseName, rect, false, false, hover); + ButtonWidget.DrawBackground(baseName, rect, false, false, hover, false); ContentWidth += TabWidth - 1; int2 textSize = font.Measure(tab.Name); diff --git a/OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs b/OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs index 4b46a67956..a55a807814 100644 --- a/OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/ToggleButtonWidget.cs @@ -53,10 +53,10 @@ namespace OpenRA.Mods.Cnc.Widgets tooltipContainer.Value.RemoveTooltip(); } - public override void DrawBackground(Rectangle rect, bool disabled, bool pressed, bool hover) + public override void DrawBackground(Rectangle rect, bool disabled, bool pressed, bool hover, bool highlighted) { var baseName = IsToggled() ? "button-toggled" : "button"; - ButtonWidget.DrawBackground(baseName, rect, disabled, pressed, hover); + ButtonWidget.DrawBackground(baseName, rect, disabled, pressed, hover, highlighted); } } -} \ No newline at end of file +} diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs index 5a91a546de..4f1cd7a0c2 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs @@ -45,10 +45,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic var objectivesButton = gameRoot.Get("OBJECTIVES_BUTTON"); var objectivesWidget = Game.LoadWidget(world, iop.ObjectivesPanel, Ui.Root, new WidgetArgs()); objectivesWidget.Visible = false; - objectivesButton.OnClick = () => - { - objectivesWidget.Visible = !objectivesWidget.Visible; - }; + objectivesButton.OnClick += () => objectivesWidget.Visible = !objectivesWidget.Visible; objectivesButton.IsVisible = () => world.LocalPlayer != null; } diff --git a/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs index 391d63a6d9..21de67faf2 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs @@ -11,7 +11,6 @@ using System.Linq; using OpenRA.Mods.RA.Missions; using OpenRA.Network; -using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.RA.Widgets.Logic @@ -23,18 +22,26 @@ namespace OpenRA.Mods.RA.Widgets.Logic Widget secondaryPanel; Widget primaryTemplate; Widget secondaryTemplate; + ButtonWidget objectivesButton; [ObjectCreator.UseCtor] public MissionObjectivesLogic(World world, Widget widget) { + var gameRoot = Ui.Root.Get("INGAME_ROOT"); primaryPanel = widget.Get("PRIMARY_OBJECTIVES"); secondaryPanel = widget.Get("SECONDARY_OBJECTIVES"); primaryTemplate = primaryPanel.Get("PRIMARY_OBJECTIVE_TEMPLATE"); secondaryTemplate = secondaryPanel.Get("SECONDARY_OBJECTIVE_TEMPLATE"); + objectives = world.WorldActor.TraitsImplementing().First(); - Game.ConnectionStateChanged += RemoveHandlers; + + objectivesButton = gameRoot.Get("OBJECTIVES_BUTTON"); + objectivesButton.IsHighlighted = () => Game.LocalTick % 60 <= 30 && objectivesButton.Highlighted; + objectivesButton.OnClick += () => objectivesButton.Highlighted = false; + objectives.ObjectivesUpdated += UpdateObjectives; UpdateObjectives(); + Game.ConnectionStateChanged += RemoveHandlers; } public void RemoveHandlers(OrderManager orderManager) @@ -48,6 +55,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic public void UpdateObjectives() { + objectivesButton.Highlighted = true; primaryPanel.RemoveChildren(); secondaryPanel.RemoveChildren(); foreach (var o in objectives.Objectives.Where(o => o.Status != ObjectiveStatus.Inactive)) diff --git a/mods/ra/chrome.yaml b/mods/ra/chrome.yaml index 2bd7854ad6..91be2c8e9a 100644 --- a/mods/ra/chrome.yaml +++ b/mods/ra/chrome.yaml @@ -249,6 +249,17 @@ button: dialog.png corner-bl: 512,82,1,1 corner-br: 594,82,1,1 +button-highlighted: dialog.png + background: 513,145,126,126 + border-r: 639,145,1,126 + border-l: 512,145,1,126 + border-b: 513,271,126,1 + border-t: 513,144,126,1 + corner-tl: 512,144,1,1 + corner-tr: 594,144,1,1 + corner-bl: 512,271,1,1 + corner-br: 594,271,1,1 + # A copy of dialog2 button-hover: dialog.png background: 513,1,126,126 @@ -261,6 +272,17 @@ button-hover: dialog.png corner-bl: 512,82,1,1 corner-br: 594,82,1,1 +button-hover-highlighted: dialog.png + background: 513,145,126,126 + border-r: 639,145,1,126 + border-l: 512,145,1,126 + border-b: 513,271,126,1 + border-t: 513,144,126,1 + corner-tl: 512,144,1,1 + corner-tr: 594,144,1,1 + corner-bl: 512,271,1,1 + corner-br: 594,271,1,1 + # A copy of dialog2 button-disabled: dialog.png background: 513,1,126,126 @@ -273,6 +295,17 @@ button-disabled: dialog.png corner-bl: 512,82,1,1 corner-br: 594,82,1,1 +button-disabled-highlighted: dialog.png + background: 513,145,126,126 + border-r: 639,145,1,126 + border-l: 512,145,1,126 + border-b: 513,271,126,1 + border-t: 513,144,126,1 + corner-tl: 512,144,1,1 + corner-tr: 594,144,1,1 + corner-bl: 512,271,1,1 + corner-br: 594,271,1,1 + # A copy of dialog3 button-pressed: dialog.png background: 641,1,126,126 @@ -284,7 +317,18 @@ button-pressed: dialog.png corner-tr: 722,0,1,1 corner-bl: 640,82,1,1 corner-br: 722,82,1,1 - + +button-pressed-highlighted: dialog.png + background: 641,145,126,126 + border-r: 767,145,1,126 + border-l: 640,145,1,126 + border-b: 641,271,126,1 + border-t: 641,144,126,1 + corner-tl: 640,144,1,1 + corner-tr: 722,144,1,1 + corner-bl: 640,271,1,1 + corner-br: 722,271,1,1 + scrollthumb: dialog.png background: 513,1,126,126 border-r: 639,1,1,126 diff --git a/mods/ra/uibits/dialog.png b/mods/ra/uibits/dialog.png index b7047caefa56fedf5d77aac078a6892db4805055..a5f2cc0411465e0ee4e2c1cdf58d1a9c62ead057 100644 GIT binary patch delta 15091 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 K&)8~z?tcK7L)!5G delta 14885 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≪PT)PcrP@(YBRZ7dON>d_qFe%^4(n0pRCa6wPeuA0s=+G} z!uq^{9US4u>5zEc>B4SL9g=7xE8NHbJsO6fgeg=ro2ZRTmZAmjfv*-I+e&3bc>spC zuWJiZQzceM93I?TP+s_MV(;K`FZ5WKBxVC-2a^Un`~e+#L`Pi= z+ZS82U?v7%B>+`EfYbSuP!>IJ-7>E2s^{{RZdWuNyHBO6E?=4}({tpFF-#$Kd_8>A;K9VW%@u7D zNPsSWVRpg2d-5Vh3;N_ray6FT&g~Hu zwLl7h#^`fN>-aF4@Md+|7#o_g*LdxYn=rF+8W@P;Vx>7)RP^p5|D{mvob2p~CZC6b zO?UvYDd>$|2<@>x%}082I8evYSscaN(?Nz~z1|DPX$LdH>R>)g`)bl3%6H&Hf&&P1 z@I{bSf=d@KUYxVeOclJ3!t4|QCUm_Vcu@j{0W~`7S{@fFBRd?iw_n&?D7^@t&Bovk zMgTtb+(vKhdiv6^O zI1>IEf^jJSgF%6D)c2H&jDwkfE}eHe-Dh-ovNkSC-|$78H7y1L>E;@+-1Z%kG?mTp zgAe^YL3V+(K@7^ZUJ!rYT0TC(dcKm;0USq}vL!aNS~fTlPi(QU-I%+<