From 0ac999ded725f8efcd26db284161683e37efeecf Mon Sep 17 00:00:00 2001 From: DS Date: Mon, 13 Apr 2020 10:50:07 +0200 Subject: Add scroll_container formspec element (redo) (#9101) New formspec elements: - `scroll_container[,;,;;;]` - `scroll_container_end[]` Other elements can be embedded in this element. Scrollbar must be placed manually. --- src/gui/guiScrollContainer.h | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/gui/guiScrollContainer.h (limited to 'src/gui/guiScrollContainer.h') diff --git a/src/gui/guiScrollContainer.h b/src/gui/guiScrollContainer.h new file mode 100644 index 000000000..9eaa880bf --- /dev/null +++ b/src/gui/guiScrollContainer.h @@ -0,0 +1,56 @@ +/* +Minetest +Copyright (C) 2020 DS + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "irrlichttypes_extrabloated.h" +#include "util/string.h" +#include "guiScrollBar.h" + +class GUIScrollContainer : public gui::IGUIElement +{ +public: + GUIScrollContainer(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, + const core::rect &rectangle, const std::string &orientation, + f32 scrollfactor); + + virtual bool OnEvent(const SEvent &event) override; + + inline void onScrollEvent(gui::IGUIElement *caller) + { + if (caller == m_scrollbar) + updateScrolling(); + } + + inline void setScrollBar(GUIScrollBar *scrollbar) { m_scrollbar = scrollbar; } + +private: + enum OrientationEnum + { + VERTICAL, + HORIZONTAL, + UNDEFINED + }; + + GUIScrollBar *m_scrollbar; + OrientationEnum m_orientation; + f32 m_scrollfactor; + + void updateScrolling(); +}; -- cgit v1.2.3 From 241bf442608d27df0ce3c74889c357fb5589ab20 Mon Sep 17 00:00:00 2001 From: DS Date: Sat, 18 Apr 2020 17:20:20 +0200 Subject: Apply a scrollbar's default value to scroll containers (#9699) Fixes #9691. --- games/minimal/mods/test/formspec.lua | 2 +- src/gui/guiScrollContainer.h | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/gui/guiScrollContainer.h') diff --git a/games/minimal/mods/test/formspec.lua b/games/minimal/mods/test/formspec.lua index 53e92b243..4ab4f2717 100644 --- a/games/minimal/mods/test/formspec.lua +++ b/games/minimal/mods/test/formspec.lua @@ -251,7 +251,7 @@ Number] "box[1,22.5;4,1;#a00a]".. "scroll_container_end[]".. "scrollbaroptions[max=170]".. -- lowest seen pos is: 0.1*170+6=23 (factor*max+height) - "scrollbar[7.5,0;0.3,4;vertical;scrbar;0]".. + "scrollbar[7.5,0;0.3,4;vertical;scrbar;20]".. "scrollbar[8,0;0.3,4;vertical;scrbarhmmm;0]".. "dropdown[0,6;2;hmdrpdwnnn;apple,bulb;1]", } diff --git a/src/gui/guiScrollContainer.h b/src/gui/guiScrollContainer.h index 9eaa880bf..a0306291e 100644 --- a/src/gui/guiScrollContainer.h +++ b/src/gui/guiScrollContainer.h @@ -38,7 +38,11 @@ public: updateScrolling(); } - inline void setScrollBar(GUIScrollBar *scrollbar) { m_scrollbar = scrollbar; } + inline void setScrollBar(GUIScrollBar *scrollbar) + { + m_scrollbar = scrollbar; + updateScrolling(); + } private: enum OrientationEnum -- cgit v1.2.3