Button.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <LibGUI/AbstractButton.h>
  9. #include <LibGfx/Bitmap.h>
  10. #include <LibGfx/StylePainter.h>
  11. #include <LibGfx/TextAlignment.h>
  12. namespace GUI {
  13. class Button : public AbstractButton {
  14. C_OBJECT(Button);
  15. public:
  16. virtual ~Button() override;
  17. void set_icon(RefPtr<Gfx::Bitmap>&&);
  18. const Gfx::Bitmap* icon() const { return m_icon.ptr(); }
  19. Gfx::Bitmap* icon() { return m_icon.ptr(); }
  20. void set_text_alignment(Gfx::TextAlignment text_alignment) { m_text_alignment = text_alignment; }
  21. Gfx::TextAlignment text_alignment() const { return m_text_alignment; }
  22. Function<void(unsigned modifiers)> on_click;
  23. Function<void(ContextMenuEvent&)> on_context_menu_request;
  24. void set_button_style(Gfx::ButtonStyle style) { m_button_style = style; }
  25. Gfx::ButtonStyle button_style() const { return m_button_style; }
  26. virtual void click(unsigned modifiers = 0) override;
  27. virtual void context_menu_event(ContextMenuEvent&) override;
  28. Action* action() { return m_action; }
  29. Action const* action() const { return m_action; }
  30. void set_action(Action&);
  31. virtual bool is_uncheckable() const override;
  32. int icon_spacing() const { return m_icon_spacing; }
  33. void set_icon_spacing(int spacing) { m_icon_spacing = spacing; }
  34. void set_menu(RefPtr<GUI::Menu>);
  35. protected:
  36. explicit Button(String text = {});
  37. virtual void mousedown_event(MouseEvent&) override;
  38. virtual void mousemove_event(MouseEvent&) override;
  39. virtual void paint_event(PaintEvent&) override;
  40. private:
  41. RefPtr<Gfx::Bitmap> m_icon;
  42. RefPtr<GUI::Menu> m_menu;
  43. Gfx::ButtonStyle m_button_style { Gfx::ButtonStyle::Normal };
  44. Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
  45. WeakPtr<Action> m_action;
  46. int m_icon_spacing { 4 };
  47. };
  48. }