DDNet documentation
Loading...
Searching...
No Matches
ui_scrollregion.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_SCROLLREGION_H
4#define GAME_CLIENT_UI_SCROLLREGION_H
5
6#include "ui.h"
7
9{
23
25 {
27 m_ScrollbarMargin = 5.0f;
29 m_SliderMinSize = 25.0f;
30 m_ScrollUnit = 10.0f;
31 m_ClipBgColor = ColorRGBA(0.0f, 0.0f, 0.0f, 0.0f);
32 m_ScrollbarBgColor = ColorRGBA(0.0f, 0.0f, 0.0f, 0.0f);
33 m_RailBgColor = ColorRGBA(1.0f, 1.0f, 1.0f, 0.25f);
34 m_SliderColor = ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f);
35 m_SliderColorHover = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f);
36 m_SliderColorGrabbed = ColorRGBA(0.9f, 0.9f, 0.9f, 1.0f);
38 m_ScrollHorizontal = false;
39 }
40
41 ColorRGBA SliderColor(bool Active, bool Hovered) const
42 {
43 if(Active)
45 else if(Hovered)
46 return m_SliderColorHover;
47 return m_SliderColor;
48 }
49};
50
51/*
52Usage example:
53
54 // -- Layout --
55 CUIRect View = ...; // parent UI rect initialized elsewhere
56 CUIRect Content; // rect for scrollable content
57 View.HSplitTop(500.0f, &Content, &View); // split maximum size of scrollable content
58
59 // -- Initialization --
60 static CScrollRegion s_ScrollRegion;
61 s_ScrollRegion.Begin(&Content);
62 // Content rect is now offset by the scroll offset
63
64 // -- [Optional] Initialization with parameters --
65 static CScrollRegion s_ScrollRegion;
66 CScrollRegionParams ScrollParams;
67 ScrollParams.m_ScrollUnit = 3 * LineHeight;
68 s_ScrollRegion.Begin(&Content, &ScrollParams);
69 // Content rect is now offset by the scroll offset
70
71 // -- "Register" your content rects --
72 CUIRect Rect;
73 Content.HSplitTop(SomeValue, &Rect, &Content);
74 s_ScrollRegion.AddRect(Rect);
75
76 // -- [Optional] Knowing if a rect is clipped --
77 s_ScrollRegion.RectClipped(Rect);
78
79 // -- [Optional] Scroll to the last added rect --
80 s_ScrollRegion.AddRect(Rect);
81 s_ScrollRegion.ScrollHere(Option);
82
83 // -- [Convenience] Add rect and check for visibility at the same time --
84 if(s_ScrollRegion.AddRect(Rect))
85 {
86 // The rect is visible (not clipped)
87 }
88
89 // -- [Convenience] Add rect and scroll to it if it's selected --
90 if(s_ScrollRegion.AddRect(Rect, ScrollToSelection && IsSelected))
91 {
92 // The rect is visible (not clipped)
93 }
94
95 // -- End --
96 s_ScrollRegion.End();
97*/
98
99// Instances of CScrollRegion must be static, as member addresses are used as UI item IDs
101{
102public:
109
110private:
113 float m_RequestScrollPos; // [0, ContentSize]
116
121
124 CUIRect m_LastAddedRect; // saved for ScrollHere()
125 float m_SliderGrabPos; // where did user grab the slider
128
129public:
136
138 void Reset();
139
140 void Begin(CUIRect *pClipRect, const CScrollRegionParams *pParams = nullptr);
141 void End();
142 bool AddRect(const CUIRect &Rect, bool ShouldScrollHere = false); // returns true if the added rect is visible (not clipped)
144 void ScrollRelative(EScrollRelative Direction, float SpeedMultiplier = 1.0f);
145 void ScrollRelativeDirect(vec2 ScrollAmount);
146 void DoEdgeScrolling();
147 bool RectClipped(const CUIRect &Rect) const;
148 bool ContentOverflows() const;
149 bool ScrollbarShown() const;
150 bool Animating() const;
151 bool Active() const;
152
153private:
154 float ContentAreaPos() const;
155 float ContentAreaSize() const;
156 float MaxScroll() const;
158 void DrawBackground(const CUIRect &ScrollbarBg);
159 void DoScrollInput();
161 void AdvanceAnimation();
162 void DoSlider();
163};
164
165#endif
float m_ScrollPos
Definition ui_scrollregion.h:111
float MaxScroll() const
Definition ui_scrollregion.cpp:176
void DoEdgeScrolling()
Definition ui_scrollregion.cpp:124
float m_ScrollSpeedMultiplier
Definition ui_scrollregion.h:115
CUIRect m_RailRect
Definition ui_scrollregion.h:123
float m_RequestScrollPos
Definition ui_scrollregion.h:113
void Reset()
Definition ui_scrollregion.cpp:16
bool ScrollbarShown() const
Definition ui_scrollregion.cpp:151
bool Animating() const
Definition ui_scrollregion.cpp:156
CUIRect SplitContentArea()
Definition ui_scrollregion.cpp:181
void DoScrollInput()
Definition ui_scrollregion.cpp:232
CScrollRegion()
Definition ui_scrollregion.cpp:11
float m_AnimTime
Definition ui_scrollregion.h:118
void Begin(CUIRect *pClipRect, const CScrollRegionParams *pParams=nullptr)
Definition ui_scrollregion.cpp:35
void DoSlider()
Definition ui_scrollregion.cpp:306
void ScrollRelativeDirect(vec2 ScrollAmount)
Definition ui_scrollregion.cpp:116
float m_ContentScrollOffset
Definition ui_scrollregion.h:126
bool AddRect(const CUIRect &Rect, bool ShouldScrollHere=false)
Definition ui_scrollregion.cpp:70
float m_AnimTargetScrollPos
Definition ui_scrollregion.h:120
float m_AnimTimeMax
Definition ui_scrollregion.h:117
bool Active() const
Definition ui_scrollregion.cpp:161
CUIRect m_ContentAreaRect
Definition ui_scrollregion.h:122
EScrollOption
Definition ui_scrollregion.h:131
@ SCROLLHERE_TOP
Definition ui_scrollregion.h:133
@ SCROLLHERE_BOTTOM
Definition ui_scrollregion.h:134
@ SCROLLHERE_KEEP_IN_VIEW
Definition ui_scrollregion.h:132
void End()
Definition ui_scrollregion.cpp:56
CUIRect m_LastAddedRect
Definition ui_scrollregion.h:124
float m_AnimInitScrollPos
Definition ui_scrollregion.h:119
float m_ContentSize
Definition ui_scrollregion.h:112
void DrawBackground(const CUIRect &ScrollbarBg)
Definition ui_scrollregion.cpp:209
bool ContentOverflows() const
Definition ui_scrollregion.cpp:146
float ContentAreaSize() const
Definition ui_scrollregion.cpp:171
EScrollRelative m_ScrollDirection
Definition ui_scrollregion.h:114
float ContentAreaPos() const
Definition ui_scrollregion.cpp:166
EScrollRelative
Definition ui_scrollregion.h:104
@ SCROLLRELATIVE_NONE
Definition ui_scrollregion.h:106
@ SCROLLRELATIVE_DOWN
Definition ui_scrollregion.h:107
@ SCROLLRELATIVE_UP
Definition ui_scrollregion.h:105
bool RectClipped(const CUIRect &Rect) const
Definition ui_scrollregion.cpp:141
void ScrollHere(EScrollOption Option=SCROLLHERE_KEEP_IN_VIEW)
Definition ui_scrollregion.cpp:82
void ScrollRelative(EScrollRelative Direction, float SpeedMultiplier=1.0f)
Definition ui_scrollregion.cpp:110
void AdvanceAnimation()
Definition ui_scrollregion.cpp:276
float m_SliderGrabPos
Definition ui_scrollregion.h:125
CScrollRegionParams m_Params
Definition ui_scrollregion.h:127
void UpdateHotScrollRegion()
Definition ui_scrollregion.cpp:262
Definition ui.h:254
Definition ui_rect.h:12
Definition color.h:183
Direction
Definition nameplates.cpp:212
Definition ui_scrollregion.h:9
CScrollRegionParams()
Definition ui_scrollregion.h:24
ColorRGBA m_SliderColor
Definition ui_scrollregion.h:18
ColorRGBA m_ScrollbarBgColor
Definition ui_scrollregion.h:16
ColorRGBA m_ClipBgColor
Definition ui_scrollregion.h:15
bool m_ScrollbarNoOuterMargin
Definition ui_scrollregion.h:12
ColorRGBA m_SliderColorHover
Definition ui_scrollregion.h:19
ColorRGBA m_RailBgColor
Definition ui_scrollregion.h:17
float m_SliderMinSize
Definition ui_scrollregion.h:13
float m_ScrollbarThickness
Definition ui_scrollregion.h:10
float m_ScrollbarMargin
Definition ui_scrollregion.h:11
ColorRGBA SliderColor(bool Active, bool Hovered) const
Definition ui_scrollregion.h:41
bool m_ScrollHorizontal
Definition ui_scrollregion.h:22
float m_ScrollUnit
Definition ui_scrollregion.h:14
ColorRGBA m_SliderColorGrabbed
Definition ui_scrollregion.h:20
bool m_ForceShowScrollbar
Definition ui_scrollregion.h:21
vector2_base< float > vec2
Definition vmath.h:162