TGUI  0.9.1
Panel.hpp
1 //
3 // TGUI - Texus' Graphical User Interface
4 // Copyright (C) 2012-2021 Bruno Van de Velde (vdv_b@tgui.eu)
5 //
6 // This software is provided 'as-is', without any express or implied warranty.
7 // In no event will the authors be held liable for any damages arising from the use of this software.
8 //
9 // Permission is granted to anyone to use this software for any purpose,
10 // including commercial applications, and to alter it and redistribute it freely,
11 // subject to the following restrictions:
12 //
13 // 1. The origin of this software must not be misrepresented;
14 // you must not claim that you wrote the original software.
15 // If you use this software in a product, an acknowledgment
16 // in the product documentation would be appreciated but is not required.
17 //
18 // 2. Altered source versions must be plainly marked as such,
19 // and must not be misrepresented as being the original software.
20 //
21 // 3. This notice may not be removed or altered from any source distribution.
22 //
24 
25 
26 #ifndef TGUI_PANEL_HPP
27 #define TGUI_PANEL_HPP
28 
29 
30 #include <TGUI/Widgets/Group.hpp>
31 #include <TGUI/Renderers/PanelRenderer.hpp>
32 
34 
35 namespace tgui
36 {
40  class TGUI_API Panel : public Group
41  {
42  public:
43 
44  typedef std::shared_ptr<Panel> Ptr;
45  typedef std::shared_ptr<const Panel> ConstPtr;
46 
47 
55  Panel(const char* typeName = "Panel", bool initRenderer = true);
56 
57 
66  static Panel::Ptr create(Layout2d size = {"100%", "100%"});
67 
68 
78 
79 
85  const PanelRenderer* getSharedRenderer() const;
86 
93  const PanelRenderer* getRenderer() const;
94 
95 
102  void setSize(const Layout2d& size) override;
103  using Widget::setSize;
104 
105 
110  Vector2f getInnerSize() const override;
111 
112 
120  Vector2f getChildWidgetsOffset() const override;
121 
122 
129  bool isMouseOnWidget(Vector2f pos) const override;
130 
134  void leftMousePressed(Vector2f pos) override;
135 
139  void leftMouseReleased(Vector2f pos) override;
140 
144  void rightMousePressed(Vector2f pos) override;
145 
149  void rightMouseReleased(Vector2f pos) override;
150 
154  void rightMouseButtonNoLongerDown() override;
155 
156 
164  void draw(BackendRenderTargetBase& target, RenderStates states) const override;
165 
166 
168  protected:
169 
179  Signal& getSignal(String signalName) override;
180 
181 
188  void rendererChanged(const String& property) override;
189 
190 
192  // This function is called every frame with the time passed since the last frame.
194  bool updateTime(Duration elapsedTime) override;
195 
196 
198  // Makes a copy of the widget
200  Widget::Ptr clone() const override
201  {
202  return std::make_shared<Panel>(*this);
203  }
204 
205 
207  public:
208 
209  SignalVector2f onMousePress = {"MousePressed"};
210  SignalVector2f onMouseRelease = {"MouseReleased"};
211  SignalVector2f onClick = {"Clicked"};
212  SignalVector2f onDoubleClick = {"DoubleClicked"};
213 
214  SignalVector2f onRightMousePress = {"RightMousePressed"};
215  SignalVector2f onRightMouseRelease = {"RightMouseReleased"};
216  SignalVector2f onRightClick = {"RightClicked"};
217 
218 
220  protected:
221 
222  // Cached renderer properties
223  Borders m_bordersCached;
224  Color m_borderColorCached;
225  Color m_backgroundColorCached;
226  Sprite m_spriteBackground;
227 
228  bool m_rightMouseDown = false;
229 
230  // Will be set to true after the first click, but gets reset to false when the second click does not occur soon after
231  bool m_possibleDoubleClick = false;
232 
234  };
235 
237 }
238 
240 
241 #endif // TGUI_PANEL_HPP
Base class for render targets.
Definition: BackendRenderTarget.hpp:48
Wrapper for colors.
Definition: Color.hpp:52
Wrapper for durations.
Definition: Duration.hpp:52
Group widget.
Definition: Group.hpp:44
Class to store the position or size of a widget.
Definition: Layout.hpp:262
Definition: Outline.hpp:39
Definition: PanelRenderer.hpp:37
Group of widgets that has a background color and optional borders.
Definition: Panel.hpp:41
PanelRenderer * getSharedRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
static Panel::Ptr copy(Panel::ConstPtr panel)
Makes a copy of another panel.
std::shared_ptr< Panel > Ptr
Shared widget pointer.
Definition: Panel.hpp:44
PanelRenderer * getRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
Definition: Panel.hpp:200
Vector2f getChildWidgetsOffset() const override
Returns the distance between the position of the container and a widget that would be drawn inside th...
void draw(BackendRenderTargetBase &target, RenderStates states) const override
Draw the widget to a render target.
Vector2f getInnerSize() const override
Returns the space available for widgets inside the container.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
void setSize(const Layout2d &size) override
Changes the size of the panel.
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
static Panel::Ptr create(Layout2d size={"100%", "100%"})
Creates a new panel widget.
std::shared_ptr< const Panel > ConstPtr
Shared constant widget pointer.
Definition: Panel.hpp:45
Signal to which the user can subscribe to get callbacks from.
Definition: Signal.hpp:58
Definition: Sprite.hpp:49
Wrapper class to store strings.
Definition: String.hpp:74
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition: Widget.hpp:73
virtual void setSize(const Layout2d &size)
Changes the size of the widget.
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
States used for drawing.
Definition: RenderStates.hpp:39