Minetest 5.9.0-dev
 
Loading...
Searching...
No Matches
guiScrollBar.h
Go to the documentation of this file.
1/*
2Copyright (C) 2002-2013 Nikolaus Gebhardt
3This file is part of the "Irrlicht Engine".
4For conditions of distribution and use, see copyright notice in irrlicht.h
5
6Modified 2019.05.01 by stujones11, Stuart Jones <stujones111@gmail.com>
7
8This is a heavily modified copy of the Irrlicht CGUIScrollBar class
9which includes automatic scaling of the thumb slider and hiding of
10the arrow buttons where there is insufficient space.
11*/
12
13#pragma once
14
16#include <optional>
17
19
20using namespace irr;
21using namespace gui;
22
23class GUIScrollBar : public IGUIElement
24{
25public:
26 GUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id,
27 core::rect<s32> rectangle, bool horizontal, bool auto_scale,
29
31 {
35 };
36
37 virtual void draw() override;
38 virtual void updateAbsolutePosition() override;
39 virtual bool OnEvent(const SEvent &event) override;
40 virtual void OnPostRender(u32 time_ms) override;
41
42 s32 getMax() const { return max_pos; }
43 s32 getMin() const { return min_pos; }
44 s32 getLargeStep() const { return large_step; }
45 s32 getSmallStep() const { return small_step; }
46 s32 getPos() const;
47 s32 getTargetPos() const;
48
49 void setMax(const s32 &max);
50 void setMin(const s32 &min);
51 void setSmallStep(const s32 &step);
52 void setLargeStep(const s32 &step);
54 // setPos does not send EGET_SCROLL_BAR_CHANGED events for you.
55 void setPos(const s32 &pos);
57 // If you want to do an interpolated addition, use
58 // setPosInterpolated(getTargetPos() + x).
59 // setPosInterpolated takes care of sending EGET_SCROLL_BAR_CHANGED events.
60 void setPosInterpolated(const s32 &pos);
61 void setPageSize(const s32 &size);
63
64private:
65 void refreshControls();
66 s32 getPosFromMousePos(const core::position2di &p) const;
67 f32 range() const { return f32(max_pos - min_pos); }
68
69 IGUIButton *up_button;
70 IGUIButton *down_button;
87
88 core::rect<s32> slider_rect;
89 video::SColor current_icon_color;
90
92
93 void setPosRaw(const s32 &pos);
94 void updatePos();
95 std::optional<s32> target_pos;
96 u32 last_time_ms = 0;
97 u32 last_delta_ms = 17; // assume 60 FPS
98 void interpolatePos();
99};
Definition: guiScrollBar.h:24
ISimpleTextureSource * m_tsrc
Definition: guiScrollBar.h:91
virtual void OnPostRender(u32 time_ms) override
Definition: guiScrollBar.cpp:237
s32 large_step
Definition: guiScrollBar.h:83
bool is_auto_scaling
Definition: guiScrollBar.h:74
void setPos(const s32 &pos)
Sets a position immediately, aborting any ongoing interpolation.
Definition: guiScrollBar.cpp:297
s32 thumb_size
Definition: guiScrollBar.h:79
std::optional< s32 > target_pos
Definition: guiScrollBar.h:95
void setPosRaw(const s32 &pos)
Definition: guiScrollBar.cpp:271
s32 scroll_pos
Definition: guiScrollBar.h:77
bool is_dragging
Definition: guiScrollBar.h:72
bool tray_clicked
Definition: guiScrollBar.h:76
video::SColor current_icon_color
Definition: guiScrollBar.h:89
void updatePos()
Definition: guiScrollBar.cpp:266
void setArrowsVisible(ArrowVisibility visible)
Definition: guiScrollBar.cpp:354
void setLargeStep(const s32 &step)
Definition: guiScrollBar.cpp:319
virtual bool OnEvent(const SEvent &event) override
Definition: guiScrollBar.cpp:36
virtual void updateAbsolutePosition() override
Definition: guiScrollBar.cpp:244
s32 small_step
Definition: guiScrollBar.h:82
u32 last_delta_ms
Definition: guiScrollBar.h:97
s32 getTargetPos() const
Definition: guiScrollBar.cpp:365
s32 getMin() const
Definition: guiScrollBar.h:43
IGUIButton * up_button
Definition: guiScrollBar.h:69
void setMax(const s32 &max)
Definition: guiScrollBar.cpp:324
s32 page_size
Definition: guiScrollBar.h:85
void interpolatePos()
Definition: guiScrollBar.cpp:218
void setPosInterpolated(const s32 &pos)
Sets a target position for interpolation.
Definition: guiScrollBar.cpp:303
s32 getMax() const
Definition: guiScrollBar.h:42
void setSmallStep(const s32 &step)
Definition: guiScrollBar.cpp:314
void setMin(const s32 &min)
Definition: guiScrollBar.cpp:336
s32 draw_center
Definition: guiScrollBar.h:78
ArrowVisibility
Definition: guiScrollBar.h:31
@ HIDE
Definition: guiScrollBar.h:32
@ DEFAULT
Definition: guiScrollBar.h:34
@ SHOW
Definition: guiScrollBar.h:33
ArrowVisibility arrow_visibility
Definition: guiScrollBar.h:71
f32 range() const
Definition: guiScrollBar.h:67
virtual void draw() override
Definition: guiScrollBar.cpp:175
bool is_horizontal
Definition: guiScrollBar.h:73
s32 getLargeStep() const
Definition: guiScrollBar.h:44
s32 min_pos
Definition: guiScrollBar.h:80
void refreshControls()
Definition: guiScrollBar.cpp:374
s32 border_size
Definition: guiScrollBar.h:86
s32 max_pos
Definition: guiScrollBar.h:81
s32 getSmallStep() const
Definition: guiScrollBar.h:45
core::rect< s32 > slider_rect
Definition: guiScrollBar.h:88
s32 getPosFromMousePos(const core::position2di &p) const
Definition: guiScrollBar.cpp:251
u32 last_time_ms
Definition: guiScrollBar.h:96
s32 getPos() const
Definition: guiScrollBar.cpp:360
s32 drag_offset
Definition: guiScrollBar.h:84
IGUIButton * down_button
Definition: guiScrollBar.h:70
bool dragged_by_slider
Definition: guiScrollBar.h:75
void setPageSize(const s32 &size)
Definition: guiScrollBar.cpp:348
Definition: texturesource.h:34
Definition: shader.h:61
static std::string p(std::string path)
Definition: test_filesys.cpp:64