2
0

StepperSide.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /// Credit David Gileadi
  2. /// Sourced from - https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/11
  3. using System;
  4. using UnityEngine.Events;
  5. using UnityEngine.EventSystems;
  6. namespace UnityEngine.UI.Extensions
  7. {
  8. [RequireComponent(typeof(Selectable))]
  9. public class StepperSide :
  10. UIBehaviour,
  11. IPointerClickHandler,
  12. ISubmitHandler,
  13. IPointerEnterHandler, IPointerExitHandler,
  14. IPointerDownHandler, IPointerUpHandler,
  15. ISelectHandler, IDeselectHandler
  16. {
  17. Selectable button { get { return GetComponent<Selectable>(); } }
  18. Stepper stepper { get { return GetComponentInParent<Stepper>(); } }
  19. bool leftmost { get { return button == stepper.sides[0]; } }
  20. internal Sprite cutSprite;
  21. protected StepperSide()
  22. { }
  23. public virtual void OnPointerClick(PointerEventData eventData)
  24. {
  25. if (eventData.button != PointerEventData.InputButton.Left)
  26. return;
  27. Press();
  28. AdjustSprite(false);
  29. }
  30. public virtual void OnSubmit(BaseEventData eventData)
  31. {
  32. Press();
  33. AdjustSprite(true);
  34. }
  35. public virtual void OnPointerEnter(PointerEventData eventData)
  36. {
  37. AdjustSprite(false);
  38. }
  39. public virtual void OnPointerExit(PointerEventData eventData)
  40. {
  41. AdjustSprite(true);
  42. }
  43. public virtual void OnPointerDown(PointerEventData eventData)
  44. {
  45. AdjustSprite(false);
  46. }
  47. public virtual void OnPointerUp(PointerEventData eventData)
  48. {
  49. AdjustSprite(false);
  50. }
  51. public virtual void OnSelect(BaseEventData eventData)
  52. {
  53. AdjustSprite(false);
  54. }
  55. public virtual void OnDeselect(BaseEventData eventData)
  56. {
  57. AdjustSprite(true);
  58. }
  59. private void Press()
  60. {
  61. if (!button.IsActive() || !button.IsInteractable())
  62. return;
  63. if (leftmost)
  64. {
  65. stepper.StepDown();
  66. }
  67. else
  68. {
  69. stepper.StepUp();
  70. }
  71. }
  72. private void AdjustSprite(bool restore)
  73. {
  74. var image = button.image;
  75. if (!image || image.overrideSprite == cutSprite)
  76. return;
  77. if (restore)
  78. image.overrideSprite = cutSprite;
  79. else
  80. image.overrideSprite = Stepper.CutSprite(image.overrideSprite, leftmost);
  81. }
  82. }
  83. }