GAbstractButton.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include <LibGUI/GAbstractButton.h>
  2. GAbstractButton::GAbstractButton(GWidget* parent)
  3. : GWidget(parent)
  4. {
  5. }
  6. GAbstractButton::GAbstractButton(const String& text, GWidget* parent)
  7. : GWidget(parent)
  8. , m_text(text)
  9. {
  10. }
  11. GAbstractButton::~GAbstractButton()
  12. {
  13. }
  14. void GAbstractButton::set_text(const String& text)
  15. {
  16. if (m_text == text)
  17. return;
  18. m_text = text;
  19. update();
  20. }
  21. void GAbstractButton::set_checked(bool checked)
  22. {
  23. if (m_checked == checked)
  24. return;
  25. m_checked = checked;
  26. update();
  27. if (on_checked)
  28. on_checked(checked);
  29. }
  30. void GAbstractButton::set_checkable(bool checkable)
  31. {
  32. if (m_checkable == checkable)
  33. return;
  34. m_checkable = checkable;
  35. update();
  36. }
  37. void GAbstractButton::mousemove_event(GMouseEvent& event)
  38. {
  39. bool is_over = rect().contains(event.position());
  40. m_hovered = is_over;
  41. if (event.buttons() & GMouseButton::Left) {
  42. if (is_enabled()) {
  43. bool being_pressed = is_over;
  44. if (being_pressed != m_being_pressed) {
  45. m_being_pressed = being_pressed;
  46. update();
  47. }
  48. }
  49. }
  50. GWidget::mousemove_event(event);
  51. }
  52. void GAbstractButton::mousedown_event(GMouseEvent& event)
  53. {
  54. #ifdef GABSTRACTBUTTON_DEBUG
  55. dbgprintf("GAbstractButton::mouse_down_event: x=%d, y=%d, button=%u\n", event.x(), event.y(), (unsigned)event.button());
  56. #endif
  57. if (event.button() == GMouseButton::Left) {
  58. if (is_enabled()) {
  59. m_being_pressed = true;
  60. update();
  61. }
  62. }
  63. GWidget::mousedown_event(event);
  64. }
  65. void GAbstractButton::mouseup_event(GMouseEvent& event)
  66. {
  67. #ifdef GABSTRACTBUTTON_DEBUG
  68. dbgprintf("GAbstractButton::mouse_up_event: x=%d, y=%d, button=%u\n", event.x(), event.y(), (unsigned)event.button());
  69. #endif
  70. if (event.button() == GMouseButton::Left) {
  71. if (is_enabled()) {
  72. bool was_being_pressed = m_being_pressed;
  73. m_being_pressed = false;
  74. update();
  75. if (was_being_pressed)
  76. click();
  77. }
  78. }
  79. GWidget::mouseup_event(event);
  80. }
  81. void GAbstractButton::enter_event(CEvent&)
  82. {
  83. m_hovered = true;
  84. update();
  85. }
  86. void GAbstractButton::leave_event(CEvent&)
  87. {
  88. m_hovered = false;
  89. update();
  90. }
  91. void GAbstractButton::keydown_event(GKeyEvent& event)
  92. {
  93. if (event.key() == KeyCode::Key_Return)
  94. click();
  95. GWidget::keydown_event(event);
  96. }