32class VENOM_COMMON_API GUI :
public GraphicsPluginObject
40 vc::Error Initialize();
43 inline void DrawCallback() {
if (s_guiDrawCallback) s_guiDrawCallback(); }
44 static inline void SetGUIDrawCallback(GUIDrawCallback guiDrawCallback) { s_guiDrawCallback = guiDrawCallback; }
45#if defined(VENOM_PLATFORM_MOBILE)
46 static inline void ToggleGUIDraw() { s_guiDraw =
false; }
48 static inline void ToggleGUIDraw() { s_guiDraw = !s_guiDraw; }
50 static inline bool IsGUIDraw() {
return s_guiDraw; }
51 static inline bool & IsGUIDrawRef() {
return s_guiDraw; }
55 static inline GUI * Get() {
return s_gui; }
57 static void AddFont(
const char * fontPath,
float fontSize,
const uint16_t * glyphRanges);
58 static void AddFont(
const char * fontPath,
float fontSize);
59 static void ClearFonts();
61 static inline void SetNextWindowPos(
const vcm::Vec2 & pos, GUICond cond = GUICondBits::GUICond_None,
const vcm::Vec2 & pivot = vcm::Vec2(0, 0)) { s_gui->_SetNextWindowPos(pos, cond, pivot); }
62 static inline void SetNextWindowSize(
const vcm::Vec2 & size, GUICond cond = GUICondBits::GUICond_None) { s_gui->_SetNextWindowSize(size, cond); }
63 static inline void SetNextWindowViewport(GUIViewport viewport) { s_gui->_SetNextWindowViewport(viewport); }
65 static inline vcm::Vec2 GetContentRegionAvail() {
return s_gui->_GetContentRegionAvail(); }
67 static inline GUIViewport GetMainViewport() {
return s_gui->_GetMainViewport(); }
68 static inline vcm::Vec2 GetWindowSize() {
return s_gui->_GetWindowSize(); }
69 static inline vcm::Vec2 GetWindowPos() {
return s_gui->_GetWindowPos(); }
70 static inline void NewFrame() { s_gui->_NewFrame(); }
71 static inline void Begin(
const char * name,
bool * p_open =
nullptr, GUIWindowFlags flags = 0) { s_gui->_Begin(name, p_open, flags); }
72 static inline void End() { s_gui->_End(); }
73 static inline void Text(
const char* fmt, ...) { va_list args; va_start(args, fmt); s_gui->_Text(fmt, args); va_end(args); }
74 static inline void TextColored(
const vcm::Vec4 & col,
const char* fmt, ...) { va_list args; va_start(args, fmt); s_gui->_TextColored(col, fmt, args); va_end(args); }
75 static inline void LabelText(
const char* label,
const char* fmt, ...) { va_list args; va_start(args, fmt); s_gui->_LabelText(label, fmt, args); va_end(args); }
77 static inline void Image(
const vc::Texture * texture,
const vcm::Vec2 & size,
bool centering =
true) { s_gui->_Image(texture, size, centering); }
78 static inline void Image(
const vc::RenderTarget * renderTarget,
const vcm::Vec2 & size,
bool centering =
true) { s_gui->_Image(renderTarget->GetTexture(), size, centering); }
80 static inline bool InputText(
const char* label,
char* buf,
size_t buf_size, GUIInputTextFlags flags = 0) {
return s_gui->_InputText(label, buf, buf_size, flags); }
82 static inline bool TreeNode(
const char* label) {
return s_gui->_TreeNode(label); }
83 static inline void TreePop() { s_gui->_TreePop(); }
84 static inline void TreePush(
const char* str_id) { s_gui->_TreePush(str_id); }
86 static inline void SeparatorText(
const char* text) { s_gui->_SeparatorText(text); }
87 static inline void Separator() { s_gui->_Separator(); }
88 static inline void Spacing() { s_gui->_Spacing(); }
89 static inline void Dummy(
const vcm::Vec2 & size) { s_gui->_Dummy(size); }
91 static inline bool SliderFloat(
const char* label,
float* v,
float v_min,
float v_max,
const char* format =
"%.3f") {
return s_gui->_SliderFloat(label, v, v_min, v_max, format); }
92 static inline bool SliderFloat3(
const char* label,
float v[3],
float v_min,
float v_max,
const char* format =
"%.3f") {
return s_gui->_SliderFloat3(label, v, v_min, v_max, format); }
94 static inline bool InputFloat(
const char* label,
float* v,
float step = 0.0f,
float step_fast = 0.0f,
const char* format =
"%.3f", GUIColorEditFlags flags = 0) {
return s_gui->_InputFloat(label, v, step, step_fast, format, flags); }
95 static inline bool InputFloat3(
const char* label,
float v[3],
const char* format =
"%.3f", GUIColorEditFlags flags = 0) {
return s_gui->_InputFloat3(label, v, format, flags); }
97 static inline void ColorEdit3(
const char* label,
float col[3], GUIColorEditFlags flags = 0) { s_gui->_ColorEdit3(label, col, flags); }
99 static inline bool CollapsingHeader(
const char* label, GUITreeNodeFlags flags = 0) {
return s_gui->_CollapsingHeader(label, flags); }
101 static inline bool Button(
const char* label,
const vcm::Vec2 & size = vcm::Vec2(0, 0)) {
return s_gui->_Button(label, size); }
102 static inline bool Checkbox(
const char* label,
bool* v) {
return s_gui->_Checkbox(label, v); }
103 static inline void ProgressBar(
float fraction,
const vcm::Vec2 & size_arg = vcm::Vec2(-1, 0),
const char* overlay =
nullptr) { s_gui->_ProgressBar(fraction, size_arg, overlay); }
105 static inline bool Selectable(
const char* label,
bool selected, GUISelectableFlags flags = 0,
const vcm::Vec2 & size = vcm::Vec2(0, 0)) {
return s_gui->_Selectable(label, selected, flags, size); }
107 static inline bool BeginCombo(
const char* label,
const char* preview_value, GUIComboFlags flags = 0) {
return s_gui->_BeginCombo(label, preview_value, flags); }
108 static inline void EndCombo() { s_gui->_EndCombo(); }
110 static inline bool BeginMenu(
const char* label,
bool enabled =
true) {
return s_gui->_BeginMenu(label, enabled); }
111 static inline void EndMenu() { s_gui->_EndMenu(); }
113 static inline bool BeginMainMenuBar() {
return s_gui->_BeginMainMenuBar(); }
114 static inline void EndMainMenuBar() { s_gui->_EndMainMenuBar(); }
116 static inline bool BeginMenuBar() {
return s_gui->_BeginMenuBar(); }
117 static inline void EndMenuBar() { s_gui->_EndMenuBar(); }
119 static inline bool BeginChild(
const char* str_id,
const vcm::Vec2 & size, GUIChildFlags childFlags, GUIWindowFlags extraFlags = 0) {
return s_gui->_BeginChild(str_id, size, childFlags, extraFlags); }
120 static inline void EndChild() { s_gui->_EndChild(); }
122 static inline bool MenuItem(
const char* str,
const char* text =
nullptr) {
return s_gui->_MenuItem(str, text); }
124 static inline void SetNextItemWidth(
float item_width) { s_gui->_SetNextItemWidth(item_width); }
125 static inline void SetItemDefaultFocus() { s_gui->_SetItemDefaultFocus(); }
127 static inline void SameLine(
float offset_from_start_x = 0.0f,
float spacing = -1.0f) { s_gui->_SameLine(offset_from_start_x, spacing); }
129 static inline void PushItemWidth(
float item_width) { s_gui->_PushItemWidth(item_width); }
130 static inline void PopItemWidth() { s_gui->_PopItemWidth(); }
132 static inline void PushButtonTextAlign(
const vcm::Vec2 & padding) { s_gui->_PushButtonTextAlign(padding); }
133 static inline void PushWindowPadding(
const vcm::Vec2 & padding) { s_gui->_PushWindowPadding(padding); }
134 static inline void PopStyleVar() { s_gui->_PopStyleVar(); }
136 static inline GUIId DockSpace(GUIId
id,
const vcm::Vec2 & size, GUIDockNodeFlags flags) {
return s_gui->_DockSpace(
id, size, flags); }
137 static inline GUIId DockSpace(
const char *
id,
const vcm::Vec2 & size, GUIDockNodeFlags flags) {
return s_gui->_DockSpace(
id, size, flags); }
138 static inline GUIId DockSpaceOverViewport() {
return s_gui->_DockSpaceOverViewport(); }
139 static inline GUIId DockSpaceAddNode(GUIId
id, GUIDockNodeFlags flags) {
return s_gui->_DockSpaceAddNode(
id, flags); }
140 static inline void DockSpaceRemoveNode(GUIId
id) { s_gui->_DockSpaceRemoveNode(
id); }
141 static inline void DockSpaceSetNodeSize(GUIId
id,
const vcm::Vec2 & size) { s_gui->_DockSpaceSetNodeSize(
id, size); }
142 static inline GUIId DockSpaceSplitNode(GUIId
id, GUIDir split_dir,
float size_ratio, GUIId * out_id_at_dir, GUIId * out_id_at_opposite_dir) {
return s_gui->_DockSpaceSplitNode(
id, split_dir, size_ratio, out_id_at_dir, out_id_at_opposite_dir); }
143 static inline void DockWindow(
const char * str_id, GUIId
id) { s_gui->_DockWindow(str_id,
id); }
144 static inline void DockFinish(GUIId
id) { s_gui->_DockFinish(
id); }
146 static inline void OpenPopup(
const char * str_id, GUIPopupFlags flags = 0) { s_gui->_OpenPopup(str_id, flags); }
147 static inline bool BeginPopup(
const char * str_id, GUIWindowFlags flags = 0) {
return s_gui->_BeginPopup(str_id, flags); }
148 static inline bool BeginPopupModal(
const char * name,
bool * p_open =
nullptr, GUIWindowFlags flags = 0) {
return s_gui->_BeginPopupModal(name, p_open, flags); }
149 static inline bool BeginPopupContextItem(
const char * str_id =
nullptr, GUIPopupFlags flags = 0) {
return s_gui->_BeginPopupContextItem(str_id, flags); }
150 static inline void EndPopup() { s_gui->_EndPopup(); }
151 static inline void CloseCurrentPopup() { s_gui->_CloseCurrentPopup(); }
153 static bool isFirstFrame();
154 static bool isFirstInitialization();
156 static inline GUIId GetID(
const char * str_id) {
return s_gui->_GetID(str_id); }
158 static inline void Test() { s_gui->_Test(); }
160 static void GraphicsSettingsCollaspingHeader();
162 static void EntitiesListCollapsingHeader();
164 static bool EditableTexture(
vc::Texture * texture, vc::String & path);
165 static bool EditableModel(
vc::Model * model, vc::String & path);
170 static void EntityGuizmo(
const vcm::Vec2 & renderingSize);
173 static void __EntityPropertiesWindow();
174 static void __EntityGuizmo(
const vcm::Vec2 & renderingSize);
177 virtual void _EntityGuizmo(
vc::Transform3D * transform3D,
const vcm::Vec2 & renderingSize) = 0;
179 virtual vc::Error _Initialize() = 0;
180 virtual vc::Error _Reset() = 0;
182 virtual void _ClearFonts() = 0;
183 virtual void _AddFont(
const char * fontPath,
float fontSize,
const uint16_t * glyphRanges) = 0;
184 virtual void _AddFont(
const char * fontPath,
float fontSize) = 0;
186 virtual void _SetNextWindowPos(
const vcm::Vec2 & pos, GUICond cond,
const vcm::Vec2 & pivot) = 0;
187 virtual void _SetNextWindowSize(
const vcm::Vec2 & size, GUICond cond) = 0;
188 virtual void _SetNextWindowViewport(GUIViewport viewport) = 0;
190 virtual vcm::Vec2 _GetContentRegionAvail() = 0;
192 virtual vcm::Vec2 _GetWindowSize() = 0;
193 virtual vcm::Vec2 _GetWindowPos() = 0;
194 virtual GUIViewport _GetMainViewport() = 0;
196 virtual void _NewFrame() = 0;
197 virtual void _Begin(
const char * name,
bool * p_open, GUIWindowFlags flags) = 0;
198 virtual void _End() = 0;
199 virtual void _Text(
const char* fmt, va_list args) = 0;
200 virtual void _TextColored(
const vcm::Vec4 & col,
const char* fmt, va_list args) = 0;
201 virtual void _LabelText(
const char* label,
const char* fmt, va_list args) = 0;
203 virtual void _Image(
const vc::Texture * texture,
const vcm::Vec2 & size,
bool centering) = 0;
205 virtual bool _InputText(
const char* label,
char* buf,
size_t buf_size, GUIInputTextFlags flags) = 0;
207 virtual bool _TreeNode(
const char* label) = 0;
208 virtual void _TreePop() = 0;
209 virtual void _TreePush(
const char* str_id) = 0;
211 virtual void _SeparatorText(
const char* text) = 0;
212 virtual void _Separator() = 0;
213 virtual void _Spacing() = 0;
214 virtual void _Dummy(
const vcm::Vec2 & size) = 0;
216 virtual bool _SliderFloat(
const char* label,
float* v,
float v_min,
float v_max,
const char* format) = 0;
217 virtual bool _SliderFloat3(
const char* label,
float v[3],
float v_min,
float v_max,
const char* format) = 0;
219 virtual bool _InputFloat(
const char* label,
float* v,
float step,
float step_fast,
const char* format, GUIColorEditFlags flags) = 0;
220 virtual bool _InputFloat3(
const char* label,
float v[3],
const char* format, GUIColorEditFlags flags) = 0;
222 virtual void _ColorEdit3(
const char* label,
float col[3], GUIColorEditFlags flags) = 0;
224 virtual bool _CollapsingHeader(
const char* label, GUITreeNodeFlags flags) = 0;
226 virtual bool _Button(
const char* label,
const vcm::Vec2 & size) = 0;
227 virtual bool _Checkbox(
const char* label,
bool* v) = 0;
228 virtual void _ProgressBar(
float fraction,
const vcm::Vec2 & size_arg,
const char* overlay) = 0;
230 virtual bool _Selectable(
const char* label,
bool selected, GUISelectableFlags flags,
const vcm::Vec2 & size) = 0;
232 virtual bool _BeginCombo(
const char* label,
const char* preview_value, GUIComboFlags flags) = 0;
233 virtual void _EndCombo() = 0;
235 virtual bool _BeginMenu(
const char* label,
bool enabled) = 0;
236 virtual void _EndMenu() = 0;
238 virtual bool _BeginMainMenuBar() = 0;
239 virtual void _EndMainMenuBar() = 0;
241 virtual bool _BeginMenuBar() = 0;
242 virtual void _EndMenuBar() = 0;
244 virtual bool _BeginChild(
const char* str_id,
const vcm::Vec2 & size, GUIChildFlags childFlags, GUIWindowFlags extra_flags) = 0;
245 virtual void _EndChild() = 0;
247 virtual bool _MenuItem(
const char* str,
const char* text) = 0;
249 virtual void _SetNextItemWidth(
float item_width) = 0;
250 virtual void _SetItemDefaultFocus() = 0;
252 virtual void _SameLine(
float offset_from_start_x,
float spacing) = 0;
254 virtual void _PushItemWidth(
float item_width) = 0;
255 virtual void _PopItemWidth() = 0;
257 virtual void _PushButtonTextAlign(
const vcm::Vec2 & padding) = 0;
258 virtual void _PushWindowPadding(
const vcm::Vec2 & padding) = 0;
259 virtual void _PopStyleVar() = 0;
261 virtual GUIId _DockSpace(GUIId
id,
const vcm::Vec2 & size, GUIDockNodeFlags flags) = 0;
262 virtual GUIId _DockSpace(
const char *
id,
const vcm::Vec2 & size, GUIDockNodeFlags flags) = 0;
263 virtual GUIId _DockSpaceOverViewport() = 0;
264 virtual GUIId _DockSpaceAddNode(GUIId
id, GUIDockNodeFlags flags) = 0;
265 virtual void _DockSpaceRemoveNode(GUIId
id) = 0;
266 virtual void _DockSpaceSetNodeSize(GUIId
id,
const vcm::Vec2 & size) = 0;
267 virtual GUIId _DockSpaceSplitNode(GUIId
id, GUIDir split_dir,
float size_ratio, GUIId * out_id_at_dir, GUIId * out_id_at_opposite_dir) = 0;
268 virtual void _DockWindow(
const char * str_id, GUIId
id) = 0;
269 virtual void _DockFinish(GUIId
id) = 0;
271 virtual void _OpenPopup(
const char * str_id, GUIPopupFlags flags) = 0;
272 virtual bool _BeginPopup(
const char * str_id, GUIWindowFlags flags) = 0;
273 virtual bool _BeginPopupModal(
const char * name,
bool * p_open, GUIWindowFlags flags) = 0;
274 virtual bool _BeginPopupContextItem(
const char * str_id, GUIPopupFlags flags) = 0;
275 virtual void _EndPopup() = 0;
276 virtual void _CloseCurrentPopup() = 0;
278 virtual GUIId _GetID(
const char * str_id) = 0;
280 virtual void _Render() = 0;
281 virtual vc::Error _PreUpdate() = 0;
283 virtual void _Test() = 0;
289 const vc::String path;
291 const uint16_t * glyphRanges;
293 vc::Vector<FontData> _fonts;
300 vc::Error __PreUpdate();
309 static GUIDrawCallback s_guiDrawCallback;
310 static bool s_guiDraw;
312 friend class VenomEngine;