supertux
button_widget.hpp
1 // SuperTux
2 // Copyright (C) 2018 Ingo Ruhnke <grumbel@gmail.com>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 
17 #ifndef HEADER_SUPERTUX_EDITOR_BUTTON_WIDGET_HPP
18 #define HEADER_SUPERTUX_EDITOR_BUTTON_WIDGET_HPP
19 
20 #include "editor/widget.hpp"
21 
22 #include <functional>
23 
24 #include "math/rectf.hpp"
25 #include "sprite/sprite.hpp"
26 #include "sprite/sprite_manager.hpp"
27 
28 class ButtonWidget : public Widget
29 {
30 private:
31 public:
32  ButtonWidget(SpritePtr sprite, const Vector& pos, std::function<void()> m_sig_click = {});
33  ButtonWidget(const std::string& path, const Vector& pos, std::function<void()> callback = {}) :
34  ButtonWidget(SpriteManager::current()->create(path), pos, std::move(callback))
35  {
36  }
37 
38  virtual void draw(DrawingContext& context) override;
39  virtual void update(float dt_sec) override;
40 
41  virtual void setup() override;
42  virtual void resize() override;
43 
44  virtual bool on_mouse_button_up(const SDL_MouseButtonEvent& button) override;
45  virtual bool on_mouse_button_down(const SDL_MouseButtonEvent& button) override;
46  virtual bool on_mouse_motion(const SDL_MouseMotionEvent& motion) override;
47 
48 private:
49  SpritePtr m_sprite;
50  Rectf m_rect;
51  bool m_grab;
52  bool m_hover;
53  std::function<void()> m_sig_click;
54 
55 private:
56  ButtonWidget(const ButtonWidget&) = delete;
57  ButtonWidget& operator=(const ButtonWidget&) = delete;
58 };
59 
60 #endif
61 
62 /* EOF */
Definition: button_widget.hpp:28
Definition: rectf.hpp:31
Definition: widget.hpp:24
This class provides functions for drawing things on screen.
Definition: drawing_context.hpp:42