Button.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "../UI/BorderImage.h"
  5. namespace Urho3D
  6. {
  7. /// Push button %UI element.
  8. class URHO3D_API Button : public BorderImage
  9. {
  10. URHO3D_OBJECT(Button, BorderImage);
  11. public:
  12. /// Construct.
  13. explicit Button(Context* context);
  14. /// Destruct.
  15. ~Button() override;
  16. /// Register object factory.
  17. /// @nobind
  18. static void RegisterObject(Context* context);
  19. /// Perform UI element update.
  20. void Update(float timeStep) override;
  21. /// Return UI rendering batches.
  22. void GetBatches(Vector<UIBatch>& batches, Vector<float>& vertexData, const IntRect& currentScissor) override;
  23. /// React to mouse click begin.
  24. void OnClickBegin
  25. (const IntVector2& position, const IntVector2& screenPosition, MouseButton button, MouseButtonFlags buttons, QualifierFlags qualifiers, Cursor* cursor) override;
  26. /// React to mouse click end.
  27. void OnClickEnd
  28. (const IntVector2& position, const IntVector2& screenPosition, MouseButton button, MouseButtonFlags buttons, QualifierFlags qualifiers, Cursor* cursor,
  29. UIElement* beginElement) override;
  30. /// React to mouse drag motion.
  31. void OnDragMove
  32. (const IntVector2& position, const IntVector2& screenPosition, const IntVector2& deltaPos, MouseButtonFlags buttons, QualifierFlags qualifiers,
  33. Cursor* cursor) override;
  34. /// React to a key press.
  35. void OnKey(Key key, MouseButtonFlags buttons, QualifierFlags qualifiers) override;
  36. /// Set offset to image rectangle used when pressed.
  37. /// @property
  38. void SetPressedOffset(const IntVector2& offset);
  39. /// Set offset to image rectangle used when pressed.
  40. void SetPressedOffset(int x, int y);
  41. /// Set offset of child elements when pressed.
  42. /// @property
  43. void SetPressedChildOffset(const IntVector2& offset);
  44. /// Set offset of child elements when pressed.
  45. void SetPressedChildOffset(int x, int y);
  46. /// Set repeat properties. Rate 0 (default) disables repeat.
  47. void SetRepeat(float delay, float rate);
  48. /// Set repeat delay.
  49. /// @property
  50. void SetRepeatDelay(float delay);
  51. /// Set repeat rate.
  52. /// @property
  53. void SetRepeatRate(float rate);
  54. /// Return pressed image offset.
  55. /// @property
  56. const IntVector2& GetPressedOffset() const { return pressedOffset_; }
  57. /// Return offset of child elements when pressed.
  58. /// @property
  59. const IntVector2& GetPressedChildOffset() const { return pressedChildOffset_; }
  60. /// Return repeat delay.
  61. /// @property
  62. float GetRepeatDelay() const { return repeatDelay_; }
  63. /// Return repeat rate.
  64. /// @property
  65. float GetRepeatRate() const { return repeatRate_; }
  66. /// Return whether is currently pressed.
  67. /// @property
  68. bool IsPressed() const { return pressed_; }
  69. protected:
  70. /// Set new pressed state.
  71. void SetPressed(bool enable);
  72. /// Pressed image offset.
  73. IntVector2 pressedOffset_;
  74. /// Pressed label offset.
  75. IntVector2 pressedChildOffset_;
  76. /// Repeat delay.
  77. float repeatDelay_;
  78. /// Repeat rate.
  79. float repeatRate_;
  80. /// Repeat timer.
  81. float repeatTimer_;
  82. /// Current pressed state.
  83. bool pressed_;
  84. };
  85. }