Make UI cursors configurable.

This commit is contained in:
Matthias Mailänder
2020-10-18 18:37:04 +02:00
committed by Paul Chote
parent 96c4554644
commit e7cfd2765c
7 changed files with 28 additions and 5 deletions

View File

@@ -190,7 +190,7 @@ namespace OpenRA
OrderManager.LastTickTime = RunTime; OrderManager.LastTickTime = RunTime;
OrderManager.StartGame(); OrderManager.StartGame();
worldRenderer.RefreshPalette(); worldRenderer.RefreshPalette();
Cursor.SetCursor("default"); Cursor.SetCursor(ChromeMetrics.Get<string>("DefaultCursor"));
// Now loading is completed, now is the ideal time to run a GC and compact the LOH. // Now loading is completed, now is the ideal time to run a GC and compact the LOH.
// - All the temporary garbage created during loading can be collected. // - All the temporary garbage created during loading can be collected.

View File

@@ -13,11 +13,15 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Orders namespace OpenRA.Orders
{ {
public class UnitOrderGenerator : IOrderGenerator public class UnitOrderGenerator : IOrderGenerator
{ {
readonly string worldSelectCursor = ChromeMetrics.Get<string>("WorldSelectCursor");
readonly string worldDefaultCursor = ChromeMetrics.Get<string>("WorldDefaultCursor");
static Target TargetForInput(World world, CPos cell, int2 worldPixel, MouseInput mi) static Target TargetForInput(World world, CPos cell, int2 worldPixel, MouseInput mi)
{ {
var actor = world.ScreenMap.ActorsAtMouse(mi) var actor = world.ScreenMap.ActorsAtMouse(mi)
@@ -85,7 +89,7 @@ namespace OpenRA.Orders
(mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any()); (mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any());
} }
return useSelect ? "select" : "default"; return useSelect ? worldSelectCursor : worldDefaultCursor;
} }
public void Deactivate() { } public void Deactivate() { }

View File

@@ -167,6 +167,8 @@ namespace OpenRA.Widgets
public abstract class Widget public abstract class Widget
{ {
string defaultCursor = null;
public readonly List<Widget> Children = new List<Widget>(); public readonly List<Widget> Children = new List<Widget>();
// Info defined in YAML // Info defined in YAML
@@ -235,6 +237,8 @@ namespace OpenRA.Widgets
public virtual void Initialize(WidgetArgs args) public virtual void Initialize(WidgetArgs args)
{ {
defaultCursor = ChromeMetrics.Get<string>("DefaultCursor");
// Parse the YAML equations to find the widget bounds // Parse the YAML equations to find the widget bounds
var parentBounds = (Parent == null) var parentBounds = (Parent == null)
? new Rectangle(0, 0, Game.Renderer.Resolution.Width, Game.Renderer.Resolution.Height) ? new Rectangle(0, 0, Game.Renderer.Resolution.Width, Game.Renderer.Resolution.Height)
@@ -347,7 +351,7 @@ namespace OpenRA.Widgets
Ui.KeyboardFocusWidget = null; Ui.KeyboardFocusWidget = null;
} }
public virtual string GetCursor(int2 pos) { return "default"; } public virtual string GetCursor(int2 pos) { return defaultCursor; }
public string GetCursorOuter(int2 pos) public string GetCursorOuter(int2 pos)
{ {
// Is the cursor on top of us? // Is the cursor on top of us?

View File

@@ -16,6 +16,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits; using OpenRA.Mods.Common.Traits;
using OpenRA.Primitives; using OpenRA.Primitives;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Orders namespace OpenRA.Mods.Common.Orders
{ {
@@ -38,6 +39,8 @@ namespace OpenRA.Mods.Common.Orders
public class PlaceBuildingOrderGenerator : IOrderGenerator public class PlaceBuildingOrderGenerator : IOrderGenerator
{ {
readonly string worldDefaultCursor = ChromeMetrics.Get<string>("WorldDefaultCursor");
class VariantWrapper class VariantWrapper
{ {
public readonly ActorInfo ActorInfo; public readonly ActorInfo ActorInfo;
@@ -288,7 +291,10 @@ namespace OpenRA.Mods.Common.Orders
return preview != null ? preview.RenderAnnotations(wr, TopLeft) : Enumerable.Empty<IRenderable>(); return preview != null ? preview.RenderAnnotations(wr, TopLeft) : Enumerable.Empty<IRenderable>();
} }
string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { return "default"; } string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
return worldDefaultCursor;
}
bool IOrderGenerator.HandleKeyPress(KeyInput e) bool IOrderGenerator.HandleKeyPress(KeyInput e)
{ {

View File

@@ -68,6 +68,8 @@ namespace OpenRA.Mods.Common.Widgets
public Action OnDoubleClick = () => { }; public Action OnDoubleClick = () => { };
public Action<KeyInput> OnKeyPress = _ => { }; public Action<KeyInput> OnKeyPress = _ => { };
public string Cursor = ChromeMetrics.Get<string>("ButtonCursor");
protected readonly Ruleset ModRules; protected readonly Ruleset ModRules;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
@@ -221,6 +223,8 @@ namespace OpenRA.Mods.Common.Widgets
tooltipContainer.Value.RemoveTooltip(); tooltipContainer.Value.RemoveTooltip();
} }
public override string GetCursor(int2 pos) { return Cursor; }
public override int2 ChildOrigin public override int2 ChildOrigin
{ {
get get

View File

@@ -38,6 +38,7 @@ namespace OpenRA.Mods.Common.Widgets
readonly int cellWidth; readonly int cellWidth;
readonly int previewWidth; readonly int previewWidth;
readonly int previewHeight; readonly int previewHeight;
readonly string worldDefaultCursor = ChromeMetrics.Get<string>("WorldDefaultCursor");
float radarMinimapHeight; float radarMinimapHeight;
int frame; int frame;
@@ -283,7 +284,7 @@ namespace OpenRA.Mods.Common.Widgets
var cursor = world.OrderGenerator.GetCursor(world, cell, worldPixel, mi); var cursor = world.OrderGenerator.GetCursor(world, cell, worldPixel, mi);
if (cursor == null) if (cursor == null)
return "default"; return worldDefaultCursor;
return Game.ModData.CursorProvider.HasCursorSequence(cursor + "-minimap") ? cursor + "-minimap" : cursor; return Game.ModData.CursorProvider.HasCursorSequence(cursor + "-minimap") ? cursor + "-minimap" : cursor;
} }

View File

@@ -54,3 +54,7 @@ Metrics:
NormalSelectionColor: FFFFFF NormalSelectionColor: FFFFFF
AltSelectionColor: 00FFFF AltSelectionColor: 00FFFF
CtrlSelectionColor: FFFF00 CtrlSelectionColor: FFFF00
ButtonCursor: default
DefaultCursor: default
WorldSelectCursor: select
WorldDefaultCursor: default