Luanti 5.15.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
15#include <optional>
16#include <IGUIEnvironment.h>
17#include <IGUIScrollBar.h>
18
20
21
22using namespace gui;
23
24class GUIScrollBar final : public IGUIScrollBar
25{
26public:
27 GUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id,
28 core::rect<s32> rectangle, bool horizontal, bool auto_scale,
30
37
38 virtual void draw() override;
39 virtual void updateAbsolutePosition() override;
40 virtual bool OnEvent(const SEvent &event) override;
41 virtual void OnPostRender(u32 time_ms) override;
42
43 s32 getMax() const override { return max_pos; }
44 s32 getMin() const override { return min_pos; }
45 s32 getLargeStep() const override { return large_step; }
46 s32 getSmallStep() const override { return small_step; }
47 s32 getPos() const override;
48 s32 getTargetPos() const override;
49 bool isHorizontal() const { return is_horizontal; }
50
51 void setMax(s32 max) override;
52 void setMin(s32 min) override;
53 void setSmallStep(s32 step) override;
54 void setLargeStep(s32 step) override;
56 // setPos does not send EGET_SCROLL_BAR_CHANGED events for you.
57 void setPos(const s32 pos) override;
59 void setPosAndSend(s32 pos);
61 // If you want to do an interpolated addition, use
62 // setPosInterpolated(getTargetPos() + x).
63 // setPosInterpolated takes care of sending EGET_SCROLL_BAR_CHANGED events.
64 void setPosInterpolated(s32 pos) override;
65 void setPageSize(s32 size) override;
67
68private:
69 void refreshControls();
70 s32 getPosFromMousePos(const core::position2di &p) const;
71 f32 range() const { return f32(max_pos - min_pos); }
72
73 IGUIButton *up_button;
74 IGUIButton *down_button;
91
92 core::rect<s32> slider_rect;
93 video::SColor current_icon_color;
94
96
97 void setPosRaw(const s32 pos);
98 void updatePos();
99 std::optional<s32> target_pos;
101 u32 last_delta_ms = 17; // assume 60 FPS
102 void interpolatePos();
103};
Definition guiScrollBar.h:25
ISimpleTextureSource * m_tsrc
Definition guiScrollBar.h:95
void setLargeStep(s32 step) override
Definition guiScrollBar.cpp:319
virtual void OnPostRender(u32 time_ms) override
Definition guiScrollBar.cpp:218
s32 large_step
Definition guiScrollBar.h:87
bool is_auto_scaling
Definition guiScrollBar.h:78
s32 thumb_size
Definition guiScrollBar.h:83
std::optional< s32 > target_pos
Definition guiScrollBar.h:99
void setMax(s32 max) override
Definition guiScrollBar.cpp:324
s32 scroll_pos
Definition guiScrollBar.h:81
bool is_dragging
Definition guiScrollBar.h:76
bool tray_clicked
Definition guiScrollBar.h:80
void setPosInterpolated(s32 pos) override
Sets a target position for interpolation.
Definition guiScrollBar.cpp:298
video::SColor current_icon_color
Definition guiScrollBar.h:93
void updatePos()
Definition guiScrollBar.cpp:247
void setArrowsVisible(ArrowVisibility visible)
Definition guiScrollBar.cpp:354
virtual bool OnEvent(const SEvent &event) override
Definition guiScrollBar.cpp:37
void setSmallStep(s32 step) override
Definition guiScrollBar.cpp:314
virtual void updateAbsolutePosition() override
Definition guiScrollBar.cpp:225
s32 getSmallStep() const override
Definition guiScrollBar.h:46
s32 small_step
Definition guiScrollBar.h:86
u32 last_delta_ms
Definition guiScrollBar.h:101
IGUIButton * up_button
Definition guiScrollBar.h:73
s32 getLargeStep() const override
Definition guiScrollBar.h:45
void setMin(s32 min) override
Definition guiScrollBar.cpp:336
s32 page_size
Definition guiScrollBar.h:89
void interpolatePos()
Definition guiScrollBar.cpp:199
void setPageSize(s32 size) override
Definition guiScrollBar.cpp:348
s32 draw_center
Definition guiScrollBar.h:82
ArrowVisibility
Definition guiScrollBar.h:32
@ HIDE
Definition guiScrollBar.h:33
@ DEFAULT
Definition guiScrollBar.h:35
@ SHOW
Definition guiScrollBar.h:34
void setPosAndSend(s32 pos)
The same as setPos, but it takes care of sending EGET_SCROLL_BAR_CHANGED events.
Definition guiScrollBar.cpp:284
ArrowVisibility arrow_visibility
Definition guiScrollBar.h:75
f32 range() const
Definition guiScrollBar.h:71
virtual void draw() override
Definition guiScrollBar.cpp:156
s32 getMin() const override
Definition guiScrollBar.h:44
s32 getMax() const override
Definition guiScrollBar.h:43
bool is_horizontal
Definition guiScrollBar.h:77
s32 getPos() const override
Definition guiScrollBar.cpp:360
s32 min_pos
Definition guiScrollBar.h:84
bool isHorizontal() const
Definition guiScrollBar.h:49
void refreshControls()
Definition guiScrollBar.cpp:374
s32 border_size
Definition guiScrollBar.h:90
s32 max_pos
Definition guiScrollBar.h:85
core::rect< s32 > slider_rect
Definition guiScrollBar.h:92
s32 getPosFromMousePos(const core::position2di &p) const
Definition guiScrollBar.cpp:232
GUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect< s32 > rectangle, bool horizontal, bool auto_scale, ISimpleTextureSource *tsrc)
Definition guiScrollBar.cpp:19
void setPos(const s32 pos) override
Sets a position immediately, aborting any ongoing interpolation.
Definition guiScrollBar.cpp:278
u32 last_time_ms
Definition guiScrollBar.h:100
void setPosRaw(const s32 pos)
Definition guiScrollBar.cpp:252
s32 drag_offset
Definition guiScrollBar.h:88
IGUIButton * down_button
Definition guiScrollBar.h:74
s32 getTargetPos() const override
Definition guiScrollBar.cpp:365
bool dragged_by_slider
Definition guiScrollBar.h:79
Definition texturesource.h:34
Definition fontengine.h:16
static std::string p(std::string path)
Definition test_filesys.cpp:64