Chatterino
Button.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <boost/optional.hpp>
4 
5 #include "widgets/BaseWidget.hpp"
6 
7 #include <QMenu>
8 #include <QMouseEvent>
9 #include <QPainter>
10 #include <QPoint>
11 #include <QTimer>
12 #include <QWidget>
13 
14 namespace chatterino {
15 
16 class Button : public BaseWidget
17 {
18  Q_OBJECT
19 
20  struct ClickEffect {
21  double progress = 0.0;
22  QPoint position;
23 
24  ClickEffect(QPoint _position)
25  : position(_position)
26  {
27  }
28  };
29 
30 public:
31  enum class Dim { None, Some, Lots };
32 
33  Button(BaseWidget *parent = nullptr);
34 
35  void setMouseEffectColor(boost::optional<QColor> color);
36  void setPixmap(const QPixmap &pixmap_);
37  const QPixmap &getPixmap() const;
38 
39  void setDim(Dim value);
40  Dim getDim() const;
41  qreal getCurrentDimAmount() const;
42 
43  void setEnable(bool value);
44  bool getEnable() const;
45 
46  void setEnableMargin(bool value);
47  bool getEnableMargin() const;
48 
49  void setBorderColor(const QColor &color);
50  const QColor &getBorderColor() const;
51 
52  void setMenu(std::unique_ptr<QMenu> menu);
53 
54 signals:
55  void leftClicked();
56  void clicked(Qt::MouseButton button);
57  void leftMousePress();
58 
59 protected:
60  virtual void paintEvent(QPaintEvent *) override;
61  virtual void enterEvent(QEvent *) override;
62  virtual void leaveEvent(QEvent *) override;
63  virtual void mousePressEvent(QMouseEvent *event) override;
64  virtual void mouseReleaseEvent(QMouseEvent *event) override;
65  virtual void mouseMoveEvent(QMouseEvent *event) override;
66 
67  void fancyPaint(QPainter &painter);
68 
69  bool enabled_{true};
70  bool selected_{false};
71  bool mouseOver_{false};
72  bool mouseDown_{false};
73  bool menuVisible_{false};
74 
75 private:
76  void onMouseEffectTimeout();
77  void showMenu();
78 
79  QColor borderColor_{};
80  QPixmap pixmap_{};
81  QPixmap resizedPixmap_{};
82  Dim dimPixmap_{Dim::Some};
83  bool enableMargin_{true};
84  QPoint mousePos_{};
85  double hoverMultiplier_{0.0};
86  QTimer effectTimer_{};
87  std::vector<ClickEffect> clickEffects_{};
88  boost::optional<QColor> mouseEffectColor_{};
89  std::unique_ptr<QMenu> menu_{};
90 };
91 
92 } // namespace chatterino
const QColor & getBorderColor() const
Definition: Button.cpp:109
Dim
Definition: Button.hpp:31
Dim getDim() const
Definition: Button.cpp:63
void setEnableMargin(bool value)
Definition: Button.cpp:80
virtual void mousePressEvent(QMouseEvent *event) override
Definition: Button.cpp:230
Button(BaseWidget *parent=nullptr)
Definition: Button.cpp:27
bool selected_
Definition: Button.hpp:70
virtual void mouseMoveEvent(QMouseEvent *event) override
Definition: Button.cpp:274
void setPixmap(const QPixmap &pixmap_)
Definition: Button.cpp:44
Definition: Application.cpp:48
void clicked(Qt::MouseButton button)
bool mouseOver_
Definition: Button.hpp:71
void setDim(Dim value)
Definition: Button.cpp:56
bool enabled_
Definition: Button.hpp:69
void setMouseEffectColor(boost::optional< QColor > color)
Definition: Button.cpp:39
virtual void leaveEvent(QEvent *) override
Definition: Button.cpp:225
bool menuVisible_
Definition: Button.hpp:73
Definition: Button.hpp:16
void setMenu(std::unique_ptr< QMenu > menu)
Definition: Button.cpp:114
bool getEnable() const
Definition: Button.cpp:75
virtual void enterEvent(QEvent *) override
Definition: Button.cpp:220
void setBorderColor(const QColor &color)
Definition: Button.cpp:102
void setEnable(bool value)
Definition: Button.cpp:68
bool mouseDown_
Definition: Button.hpp:72
virtual void mouseReleaseEvent(QMouseEvent *event) override
Definition: Button.cpp:258
Definition: SettingsDialogTab.hpp:16
const QPixmap & getPixmap() const
Definition: Button.cpp:51
virtual void paintEvent(QPaintEvent *) override
Definition: Button.cpp:133
Definition: BaseWidget.hpp:14
void fancyPaint(QPainter &painter)
Definition: Button.cpp:172
qreal getCurrentDimAmount() const
Definition: Button.cpp:92
bool getEnableMargin() const
Definition: Button.cpp:87