DDraceNetwork Docs
ui.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_CLIENT_UI_H
4#define GAME_CLIENT_UI_H
5
6#include "lineinput.h"
7#include "ui_rect.h"
8
9#include <engine/input.h>
10#include <engine/textrender.h>
11
12#include <chrono>
13#include <set>
14#include <string>
15#include <vector>
16
17class CScrollRegion;
18class IClient;
19class IGraphics;
20class IKernel;
21
22enum class EEditState
23{
24 NONE,
25 START,
26 EDITING,
27 END,
28 ONE_GO
29};
30
31template<typename T>
33{
36};
37
39{
43
44 std::chrono::nanoseconds m_Time;
45 float m_Value;
46
47 float m_XOffset;
48 float m_YOffset;
49 float m_WOffset;
50 float m_HOffset;
51};
52
54{
55public:
56 virtual float ToRelative(int AbsoluteValue, int Min, int Max) const = 0;
57 virtual int ToAbsolute(float RelativeValue, int Min, int Max) const = 0;
58};
60{
61public:
62 float ToRelative(int AbsoluteValue, int Min, int Max) const override
63 {
64 return (AbsoluteValue - Min) / (float)(Max - Min);
65 }
66 int ToAbsolute(float RelativeValue, int Min, int Max) const override
67 {
68 return round_to_int(RelativeValue * (Max - Min) + Min + 0.1f);
69 }
70};
72{
73private:
75
76public:
77 CLogarithmicScrollbarScale(int MinAdjustment)
78 {
79 m_MinAdjustment = maximum(MinAdjustment, 1); // must be at least 1 to support Min == 0 with logarithm
80 }
81 float ToRelative(int AbsoluteValue, int Min, int Max) const override
82 {
83 if(Min < m_MinAdjustment)
84 {
85 AbsoluteValue += m_MinAdjustment;
86 Min += m_MinAdjustment;
87 Max += m_MinAdjustment;
88 }
89 return (std::log(AbsoluteValue) - std::log(Min)) / (float)(std::log(Max) - std::log(Min));
90 }
91 int ToAbsolute(float RelativeValue, int Min, int Max) const override
92 {
93 int ResultAdjustment = 0;
94 if(Min < m_MinAdjustment)
95 {
96 Min += m_MinAdjustment;
97 Max += m_MinAdjustment;
98 ResultAdjustment = -m_MinAdjustment;
99 }
100 return round_to_int(std::exp(RelativeValue * (std::log(Max) - std::log(Min)) + std::log(Min))) + ResultAdjustment;
101 }
102};
103
105{
106public:
107 virtual ColorRGBA GetColor(bool Active, bool Hovered) const = 0;
108};
110{
111public:
112 ColorRGBA GetColor(bool Active, bool Hovered) const override
113 {
114 if(Active)
115 return ColorRGBA(0.15f, 0.15f, 0.15f, 0.25f);
116 else if(Hovered)
117 return ColorRGBA(0.5f, 0.5f, 0.5f, 0.25f);
118 return ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f);
119 }
120};
122{
123public:
124 ColorRGBA GetColor(bool Active, bool Hovered) const override
125 {
126 if(Active)
127 return ColorRGBA(1.0f, 1.0f, 1.0f, 0.4f);
128 else if(Hovered)
129 return ColorRGBA(1.0f, 1.0f, 1.0f, 0.6f);
130 return ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f);
131 }
132};
134{
135public:
136 ColorRGBA GetColor(bool Active, bool Hovered) const override
137 {
138 if(Active)
139 return ColorRGBA(0.9f, 0.9f, 0.9f, 1.0f);
140 else if(Hovered)
141 return ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f);
142 return ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f);
143 }
144};
145
146class CUi;
147
149{
150 friend class CUi;
151
153
154 CUIElement(CUi *pUI, int RequestedRectCount) { Init(pUI, RequestedRectCount); }
155
156public:
158 {
160
161 public:
164
165 float m_X;
166 float m_Y;
167 float m_Width;
168 float m_Height;
171
172 std::string m_Text;
174
176
179
181
183
184 void Reset();
185 void Draw(const CUIRect *pRect, ColorRGBA Color, int Corners, float Rounding);
186 };
187
188protected:
189 CUi *Ui() const { return m_pUI; }
190 std::vector<SUIElementRect> m_vUIRects;
191
192public:
193 CUIElement() = default;
194
195 void Init(CUi *pUI, int RequestedRectCount);
196
197 SUIElementRect *Rect(size_t Index)
198 {
199 return &m_vUIRects[Index];
200 }
201
203 {
204 return !m_vUIRects.empty();
205 }
206
207 void InitRects(int RequestedRectCount);
208};
209
211{
212 float m_MaxWidth = -1;
213 bool m_StopAtEnd = false;
214 bool m_EllipsisAtEnd = false;
216 std::vector<STextColorSplit> m_vColorSplits = {};
217};
218
219enum EButtonFlags : unsigned
220{
225
227};
228
230{
231 int m_Checked = 0;
234 bool m_UseIconFont = false;
235 bool m_ShowDropDownIcon = false;
237 float m_Rounding = 5.0f;
238 float m_FontFactor = 0.0f;
239 ColorRGBA m_Color = ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f);
241};
242
244{
245private:
246 static CUi *s_pUI;
247
248public:
249 static void Init(CUi *pUI) { s_pUI = pUI; }
250
251 IClient *Client() const;
252 IGraphics *Graphics() const;
253 IInput *Input() const;
254 ITextRender *TextRender() const;
255 CUi *Ui() const { return s_pUI; }
256};
257
259{
260};
261
263{
264 bool m_UseScroll = true;
265 int64_t m_Step = 1;
266 float m_Scale = 1.0f;
267 bool m_IsHex = false;
268 int m_HexPrefix = 6;
269 ColorRGBA m_Color = ColorRGBA(0.0f, 0.0f, 0.0f, 0.4f);
270};
271
273{
274 float m_Progress = -1.0f; // between 0.0f and 1.0f, or negative for indeterminate progress
275 ColorRGBA m_Color = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f);
276 int m_Segments = 64;
277};
278
283{
284};
285
287{
289 ColorRGBA m_BorderColor = ColorRGBA(0.5f, 0.5f, 0.5f, 0.75f);
290 ColorRGBA m_BackgroundColor = ColorRGBA(0.0f, 0.0f, 0.0f, 0.75f);
291};
292
293class CUi
294{
295public:
300 {
305
310
315 };
316
327 typedef EPopupMenuFunctionResult (*FPopupMenuFunction)(void *pContext, CUIRect View, bool Active);
328
332 typedef std::function<void()> FPopupMenuClosedCallback;
333
338 {
339 friend class CUi;
340
344
345 public:
346 bool m_AnyPressed = false;
347 bool m_PrimaryPressed = false;
348 bool m_SecondaryPressed = false;
349 vec2 m_PrimaryPosition = vec2(-1.0f, -1.0f);
350 vec2 m_PrimaryDelta = vec2(0.0f, 0.0f);
351 vec2 m_ScrollAmount = vec2(0.0f, 0.0f);
352 };
353
354private:
356
357 const void *m_pHotItem = nullptr;
358 const void *m_pActiveItem = nullptr;
359 const void *m_pLastActiveItem = nullptr; // only used internally to track active CLineInput
360 const void *m_pBecomingHotItem = nullptr;
363 bool m_ActiveItemValid = false;
364
368 {
369 public:
370 const void *m_pLastClickedId = nullptr;
371 float m_LastClickTime = -1.0f;
372 vec2 m_LastClickPos = vec2(-1.0f, -1.0f);
373 };
375 const void *m_pLastEditingItem = nullptr;
379 {
380 public:
381 int m_Button = -1;
382 bool m_DidScroll = false;
383 float m_ScrollValue = 0.0f;
385 const void *m_pLastTextId = nullptr;
386 };
388
389 vec2 m_UpdatedMousePos = vec2(0.0f, 0.0f); // in window screen space
390 vec2 m_UpdatedMouseDelta = vec2(0.0f, 0.0f); // in window screen space
391 vec2 m_MousePos = vec2(0.0f, 0.0f); // in gui space
392 vec2 m_MouseDelta = vec2(0.0f, 0.0f); // in gui space
393 vec2 m_MouseWorldPos = vec2(-1.0f, -1.0f); // in world space
395 unsigned m_MouseButtons = 0;
396 unsigned m_LastMouseButtons = 0;
398 bool m_MouseSlow = false;
399 bool m_MouseLock = false;
400 const void *m_pMouseLockId = nullptr;
401
402 unsigned m_HotkeysPressed = 0;
403
405
406 std::vector<CUIRect> m_vClips;
407 void UpdateClipping();
408
410 {
411 static constexpr float POPUP_BORDER = 1.0f;
412 static constexpr float POPUP_MARGIN = 4.0f;
413
419 };
420 std::vector<SPopupMenu> m_vPopupMenus;
422
423 static CUi::EPopupMenuFunctionResult PopupMessage(void *pContext, CUIRect View, bool Active);
424 static CUi::EPopupMenuFunctionResult PopupConfirm(void *pContext, CUIRect View, bool Active);
425 static CUi::EPopupMenuFunctionResult PopupSelection(void *pContext, CUIRect View, bool Active);
426 static CUi::EPopupMenuFunctionResult PopupColorPicker(void *pContext, CUIRect View, bool Active);
427
432
433 std::vector<CUIElement *> m_vpOwnUIElements; // ui elements maintained by CUi class
434 std::vector<CUIElement *> m_vpUIElements;
435
436public:
442
443 static const float ms_FontmodHeight;
444
445 void Init(IKernel *pKernel);
446 IClient *Client() const { return m_pClient; }
447 IGraphics *Graphics() const { return m_pGraphics; }
448 IInput *Input() const { return m_pInput; }
450
451 CUi();
452 ~CUi();
453
454 enum EHotkey : unsigned
455 {
456 HOTKEY_ENTER = 1 << 0,
458 HOTKEY_UP = 1 << 2,
459 HOTKEY_DOWN = 1 << 3,
460 HOTKEY_LEFT = 1 << 4,
461 HOTKEY_RIGHT = 1 << 5,
463 HOTKEY_TAB = 1 << 7,
466 HOTKEY_PAGE_UP = 1 << 10,
468 HOTKEY_HOME = 1 << 12,
469 HOTKEY_END = 1 << 13,
470 };
471
472 void ResetUIElement(CUIElement &UIElement) const;
473
474 CUIElement *GetNewUIElement(int RequestedRectCount);
475
476 void AddUIElement(CUIElement *pElement);
477 void OnElementsReset();
478 void OnWindowResize();
479 void OnCursorMove(float X, float Y);
480
482 bool Enabled() const { return m_Enabled; }
483 void Update(vec2 MouseWorldPos = vec2(-1.0f, -1.0f));
484 void DebugRender(float X, float Y);
485
486 vec2 MousePos() const { return m_MousePos; }
487 float MouseX() const { return m_MousePos.x; }
488 float MouseY() const { return m_MousePos.y; }
489 vec2 MouseDelta() const { return m_MouseDelta; }
490 float MouseDeltaX() const { return m_MouseDelta.x; }
491 float MouseDeltaY() const { return m_MouseDelta.y; }
493 float MouseWorldX() const { return m_MouseWorldPos.x; }
494 float MouseWorldY() const { return m_MouseWorldPos.y; }
497 int MouseButton(int Index) const { return (m_MouseButtons >> Index) & 1; }
498 int MouseButtonClicked(int Index) const { return MouseButton(Index) && !((m_LastMouseButtons >> Index) & 1); }
500 {
503 return m_MouseLock;
504 }
505 void EnableMouseLock(const void *pId)
506 {
507 m_MouseLock = true;
508 m_pMouseLockId = pId;
509 }
510 void DisableMouseLock() { m_MouseLock = false; }
511
512 void SetHotItem(const void *pId) { m_pBecomingHotItem = pId; }
513 void SetActiveItem(const void *pId)
514 {
515 m_ActiveItemValid = true;
516 m_pActiveItem = pId;
517 if(pId)
518 m_pLastActiveItem = pId;
519 }
520 bool CheckActiveItem(const void *pId)
521 {
522 if(m_pActiveItem == pId)
523 {
524 m_ActiveItemValid = true;
525 return true;
526 }
527 return false;
528 }
530 const void *HotItem() const { return m_pHotItem; }
531 const void *NextHotItem() const { return m_pBecomingHotItem; }
532 const void *ActiveItem() const { return m_pActiveItem; }
534
535 void StartCheck() { m_ActiveItemValid = false; }
537 {
538 if(!m_ActiveItemValid && m_pActiveItem != nullptr)
539 {
540 SetActiveItem(nullptr);
541 m_pHotItem = nullptr;
542 m_pBecomingHotItem = nullptr;
543 }
544 }
545
546 bool MouseInside(const CUIRect *pRect) const;
547 bool MouseInsideClip() const { return !IsClipped() || MouseInside(ClipArea()); }
548 bool MouseHovered(const CUIRect *pRect) const { return MouseInside(pRect) && MouseInsideClip(); }
549 void ConvertMouseMove(float *pX, float *pY, IInput::ECursorType CursorType) const;
550 void UpdateTouchState(CTouchState &State) const;
551 void ResetMouseSlow() { m_MouseSlow = false; }
552
553 bool ConsumeHotkey(EHotkey Hotkey);
555 bool OnInput(const IInput::CEvent &Event);
556
557 constexpr float ButtonColorMulActive() const { return 0.5f; }
558 constexpr float ButtonColorMulHot() const { return 1.5f; }
559 constexpr float ButtonColorMulDefault() const { return 1.0f; }
560 float ButtonColorMul(const void *pId);
561
562 const CUIRect *Screen();
563 void MapScreen();
564 float PixelSize();
565
566 void ClipEnable(const CUIRect *pRect);
567 void ClipDisable();
568 const CUIRect *ClipArea() const;
569 inline bool IsClipped() const { return !m_vClips.empty(); }
570
571 int DoButtonLogic(const void *pId, int Checked, const CUIRect *pRect, const unsigned Flags);
572 int DoDraggableButtonLogic(const void *pId, int Checked, const CUIRect *pRect, bool *pClicked, bool *pAbrupted);
573 bool DoDoubleClickLogic(const void *pId);
574 EEditState DoPickerLogic(const void *pId, const CUIRect *pRect, float *pX, float *pY);
575 void DoSmoothScrollLogic(float *pScrollOffset, float *pScrollOffsetChange, float ViewPortSize, float TotalSize, bool SmoothClamp = false, float ScrollSpeed = 10.0f) const;
576 static vec2 CalcAlignedCursorPos(const CUIRect *pRect, vec2 TextSize, int Align, const float *pBiggestCharHeight = nullptr);
577
578 void DoLabel(const CUIRect *pRect, const char *pText, float Size, int Align, const SLabelProperties &LabelProps = {}) const;
579 void DoLabel_AutoLineSize(const char *pText, float FontSize, int Align, CUIRect *pRect, float LineSize, const SLabelProperties &LabelProps = {}) const;
580
581 void DoLabel(CUIElement::SUIElementRect &RectEl, const CUIRect *pRect, const char *pText, float Size, int Align, const SLabelProperties &LabelProps = {}, int StrLen = -1, const CTextCursor *pReadCursor = nullptr) const;
582 void DoLabelStreamed(CUIElement::SUIElementRect &RectEl, const CUIRect *pRect, const char *pText, float Size, int Align, const SLabelProperties &LabelProps = {}, int StrLen = -1, const CTextCursor *pReadCursor = nullptr) const;
583
600 bool DoEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners = IGraphics::CORNER_ALL, const std::vector<STextColorSplit> &vColorSplits = {});
601
618 bool DoClearableEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners = IGraphics::CORNER_ALL, const std::vector<STextColorSplit> &vColorSplits = {});
619
636 bool DoEditBox_Search(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, bool HotkeyEnabled);
637
638 int DoButton_Menu(CUIElement &UIElement, const CButtonContainer *pId, const std::function<const char *()> &GetTextLambda, const CUIRect *pRect, const SMenuButtonProperties &Props = {});
639 // only used for popup menus
640 int DoButton_PopupMenu(CButtonContainer *pButtonContainer, const char *pText, const CUIRect *pRect, float Size, int Align, float Padding = 0.0f, bool TransparentInactive = false, bool Enabled = true);
641
642 // value selector
643 SEditResult<int64_t> DoValueSelectorWithState(const void *pId, const CUIRect *pRect, const char *pLabel, int64_t Current, int64_t Min, int64_t Max, const SValueSelectorProperties &Props = {});
644 int64_t DoValueSelector(const void *pId, const CUIRect *pRect, const char *pLabel, int64_t Current, int64_t Min, int64_t Max, const SValueSelectorProperties &Props = {});
645
646 // scrollbars
647 enum
648 {
652 };
653 float DoScrollbarV(const void *pId, const CUIRect *pRect, float Current);
654 float DoScrollbarH(const void *pId, const CUIRect *pRect, float Current, const ColorRGBA *pColorInner = nullptr);
655 bool DoScrollbarOption(const void *pId, int *pOption, const CUIRect *pRect, const char *pStr, int Min, int Max, const IScrollbarScale *pScale = &ms_LinearScrollbarScale, unsigned Flags = 0u, const char *pSuffix = "");
656
657 // progress bar
658 void RenderProgressBar(CUIRect ProgressBar, float Progress);
659
660 // progress spinner
661 void RenderProgressSpinner(vec2 Center, float OuterRadius, const SProgressSpinnerProperties &Props = {}) const;
662
663 // popup menu
664 void DoPopupMenu(const SPopupMenuId *pId, float X, float Y, float Width, float Height, void *pContext, FPopupMenuFunction pfnFunc, const SPopupMenuProperties &Props = {});
665 void RenderPopupMenus();
666 void ClosePopupMenu(const SPopupMenuId *pId, bool IncludeDescendants = false);
667 void ClosePopupMenus();
668 bool IsPopupOpen() const;
669 bool IsPopupOpen(const SPopupMenuId *pId) const;
670 bool IsPopupHovered() const;
672
674 {
675 static constexpr float POPUP_MAX_WIDTH = 200.0f;
676 static constexpr float POPUP_FONT_SIZE = 10.0f;
677
678 CUi *m_pUI; // set by CUi when popup is shown
679 char m_aMessage[1024];
681
682 void DefaultColor(class ITextRender *pTextRender);
683 void ErrorColor();
684 };
685 void ShowPopupMessage(float X, float Y, SMessagePopupContext *pContext);
686
688 {
690 {
691 UNSET = 0,
694 };
695 static constexpr float POPUP_MAX_WIDTH = 200.0f;
696 static constexpr float POPUP_FONT_SIZE = 10.0f;
697 static constexpr float POPUP_BUTTON_HEIGHT = 12.0f;
698 static constexpr float POPUP_BUTTON_SPACING = 5.0f;
699
700 CUi *m_pUI; // set by CUi when popup is shown
703 char m_aMessage[1024];
705
708
710 void Reset();
711 void YesNoButtons();
712 };
713 void ShowPopupConfirm(float X, float Y, SConfirmPopupContext *pContext);
714
716 {
717 CUi *m_pUI; // set by CUi when popup is shown
720 char m_aMessage[256];
721 std::vector<std::string> m_vEntries;
722 std::vector<CButtonContainer> m_vButtonContainers;
723 const std::string *m_pSelection;
729 float m_Width;
732
734 void Reset();
735 };
736 void ShowPopupSelection(float X, float Y, SSelectionPopupContext *pContext);
737
739 {
741 {
746 };
747
748 CUi *m_pUI; // set by CUi when popup is shown
750 bool m_Alpha = false;
751 unsigned int *m_pHslaColor = nullptr; // may be nullptr
755 // UI element IDs
756 const char m_HuePickerId = 0;
757 const char m_ColorPickerId = 0;
758 const char m_aValueSelectorIds[5] = {0};
761 };
762 void ShowPopupColorPicker(float X, float Y, SColorPickerPopupContext *pContext);
763
764 // dropdown menu
766 {
770 bool m_Init = false;
771 };
772 int DoDropDown(CUIRect *pRect, int CurSelection, const char **pStrs, int Num, SDropDownState &State);
773};
774
775#endif
Definition: ui.h:259
Definition: ui.h:110
ColorRGBA GetColor(bool Active, bool Hovered) const override
Definition: ui.h:112
Definition: ui.h:122
ColorRGBA GetColor(bool Active, bool Hovered) const override
Definition: ui.h:124
Definition: lineinput.h:215
Definition: lineinput.h:25
Definition: ui.h:60
float ToRelative(int AbsoluteValue, int Min, int Max) const override
Definition: ui.h:62
int ToAbsolute(float RelativeValue, int Min, int Max) const override
Definition: ui.h:66
Definition: ui.h:72
float ToRelative(int AbsoluteValue, int Min, int Max) const override
Definition: ui.h:81
int ToAbsolute(float RelativeValue, int Min, int Max) const override
Definition: ui.h:91
int m_MinAdjustment
Definition: ui.h:74
CLogarithmicScrollbarScale(int MinAdjustment)
Definition: ui.h:77
Definition: ui.h:134
ColorRGBA GetColor(bool Active, bool Hovered) const override
Definition: ui.h:136
Definition: ui_scrollregion.h:90
Definition: textrender.h:206
Definition: ui.h:244
IClient * Client() const
Definition: ui.cpp:96
IInput * Input() const
Definition: ui.cpp:98
static void Init(CUi *pUI)
Definition: ui.h:249
ITextRender * TextRender() const
Definition: ui.cpp:99
static CUi * s_pUI
Definition: ui.h:246
IGraphics * Graphics() const
Definition: ui.cpp:97
CUi * Ui() const
Definition: ui.h:255
Definition: ui.h:149
CUi * m_pUI
Definition: ui.h:152
bool AreRectsInit()
Definition: ui.h:202
std::vector< SUIElementRect > m_vUIRects
Definition: ui.h:190
SUIElementRect * Rect(size_t Index)
Definition: ui.h:197
CUi * Ui() const
Definition: ui.h:189
CUIElement(CUi *pUI, int RequestedRectCount)
Definition: ui.h:154
void InitRects(int RequestedRectCount)
Definition: ui.cpp:29
void Init(CUi *pUI, int RequestedRectCount)
Definition: ui.cpp:21
CUIElement()=default
Definition: ui_rect.h:11
Definition: ui.h:368
float m_LastClickTime
Definition: ui.h:371
vec2 m_LastClickPos
Definition: ui.h:372
const void * m_pLastClickedId
Definition: ui.h:370
Definition: ui.h:338
bool m_AnyPressed
Definition: ui.h:346
vec2 m_PrimaryDelta
Definition: ui.h:350
float m_SecondaryActivationTime
Definition: ui.h:342
bool m_SecondaryPressedNext
Definition: ui.h:341
bool m_PrimaryPressed
Definition: ui.h:347
bool m_SecondaryPressed
Definition: ui.h:348
vec2 m_PrimaryPosition
Definition: ui.h:349
vec2 m_ScrollAmount
Definition: ui.h:351
vec2 m_SecondaryActivationDelta
Definition: ui.h:343
Definition: ui.h:379
CLineInputNumber m_NumberInput
Definition: ui.h:384
bool m_DidScroll
Definition: ui.h:382
float m_ScrollValue
Definition: ui.h:383
const void * m_pLastTextId
Definition: ui.h:385
int m_Button
Definition: ui.h:381
Definition: ui.h:294
void DoPopupMenu(const SPopupMenuId *pId, float X, float Y, float Width, float Height, void *pContext, FPopupMenuFunction pfnFunc, const SPopupMenuProperties &Props={})
Definition: ui.cpp:1561
void ResetUIElement(CUIElement &UIElement) const
Definition: ui.cpp:143
void ClipEnable(const CUIRect *pRect)
Definition: ui.cpp:459
EEditState DoPickerLogic(const void *pId, const CUIRect *pRect, float *pX, float *pY)
Definition: ui.cpp:619
static const CLogarithmicScrollbarScale ms_LogarithmicScrollbarScale
Definition: ui.h:438
vec2 m_UpdatedMouseDelta
Definition: ui.h:390
void FinishCheck()
Definition: ui.h:536
void RenderProgressSpinner(vec2 Center, float OuterRadius, const SProgressSpinnerProperties &Props={}) const
Definition: ui.cpp:1519
bool OnInput(const IInput::CEvent &Event)
Definition: ui.cpp:387
int DoButton_PopupMenu(CButtonContainer *pButtonContainer, const char *pText, const CUIRect *pRect, float Size, int Align, float Padding=0.0f, bool TransparentInactive=false, bool Enabled=true)
Definition: ui.cpp:1142
CTouchState m_TouchState
Definition: ui.h:397
std::function< void()> FPopupMenuClosedCallback
Definition: ui.h:332
std::vector< SPopupMenu > m_vPopupMenus
Definition: ui.h:420
void EnableMouseLock(const void *pId)
Definition: ui.h:505
vec2 m_MousePos
Definition: ui.h:391
const void * HotItem() const
Definition: ui.h:530
void DoLabel(const CUIRect *pRect, const char *pText, float Size, int Align, const SLabelProperties &LabelProps={}) const
Definition: ui.cpp:793
void SetPopupMenuClosedCallback(FPopupMenuClosedCallback pfnCallback)
Definition: ui.cpp:1676
bool MouseInside(const CUIRect *pRect) const
Definition: ui.cpp:270
std::vector< CUIElement * > m_vpOwnUIElements
Definition: ui.h:433
void ResetMouseSlow()
Definition: ui.h:551
unsigned m_UpdatedMouseButtons
Definition: ui.h:394
int DoButtonLogic(const void *pId, int Checked, const CUIRect *pRect, const unsigned Flags)
Definition: ui.cpp:506
IGraphics * m_pGraphics
Definition: ui.h:429
const void * m_pActiveItem
Definition: ui.h:358
bool IsPopupHovered() const
Definition: ui.cpp:1671
unsigned m_HotkeysPressed
Definition: ui.h:402
constexpr float ButtonColorMulHot() const
Definition: ui.h:558
void SetEnabled(bool Enabled)
Definition: ui.h:481
vec2 MousePos() const
Definition: ui.h:486
void SetActiveItem(const void *pId)
Definition: ui.h:513
EHotkey
Definition: ui.h:455
@ HOTKEY_TAB
Definition: ui.h:463
@ HOTKEY_PAGE_DOWN
Definition: ui.h:467
@ HOTKEY_DELETE
Definition: ui.h:462
@ HOTKEY_SCROLL_UP
Definition: ui.h:464
@ HOTKEY_ESCAPE
Definition: ui.h:457
@ HOTKEY_END
Definition: ui.h:469
@ HOTKEY_SCROLL_DOWN
Definition: ui.h:465
@ HOTKEY_ENTER
Definition: ui.h:456
@ HOTKEY_PAGE_UP
Definition: ui.h:466
@ HOTKEY_LEFT
Definition: ui.h:460
@ HOTKEY_RIGHT
Definition: ui.h:461
@ HOTKEY_DOWN
Definition: ui.h:459
@ HOTKEY_HOME
Definition: ui.h:468
@ HOTKEY_UP
Definition: ui.h:458
int DoDropDown(CUIRect *pRect, int CurSelection, const char **pStrs, int Num, SDropDownState &State)
Definition: ui.cpp:1870
bool IsClipped() const
Definition: ui.h:569
float PixelSize()
Definition: ui.cpp:454
CScrollRegion * m_pBecomingHotScrollRegion
Definition: ui.h:362
static const CLinearScrollbarScale ms_LinearScrollbarScale
Definition: ui.h:437
bool DoEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners=IGraphics::CORNER_ALL, const std::vector< STextColorSplit > &vColorSplits={})
Definition: ui.cpp:897
bool IsPopupOpen() const
Definition: ui.cpp:1661
void DoLabelStreamed(CUIElement::SUIElementRect &RectEl, const CUIRect *pRect, const char *pText, float Size, int Align, const SLabelProperties &LabelProps={}, int StrLen=-1, const CTextCursor *pReadCursor=nullptr) const
Definition: ui.cpp:833
void DebugRender(float X, float Y)
Definition: ui.cpp:261
constexpr float ButtonColorMulDefault() const
Definition: ui.h:559
~CUi()
Definition: ui.cpp:120
void OnCursorMove(float X, float Y)
Definition: ui.cpp:166
static vec2 CalcAlignedCursorPos(const CUIRect *pRect, vec2 TextSize, int Align, const float *pBiggestCharHeight=nullptr)
Definition: ui.cpp:766
vec2 m_MouseWorldPos
Definition: ui.h:393
static CUi::EPopupMenuFunctionResult PopupSelection(void *pContext, CUIRect View, bool Active)
Definition: ui.cpp:1791
vec2 UpdatedMousePos() const
Definition: ui.h:495
int64_t DoValueSelector(const void *pId, const CUIRect *pRect, const char *pLabel, int64_t Current, int64_t Min, int64_t Max, const SValueSelectorProperties &Props={})
Definition: ui.cpp:1154
vec2 m_MouseDelta
Definition: ui.h:392
FPopupMenuClosedCallback m_pfnPopupMenuClosedCallback
Definition: ui.h:421
bool ConsumeHotkey(EHotkey Hotkey)
Definition: ui.cpp:380
int m_ActiveDraggableButtonLogicButton
Definition: ui.h:366
void RenderProgressBar(CUIRect ProgressBar, float Progress)
Definition: ui.cpp:1511
void UpdateTouchState(CTouchState &State) const
Definition: ui.cpp:299
IClient * m_pClient
Definition: ui.h:428
static CUi::EPopupMenuFunctionResult PopupConfirm(void *pContext, CUIRect View, bool Active)
Definition: ui.cpp:1743
IClient * Client() const
Definition: ui.h:446
vec2 MouseWorldPos() const
Definition: ui.h:492
static const CDarkButtonColorFunction ms_DarkButtonColorFunction
Definition: ui.h:439
static const CScrollBarColorFunction ms_ScrollBarColorFunction
Definition: ui.h:441
bool Enabled() const
Definition: ui.h:482
ITextRender * m_pTextRender
Definition: ui.h:431
float MouseWorldX() const
Definition: ui.h:493
bool MouseHovered(const CUIRect *pRect) const
Definition: ui.h:548
unsigned m_MouseButtons
Definition: ui.h:395
IInput * Input() const
Definition: ui.h:448
void MapScreen()
Definition: ui.cpp:448
void DisableMouseLock()
Definition: ui.h:510
void ConvertMouseMove(float *pX, float *pY, IInput::ECursorType CursorType) const
Definition: ui.cpp:275
float MouseY() const
Definition: ui.h:488
float DoScrollbarV(const void *pId, const CUIRect *pRect, float Current)
Definition: ui.cpp:1286
bool m_ActiveItemValid
Definition: ui.h:363
float ButtonColorMul(const void *pId)
Definition: ui.cpp:432
ITextRender * TextRender() const
Definition: ui.h:449
float MouseDeltaY() const
Definition: ui.h:491
void AddUIElement(CUIElement *pElement)
Definition: ui.cpp:138
unsigned m_LastMouseButtons
Definition: ui.h:396
int MouseButton(int Index) const
Definition: ui.h:497
CScrollRegion * m_pHotScrollRegion
Definition: ui.h:361
int m_ActiveButtonLogicButton
Definition: ui.h:365
static CUi::EPopupMenuFunctionResult PopupMessage(void *pContext, CUIRect View, bool Active)
Definition: ui.cpp:1691
const void * m_pLastActiveItem
Definition: ui.h:359
bool MouseInsideClip() const
Definition: ui.h:547
int DoButton_Menu(CUIElement &UIElement, const CButtonContainer *pId, const std::function< const char *()> &GetTextLambda, const CUIRect *pRect, const SMenuButtonProperties &Props={})
Definition: ui.cpp:1040
void ShowPopupMessage(float X, float Y, SMessagePopupContext *pContext)
Definition: ui.cpp:1703
void ClosePopupMenu(const SPopupMenuId *pId, bool IncludeDescendants=false)
Definition: ui.cpp:1635
bool DoDoubleClickLogic(const void *pId)
Definition: ui.cpp:604
static const CLightButtonColorFunction ms_LightButtonColorFunction
Definition: ui.h:440
void ClearHotkeys()
Definition: ui.h:554
std::vector< CUIRect > m_vClips
Definition: ui.h:406
IGraphics * Graphics() const
Definition: ui.h:447
float m_ActiveScrollbarOffset
Definition: ui.h:376
void OnWindowResize()
Definition: ui.cpp:161
EPopupMenuFunctionResult(* FPopupMenuFunction)(void *pContext, CUIRect View, bool Active)
Definition: ui.h:327
const void * m_pLastEditingItem
Definition: ui.h:375
void UpdateClipping()
Definition: ui.cpp:491
static CUi::EPopupMenuFunctionResult PopupColorPicker(void *pContext, CUIRect View, bool Active)
Definition: ui.cpp:1914
vec2 UpdatedMouseDelta() const
Definition: ui.h:496
const CScrollRegion * HotScrollRegion() const
Definition: ui.h:533
@ SCROLLBAR_OPTION_MULTILINE
Definition: ui.h:651
@ SCROLLBAR_OPTION_INFINITE
Definition: ui.h:649
@ SCROLLBAR_OPTION_NOCLAMPVALUE
Definition: ui.h:650
vec2 m_UpdatedMousePos
Definition: ui.h:389
float MouseDeltaX() const
Definition: ui.h:490
void ShowPopupSelection(float X, float Y, SSelectionPopupContext *pContext)
Definition: ui.cpp:1841
bool m_MouseSlow
Definition: ui.h:398
void SetHotScrollRegion(CScrollRegion *pId)
Definition: ui.h:529
int MouseButtonClicked(int Index) const
Definition: ui.h:498
const void * ActiveItem() const
Definition: ui.h:532
int DoDraggableButtonLogic(const void *pId, int Checked, const CUIRect *pRect, bool *pClicked, bool *pAbrupted)
Definition: ui.cpp:543
const CUIRect * Screen()
Definition: ui.cpp:441
static const float ms_FontmodHeight
Definition: ui.h:443
CUi()
Definition: ui.cpp:112
IInput * m_pInput
Definition: ui.h:430
void ShowPopupConfirm(float X, float Y, SConfirmPopupContext *pContext)
Definition: ui.cpp:1730
float DoScrollbarH(const void *pId, const CUIRect *pRect, float Current, const ColorRGBA *pColorInner=nullptr)
Definition: ui.cpp:1356
std::vector< CUIElement * > m_vpUIElements
Definition: ui.h:434
vec2 MouseDelta() const
Definition: ui.h:489
const void * m_pBecomingHotItem
Definition: ui.h:360
void OnElementsReset()
Definition: ui.cpp:153
const CUIRect * ClipArea() const
Definition: ui.cpp:485
bool CheckActiveItem(const void *pId)
Definition: ui.h:520
CUIRect m_Screen
Definition: ui.h:404
const void * m_pMouseLockId
Definition: ui.h:400
void StartCheck()
Definition: ui.h:535
SEditResult< int64_t > DoValueSelectorWithState(const void *pId, const CUIRect *pRect, const char *pLabel, int64_t Current, int64_t Min, int64_t Max, const SValueSelectorProperties &Props={})
Definition: ui.cpp:1159
void Update(vec2 MouseWorldPos=vec2(-1.0f, -1.0f))
Definition: ui.cpp:177
constexpr float ButtonColorMulActive() const
Definition: ui.h:557
bool CheckMouseLock()
Definition: ui.h:499
void ClipDisable()
Definition: ui.cpp:478
void Init(IKernel *pKernel)
Definition: ui.cpp:101
EPopupMenuFunctionResult
Definition: ui.h:300
@ POPUP_KEEP_OPEN
Definition: ui.h:304
@ POPUP_CLOSE_CURRENT_AND_DESCENDANTS
Definition: ui.h:314
@ POPUP_CLOSE_CURRENT
Definition: ui.h:309
void SetHotItem(const void *pId)
Definition: ui.h:512
float MouseWorldY() const
Definition: ui.h:494
CUIElement * GetNewUIElement(int RequestedRectCount)
Definition: ui.cpp:129
bool DoEditBox_Search(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, bool HotkeyEnabled)
Definition: ui.cpp:1021
bool DoClearableEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize, int Corners=IGraphics::CORNER_ALL, const std::vector< STextColorSplit > &vColorSplits={})
Definition: ui.cpp:1000
CDoubleClickState m_DoubleClickState
Definition: ui.h:374
bool m_Enabled
Definition: ui.h:355
bool m_MouseLock
Definition: ui.h:399
void DoSmoothScrollLogic(float *pScrollOffset, float *pScrollOffsetChange, float ViewPortSize, float TotalSize, bool SmoothClamp=false, float ScrollSpeed=10.0f) const
Definition: ui.cpp:660
const void * NextHotItem() const
Definition: ui.h:531
void ShowPopupColorPicker(float X, float Y, SColorPickerPopupContext *pContext)
Definition: ui.cpp:2188
const void * m_pHotItem
Definition: ui.h:357
void RenderPopupMenus()
Definition: ui.cpp:1581
CValueSelectorState m_ActiveValueSelectorState
Definition: ui.h:387
void ClosePopupMenus()
Definition: ui.cpp:1650
float m_ProgressSpinnerOffset
Definition: ui.h:377
float MouseX() const
Definition: ui.h:487
bool DoScrollbarOption(const void *pId, int *pOption, const CUIRect *pRect, const char *pStr, int Min, int Max, const IScrollbarScale *pScale=&ms_LinearScrollbarScale, unsigned Flags=0u, const char *pSuffix="")
Definition: ui.cpp:1457
void DoLabel_AutoLineSize(const char *pText, float FontSize, int Align, CUIRect *pRect, float LineSize, const SLabelProperties &LabelProps={}) const
Definition: ui.cpp:889
Definition: color.h:173
Definition: color.h:203
Definition: color.h:210
Definition: ui.h:105
virtual ColorRGBA GetColor(bool Active, bool Hovered) const =0
Definition: client.h:36
Definition: graphics.h:184
@ CORNER_ALL
Definition: graphics.h:416
Definition: input.h:22
Definition: input.h:18
ECursorType
Definition: input.h:37
Definition: kernel.h:34
Definition: ui.h:54
virtual float ToRelative(int AbsoluteValue, int Min, int Max) const =0
virtual int ToAbsolute(float RelativeValue, int Min, int Max) const =0
Definition: textrender.h:314
T x
Definition: vmath.h:19
T y
Definition: vmath.h:23
constexpr int round_to_int(float f)
Definition: math.h:14
constexpr T maximum(T a, T b)
Definition: math.h:145
Definition: ui.h:158
CUIElement * m_pParent
Definition: ui.h:159
float m_Y
Definition: ui.h:166
CTextCursor m_Cursor
Definition: ui.h:175
float m_Height
Definition: ui.h:168
float m_Width
Definition: ui.h:167
ColorRGBA m_TextColor
Definition: ui.h:177
int m_ReadCursorGlyphCount
Definition: ui.h:173
int m_UIRectQuadContainer
Definition: ui.h:162
ColorRGBA m_TextOutlineColor
Definition: ui.h:178
void Draw(const CUIRect *pRect, ColorRGBA Color, int Corners, float Rounding)
Definition: ui.cpp:57
std::string m_Text
Definition: ui.h:172
SUIElementRect()
Definition: ui.cpp:37
float m_Rounding
Definition: ui.h:169
void Reset()
Definition: ui.cpp:39
STextContainerIndex m_UITextContainer
Definition: ui.h:163
ColorRGBA m_QuadColor
Definition: ui.h:182
int m_Corners
Definition: ui.h:170
float m_X
Definition: ui.h:165
Definition: ui.h:739
EColorPickerMode m_ColorMode
Definition: ui.h:749
CUi * m_pUI
Definition: ui.h:748
EColorPickerMode
Definition: ui.h:741
@ MODE_UNSET
Definition: ui.h:742
@ MODE_HSVA
Definition: ui.h:743
@ MODE_HSLA
Definition: ui.h:745
@ MODE_RGBA
Definition: ui.h:744
const char m_HuePickerId
Definition: ui.h:756
bool m_Alpha
Definition: ui.h:750
const char m_ColorPickerId
Definition: ui.h:757
ColorRGBA m_RgbaColor
Definition: ui.h:753
EEditState m_State
Definition: ui.h:760
CButtonContainer m_aModeButtons[(int) MODE_HSLA+1]
Definition: ui.h:759
const char m_aValueSelectorIds[5]
Definition: ui.h:758
ColorHSLA m_HslaColor
Definition: ui.h:754
unsigned int * m_pHslaColor
Definition: ui.h:751
ColorHSVA m_HsvaColor
Definition: ui.h:752
Definition: ui.h:688
static constexpr float POPUP_FONT_SIZE
Definition: ui.h:696
static constexpr float POPUP_BUTTON_SPACING
Definition: ui.h:698
static constexpr float POPUP_MAX_WIDTH
Definition: ui.h:695
EConfirmationResult
Definition: ui.h:690
@ CONFIRMED
Definition: ui.h:692
@ CANCELED
Definition: ui.h:693
@ UNSET
Definition: ui.h:691
char m_aNegativeButtonLabel[128]
Definition: ui.h:702
static constexpr float POPUP_BUTTON_HEIGHT
Definition: ui.h:697
CButtonContainer m_ConfirmButton
Definition: ui.h:707
char m_aPositiveButtonLabel[128]
Definition: ui.h:701
CUi * m_pUI
Definition: ui.h:700
void Reset()
Definition: ui.cpp:1719
char m_aMessage[1024]
Definition: ui.h:703
CButtonContainer m_CancelButton
Definition: ui.h:706
SConfirmPopupContext()
Definition: ui.cpp:1714
EConfirmationResult m_Result
Definition: ui.h:704
void YesNoButtons()
Definition: ui.cpp:1724
Definition: ui.h:766
CUIElement m_UiElement
Definition: ui.h:768
CButtonContainer m_ButtonContainer
Definition: ui.h:769
bool m_Init
Definition: ui.h:770
SSelectionPopupContext m_SelectionPopupContext
Definition: ui.h:767
Definition: ui.h:674
void ErrorColor()
Definition: ui.cpp:1686
static constexpr float POPUP_MAX_WIDTH
Definition: ui.h:675
char m_aMessage[1024]
Definition: ui.h:679
ColorRGBA m_TextColor
Definition: ui.h:680
CUi * m_pUI
Definition: ui.h:678
void DefaultColor(class ITextRender *pTextRender)
Definition: ui.cpp:1681
static constexpr float POPUP_FONT_SIZE
Definition: ui.h:676
Definition: ui.h:410
void * m_pContext
Definition: ui.h:417
static constexpr float POPUP_MARGIN
Definition: ui.h:412
const SPopupMenuId * m_pId
Definition: ui.h:414
static constexpr float POPUP_BORDER
Definition: ui.h:411
CUIRect m_Rect
Definition: ui.h:416
FPopupMenuFunction m_pfnFunc
Definition: ui.h:418
SPopupMenuProperties m_Props
Definition: ui.h:415
Definition: ui.h:716
float m_AlignmentHeight
Definition: ui.h:730
int m_SelectionIndex
Definition: ui.h:724
float m_EntryHeight
Definition: ui.h:725
float m_EntrySpacing
Definition: ui.h:727
bool m_TransparentButtons
Definition: ui.h:731
char m_aMessage[256]
Definition: ui.h:720
const std::string * m_pSelection
Definition: ui.h:723
SSelectionPopupContext()
Definition: ui.cpp:1769
float m_EntryPadding
Definition: ui.h:726
void Reset()
Definition: ui.cpp:1774
std::vector< CButtonContainer > m_vButtonContainers
Definition: ui.h:722
CUi * m_pUI
Definition: ui.h:717
SPopupMenuProperties m_Props
Definition: ui.h:719
float m_Width
Definition: ui.h:729
std::vector< std::string > m_vEntries
Definition: ui.h:721
float m_FontSize
Definition: ui.h:728
CScrollRegion * m_pScrollRegion
Definition: ui.h:718
Definition: ui.h:33
T m_Value
Definition: ui.h:35
EEditState m_State
Definition: ui.h:34
Definition: ui.h:211
float m_MaxWidth
Definition: ui.h:212
std::vector< STextColorSplit > m_vColorSplits
Definition: ui.h:216
bool m_StopAtEnd
Definition: ui.h:213
bool m_EllipsisAtEnd
Definition: ui.h:214
bool m_EnableWidthCheck
Definition: ui.h:215
Definition: ui.h:230
ColorRGBA m_Color
Definition: ui.h:239
bool m_UseIconFont
Definition: ui.h:234
bool m_ShowDropDownIcon
Definition: ui.h:235
bool m_HintRequiresStringCheck
Definition: ui.h:232
bool m_HintCanChangePositionOrSize
Definition: ui.h:233
unsigned m_Flags
Definition: ui.h:240
float m_FontFactor
Definition: ui.h:238
float m_Rounding
Definition: ui.h:237
int m_Corners
Definition: ui.h:236
int m_Checked
Definition: ui.h:231
Definition: ui.h:283
Definition: ui.h:287
ColorRGBA m_BackgroundColor
Definition: ui.h:290
int m_Corners
Definition: ui.h:288
ColorRGBA m_BorderColor
Definition: ui.h:289
Definition: ui.h:273
int m_Segments
Definition: ui.h:276
ColorRGBA m_Color
Definition: ui.h:275
float m_Progress
Definition: ui.h:274
Definition: textrender.h:295
Definition: ui.h:39
std::chrono::nanoseconds m_Time
Definition: ui.h:44
bool m_ScaleLabel
Definition: ui.h:41
float m_Value
Definition: ui.h:45
float m_XOffset
Definition: ui.h:47
bool m_Active
Definition: ui.h:40
float m_HOffset
Definition: ui.h:50
float m_WOffset
Definition: ui.h:49
bool m_RepositionLabel
Definition: ui.h:42
float m_YOffset
Definition: ui.h:48
Definition: ui.h:263
int64_t m_Step
Definition: ui.h:265
ColorRGBA m_Color
Definition: ui.h:269
float m_Scale
Definition: ui.h:266
int m_HexPrefix
Definition: ui.h:268
bool m_UseScroll
Definition: ui.h:264
bool m_IsHex
Definition: ui.h:267
EButtonFlags
Definition: ui.h:220
@ BUTTONFLAG_MIDDLE
Definition: ui.h:224
@ BUTTONFLAG_ALL
Definition: ui.h:226
@ BUTTONFLAG_LEFT
Definition: ui.h:222
@ BUTTONFLAG_RIGHT
Definition: ui.h:223
@ BUTTONFLAG_NONE
Definition: ui.h:221
EEditState
Definition: ui.h:23
vector2_base< float > vec2
Definition: vmath.h:158