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{
21 unsigned m_Flags;
22
23 enum
24 {
26 };
27
29 {
30 m_ScrollbarWidth = 20.0f;
31 m_ScrollbarMargin = 5.0f;
33 m_SliderMinHeight = 25.0f;
34 m_ScrollUnit = 10.0f;
35 m_ClipBgColor = ColorRGBA(0.0f, 0.0f, 0.0f, 0.0f);
36 m_ScrollbarBgColor = ColorRGBA(0.0f, 0.0f, 0.0f, 0.0f);
37 m_RailBgColor = ColorRGBA(1.0f, 1.0f, 1.0f, 0.25f);
38 m_SliderColor = ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f);
39 m_SliderColorHover = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f);
40 m_SliderColorGrabbed = ColorRGBA(0.9f, 0.9f, 0.9f, 1.0f);
41 m_Flags = 0;
42 }
43
44 ColorRGBA SliderColor(bool Active, bool Hovered) const
45 {
46 if(Active)
48 else if(Hovered)
49 return m_SliderColorHover;
50 return m_SliderColor;
51 }
52};
53
54/*
55Usage example:
56
57 // -- Layout --
58 CUIRect View = ...; // parent UI rect initialized elsewhere
59 CUIRect Content; // rect for scrollable content
60 View.HSplitTop(500.0f, &Content, &View); // split maximum size of scrollable content
61
62 // -- Initialization --
63 static CScrollRegion s_ScrollRegion;
64 s_ScrollRegion.Begin(&Content);
65 // Content rect is now offset by the scroll offset
66
67 // -- [Optional] Initialization with parameters --
68 static CScrollRegion s_ScrollRegion;
69 CScrollRegionParams ScrollParams;
70 ScrollParams.m_ScrollUnit = 3 * LineHeight;
71 s_ScrollRegion.Begin(&Content, &ScrollParams);
72 // Content rect is now offset by the scroll offset
73
74 // -- "Register" your content rects --
75 CUIRect Rect;
76 Content.HSplitTop(SomeValue, &Rect, &Content);
77 s_ScrollRegion.AddRect(Rect);
78
79 // -- [Optional] Knowing if a rect is clipped --
80 s_ScrollRegion.RectClipped(Rect);
81
82 // -- [Optional] Scroll to the last added rect --
83 s_ScrollRegion.AddRect(Rect);
84 s_ScrollRegion.ScrollHere(Option);
85
86 // -- [Convenience] Add rect and check for visibility at the same time --
87 if(s_ScrollRegion.AddRect(Rect))
88 {
89 // The rect is visible (not clipped)
90 }
91
92 // -- [Convenience] Add rect and scroll to it if it's selected --
93 if(s_ScrollRegion.AddRect(Rect, ScrollToSelection && IsSelected))
94 {
95 // The rect is visible (not clipped)
96 }
97
98 // -- End --
99 s_ScrollRegion.End();
100*/
101
102// Instances of CScrollRegion must be static, as member addresses are used as UI item IDs
104{
105public:
112
113private:
116 float m_RequestScrollY; // [0, ContentHeight]
119
124
127 CUIRect m_LastAddedRect; // saved for ScrollHere()
128 float m_SliderGrabPos; // where did user grab the slider
131
132public:
139
141 void Reset();
142
143 void Begin(CUIRect *pClipRect, const CScrollRegionParams *pParams = nullptr);
144 void End();
145 bool AddRect(const CUIRect &Rect, bool ShouldScrollHere = false); // returns true if the added rect is visible (not clipped)
147 void ScrollRelative(EScrollRelative Direction, float SpeedMultiplier = 1.0f);
148 void ScrollRelativeDirect(float ScrollAmount);
149 const CUIRect *ClipRect() const { return &m_ClipRect; }
150 void DoEdgeScrolling();
151 bool RectClipped(const CUIRect &Rect) const;
152 bool ScrollbarShown() const;
153 bool Animating() const;
154 bool Active() const;
155 const CScrollRegionParams &Params() const { return m_Params; }
156};
157
158#endif
void DoEdgeScrolling()
Definition ui_scrollregion.cpp:250
float m_ScrollSpeedMultiplier
Definition ui_scrollregion.h:118
CUIRect m_RailRect
Definition ui_scrollregion.h:126
void Reset()
Definition ui_scrollregion.cpp:16
bool ScrollbarShown() const
Definition ui_scrollregion.cpp:271
CUIRect m_ClipRect
Definition ui_scrollregion.h:125
bool Animating() const
Definition ui_scrollregion.cpp:276
float m_AnimInitScrollY
Definition ui_scrollregion.h:122
const CUIRect * ClipRect() const
Definition ui_scrollregion.h:149
CScrollRegion()
Definition ui_scrollregion.cpp:11
float m_AnimTime
Definition ui_scrollregion.h:121
void Begin(CUIRect *pClipRect, const CScrollRegionParams *pParams=nullptr)
Definition ui_scrollregion.cpp:35
void ScrollRelativeDirect(float ScrollAmount)
Definition ui_scrollregion.cpp:245
vec2 m_ContentScrollOff
Definition ui_scrollregion.h:129
bool AddRect(const CUIRect &Rect, bool ShouldScrollHere=false)
Definition ui_scrollregion.cpp:204
float m_AnimTimeMax
Definition ui_scrollregion.h:120
bool Active() const
Definition ui_scrollregion.cpp:281
EScrollOption
Definition ui_scrollregion.h:134
@ SCROLLHERE_TOP
Definition ui_scrollregion.h:136
@ SCROLLHERE_BOTTOM
Definition ui_scrollregion.h:137
@ SCROLLHERE_KEEP_IN_VIEW
Definition ui_scrollregion.h:135
void End()
Definition ui_scrollregion.cpp:75
float m_AnimTargetScrollY
Definition ui_scrollregion.h:123
CUIRect m_LastAddedRect
Definition ui_scrollregion.h:127
float m_ContentH
Definition ui_scrollregion.h:115
EScrollRelative m_ScrollDirection
Definition ui_scrollregion.h:117
float m_ScrollY
Definition ui_scrollregion.h:114
EScrollRelative
Definition ui_scrollregion.h:107
@ SCROLLRELATIVE_NONE
Definition ui_scrollregion.h:109
@ SCROLLRELATIVE_DOWN
Definition ui_scrollregion.h:110
@ SCROLLRELATIVE_UP
Definition ui_scrollregion.h:108
bool RectClipped(const CUIRect &Rect) const
Definition ui_scrollregion.cpp:266
void ScrollHere(EScrollOption Option=SCROLLHERE_KEEP_IN_VIEW)
Definition ui_scrollregion.cpp:213
void ScrollRelative(EScrollRelative Direction, float SpeedMultiplier=1.0f)
Definition ui_scrollregion.cpp:239
float m_RequestScrollY
Definition ui_scrollregion.h:116
float m_SliderGrabPos
Definition ui_scrollregion.h:128
CScrollRegionParams m_Params
Definition ui_scrollregion.h:130
const CScrollRegionParams & Params() const
Definition ui_scrollregion.h:155
Definition ui.h:254
Definition ui_rect.h:12
Definition color.h:182
Direction
Definition nameplates.cpp:212
Definition ui_scrollregion.h:9
CScrollRegionParams()
Definition ui_scrollregion.h:28
unsigned m_Flags
Definition ui_scrollregion.h:21
ColorRGBA m_SliderColor
Definition ui_scrollregion.h:18
ColorRGBA m_ScrollbarBgColor
Definition ui_scrollregion.h:16
ColorRGBA m_ClipBgColor
Definition ui_scrollregion.h:15
ColorRGBA m_SliderColorHover
Definition ui_scrollregion.h:19
ColorRGBA m_RailBgColor
Definition ui_scrollregion.h:17
float m_ScrollbarMargin
Definition ui_scrollregion.h:11
ColorRGBA SliderColor(bool Active, bool Hovered) const
Definition ui_scrollregion.h:44
float m_SliderMinHeight
Definition ui_scrollregion.h:13
float m_ScrollUnit
Definition ui_scrollregion.h:14
ColorRGBA m_SliderColorGrabbed
Definition ui_scrollregion.h:20
float m_ScrollbarWidth
Definition ui_scrollregion.h:10
bool m_ScrollbarNoMarginRight
Definition ui_scrollregion.h:12
@ FLAG_CONTENT_STATIC_WIDTH
Definition ui_scrollregion.h:25
vector2_base< float > vec2
Definition vmath.h:161