Polyphase Game Engine
Loading...
Searching...
No Matches
Window.h
Go to the documentation of this file.
1#pragma once
2
4#include "AssetRef.h"
5
6class Text;
7class Button;
8class Canvas;
10class Quad;
11class Texture;
12
13enum class TitleAlignment : uint8_t
14{
15 Left,
16 Center,
17 Right,
18 Count
19};
20
22{
23public:
24
26
27 virtual void Create() override;
28 virtual void Start() override;
29 virtual void Stop() override;
30 virtual void OnInstanced() override;
31 virtual void Tick(float deltaTime) override;
32 virtual void PreRender() override;
33 virtual void GatherProperties(std::vector<Property>& props) override;
34
35 // Window ID (for WindowManager registration)
36 void SetWindowId(const std::string& id);
37 const std::string& GetWindowId() const;
38
39 // Title
40 void SetTitle(const std::string& title);
41 const std::string& GetTitle() const;
42 void SetTitleAlignment(TitleAlignment alignment);
43 TitleAlignment GetTitleAlignment() const;
44 void SetTitleFontSize(float size);
45 float GetTitleFontSize() const;
46 void SetTitleOffset(glm::vec2 offset);
47 glm::vec2 GetTitleOffset() const;
48
49 // Content Padding
50 void SetContentPadding(float left, float top, float right, float bottom);
51 void SetContentPaddingLeft(float left);
52 void SetContentPaddingTop(float top);
53 void SetContentPaddingRight(float right);
54 void SetContentPaddingBottom(float bottom);
55 float GetContentPaddingLeft() const;
56 float GetContentPaddingTop() const;
57 float GetContentPaddingRight() const;
58 float GetContentPaddingBottom() const;
59
60 // Visibility
61 void Show();
62 void Hide();
63 void Close(); // Emits OnClose signal, hides window
64 void SetStartHidden(bool hidden);
65 bool GetStartHidden() const;
66
67 // Window properties
68 void SetDraggable(bool draggable);
69 bool IsDraggable() const;
70 void SetResizable(bool resizable);
71 bool IsResizable() const;
72 void SetShowCloseButton(bool show);
73 bool GetShowCloseButton() const;
74 void SetShowTitleBar(bool show);
75 bool GetShowTitleBar() const;
76 void SetTitleBarHeight(float height);
77 float GetTitleBarHeight() const;
78 void SetMinSize(glm::vec2 minSize);
79 glm::vec2 GetMinSize() const;
80 void SetMaxSize(glm::vec2 maxSize);
81 glm::vec2 GetMaxSize() const;
82 void SetResizeHandleSize(float size);
83 float GetResizeHandleSize() const;
84
85 // Content management - use this instead of AddChild for user content
86 void SetContentWidget(Widget* widget);
87
88 // Content access
89 ScrollContainer* GetContentContainer();
90 Widget* GetContentWidget(); // First non-transient child of content container
91
92 // Colors
93 void SetTitleBarColor(glm::vec4 color);
94 glm::vec4 GetTitleBarColor() const;
95 void SetBackgroundColor(glm::vec4 color);
96 glm::vec4 GetBackgroundColor() const;
97
98 // Textures
99 void SetBackgroundTexture(Texture* texture);
100 Texture* GetBackgroundTexture();
101 void SetBackgroundUVScale(glm::vec2 scale);
102 glm::vec2 GetBackgroundUVScale() const;
103 void SetBackgroundUVOffset(glm::vec2 offset);
104 glm::vec2 GetBackgroundUVOffset() const;
105 void SetTitleBarTexture(Texture* texture);
106 Texture* GetTitleBarTexture();
107 void SetTitleBarUVScale(glm::vec2 scale);
108 glm::vec2 GetTitleBarUVScale() const;
109 void SetTitleBarUVOffset(glm::vec2 offset);
110 glm::vec2 GetTitleBarUVOffset() const;
111 void SetCloseButtonTexture(Texture* texture);
112 Texture* GetCloseButtonTexture();
113
114 // Close Button Colors
115 void SetCloseButtonNormalColor(glm::vec4 color);
116 glm::vec4 GetCloseButtonNormalColor() const;
117 void SetCloseButtonHoveredColor(glm::vec4 color);
118 glm::vec4 GetCloseButtonHoveredColor() const;
119 void SetCloseButtonPressedColor(glm::vec4 color);
120 glm::vec4 GetCloseButtonPressedColor() const;
121
122 // Internal widget access
123 Canvas* GetTitleBar();
124 Text* GetTitleText();
125 Button* GetCloseButton();
126 Quad* GetResizeHandle();
127 Quad* GetBackground();
128
129#if EDITOR
130 virtual bool DrawCustomProperty(Property& prop) override;
131#endif
132
133protected:
134
135 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
136 void EnsureContentContainer();
137 void RerouteChildrenToContent();
138 void HandleDrag();
139 void HandleResize();
140 void UpdateLayout();
141
142 // Properties
143 std::string mWindowId;
144 std::string mTitle = "Window";
146 float mTitleFontSize = 14.0f;
147 glm::vec2 mTitleOffset = glm::vec2(0.0f,-8.0f);
148 float mTitleBarHeight = 24.0f;
149 float mContentPaddingLeft = 0.0f;
150 float mContentPaddingTop = 0.0f;
151 float mContentPaddingRight = 0.0f;
152 float mContentPaddingBottom = 0.0f;
153 bool mDraggable = true;
154 bool mResizable = true;
155 bool mShowCloseButton = true;
156 bool mShowTitleBar = true;
157 bool mStartHidden = false;
158 float mResizeHandleSize = 12.0f;
159 glm::vec2 mMinSize = glm::vec2(100.0f, 80.0f);
160 glm::vec2 mMaxSize = glm::vec2(0.0f); // 0 = no max
161 glm::vec4 mTitleBarColor = glm::vec4(0.2f, 0.2f, 0.3f, 1.0f);
162 glm::vec4 mBackgroundColor = glm::vec4(0.15f, 0.15f, 0.2f, 0.95f);
163
164 // Textures
166 glm::vec2 mBackgroundUVScale = glm::vec2(1.0f, 1.0f);
167 glm::vec2 mBackgroundUVOffset = glm::vec2(0.0f, 0.0f);
169 glm::vec2 mTitleBarUVScale = glm::vec2(1.0f, 1.0f);
170 glm::vec2 mTitleBarUVOffset = glm::vec2(0.0f, 0.0f);
172
173 // Close Button Colors
174 glm::vec4 mCloseButtonNormalColor = glm::vec4(0.6f, 0.2f, 0.2f, 1.0f);
175 glm::vec4 mCloseButtonHoveredColor = glm::vec4(0.8f, 0.3f, 0.3f, 1.0f);
176 glm::vec4 mCloseButtonPressedColor = glm::vec4(0.5f, 0.15f, 0.15f, 1.0f);
177
178 // Drag/Resize state
179 bool mDragging = false;
180 bool mResizing = false;
181 glm::vec2 mDragOffset = glm::vec2(0.0f);
182 glm::vec2 mResizeStartSize = glm::vec2(0.0f);
183 glm::vec2 mResizeStartMouse = glm::vec2(0.0f);
184
185 // Transient children
186 Quad* mBackground = nullptr;
187 Canvas* mTitleBar = nullptr;
188 Text* mTitleText = nullptr;
189 Button* mCloseButton = nullptr;
190 ScrollContainer* mContentContainer = nullptr;
191 Quad* mResizeHandle = nullptr;
192};
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
TitleAlignment
Definition Window.h:14
Definition AssetRef.h:18
Definition Button.h:21
Definition Canvas.h:9
Definition Datum.h:164
virtual void Create()
Definition Node.cpp:220
virtual void Stop()
Definition Node.cpp:504
virtual void OnInstanced()
Definition Node.cpp:588
virtual void Tick(float deltaTime)
Definition Node.cpp:558
virtual bool DrawCustomProperty(Property &prop)
Definition Object.h:46
Definition Property.h:14
Definition Quad.h:20
Definition ScrollContainer.h:28
Definition Text.h:24
Definition Texture.h:10
Definition Widget.h:53
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Widget.cpp:45
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Widget.cpp:115
virtual void Start() override
Definition Widget.cpp:110
virtual void PreRender()
Definition Widget.cpp:226
Definition Window.h:22
TextureRef mCloseButtonTexture
Definition Window.h:171
TextureRef mTitleBarTexture
Definition Window.h:168
TextureRef mBackgroundTexture
Definition Window.h:165
std::string mWindowId
Definition Window.h:143
DECLARE_NODE(Window, Widget)