You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.4 KiB
C#

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace WalletConnectUnity.UI
{
[AddComponentMenu("WalletConnect/UI/WC Button")]
public class WCButton : Button
{
[SerializeField] private Image _background;
[SerializeField] private Image _border;
[SerializeField] private Image _ring;
[Space, SerializeField] private Config _normalConfig;
[SerializeField] private Config _highlightedConfig;
[SerializeField] private Config _selectedConfig;
[SerializeField] private Config _pressedConfig;
private bool _isPointerInside;
protected override void OnEnable()
{
base.OnEnable();
ApplyConfig(in _normalConfig);
}
public override void OnSelect(BaseEventData eventData)
{
// Unity automatically selects the button after pressed which we don't want when using a cursor
var currentState = currentSelectionState;
if (currentState is SelectionState.Highlighted) return;
ApplyConfig(in _selectedConfig);
base.OnSelect(eventData);
}
public override void OnPointerEnter(PointerEventData eventData)
{
_isPointerInside = true;
ApplyConfig(in _highlightedConfig);
base.OnPointerEnter(eventData);
}
public override void OnPointerExit(PointerEventData eventData)
{
_isPointerInside = false;
ApplyConfig(in _normalConfig);
base.OnPointerExit(eventData);
}
public override void OnPointerDown(PointerEventData eventData)
{
ApplyConfig(in _pressedConfig);
base.OnPointerDown(eventData);
}
public override void OnPointerUp(PointerEventData eventData)
{
ApplyConfig(_isPointerInside ? _highlightedConfig : _normalConfig);
base.OnPointerUp(eventData);
}
protected virtual void ApplyConfig(in Config config)
{
_background.color = config.backgroundColor;
_border.color = config.borderColor;
_ring.color = config.ringColor;
}
[Serializable]
protected struct Config
{
public Color backgroundColor;
public Color borderColor;
public Color ringColor;
}
}
}