From 2ee0605f1fa1e9363a6b5f2572a84593934c8e43 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 21 Mar 2025 05:31:46 +0300 Subject: [PATCH] add 'scroll' container property --- doc/en/scripting/ui.md | 8 +++++++- doc/ru/scripting/ui.md | 8 +++++++- src/graphics/ui/elements/Container.cpp | 4 ++++ src/graphics/ui/elements/Container.hpp | 1 + src/logic/scripting/lua/libs/libgui.cpp | 16 ++++++++++++++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/doc/en/scripting/ui.md b/doc/en/scripting/ui.md index a88a80a6..771049c5 100644 --- a/doc/en/scripting/ui.md +++ b/doc/en/scripting/ui.md @@ -60,7 +60,13 @@ Common element methods: ## Containers -Common methods for containers (elements: container, panel, button, pagebox): +Common properties for containers (elements: container, panel, button, pagebox): + +| Name | Type | Read | Write | Description | +| ------ | ------ | ---- | ----- | --------------- | +| scroll | string | yes | yes | scroll contents | + +Common methods: | Method | Description | | ------------------------------- | -------------------------------------------------------------------------------------------- | diff --git a/doc/ru/scripting/ui.md b/doc/ru/scripting/ui.md index 107f5139..f9d9ab00 100644 --- a/doc/ru/scripting/ui.md +++ b/doc/ru/scripting/ui.md @@ -60,7 +60,13 @@ document["worlds-panel"]:clear() ## Контейнеры -Общие для контейнеров методы (элементы: container, panel, button, pagebox): +Свойства, относящиеся к контейнерам (элементы: container, panel, button, pagebox): + +| Название | Тип | Чтение | Запись | Описание | +| ------------- | ------ | ------ | ------ | ----------------------------------------- | +| scroll | string | да | да | прокрутка содержимого | + +Методы: | Метод | Описание | | ------------------------------- | ------------------------------------------------------------------------------------------- | diff --git a/src/graphics/ui/elements/Container.cpp b/src/graphics/ui/elements/Container.cpp index 3fc25f66..63ddbc4f 100644 --- a/src/graphics/ui/elements/Container.cpp +++ b/src/graphics/ui/elements/Container.cpp @@ -226,6 +226,10 @@ void Container::refresh() { }); } +void Container::setScroll(int scroll) { + this->scroll = scroll; +} + const std::vector>& Container::getNodes() const { return nodes; } diff --git a/src/graphics/ui/elements/Container.hpp b/src/graphics/ui/elements/Container.hpp index f91fa915..2a5ca3e2 100644 --- a/src/graphics/ui/elements/Container.hpp +++ b/src/graphics/ui/elements/Container.hpp @@ -42,6 +42,7 @@ namespace gui { virtual int getScrollStep() const; virtual void setScrollStep(int step); virtual void refresh() override; + void setScroll(int scroll); virtual void mouseMove(GUI*, int x, int y) override; virtual void mouseRelease(GUI*, int x, int y) override; diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index cc372f88..b40d4318 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -423,6 +423,13 @@ static int p_get_cursor(UINode* node, lua::State* L) { return lua::pushstring(L, to_string(node->getCursor())); } +static int p_get_scroll(UINode* node, lua::State* L) { + if (auto container = dynamic_cast(node)) { + return lua::pushnumber(L, container->getContentOffset().y); + } + return 0; +} + static int l_gui_getattr(lua::State* L) { auto docname = lua::require_string(L, 1); auto element = lua::require_string(L, 2); @@ -469,6 +476,7 @@ static int l_gui_getattr(lua::State* L) { {"min", p_get_min}, {"max", p_get_max}, {"step", p_get_step}, + {"scroll", p_get_scroll}, {"trackWidth", p_get_track_width}, {"trackColor", p_get_track_color}, {"textColor", p_get_text_color}, @@ -655,6 +663,13 @@ static void p_set_cursor(UINode* node, lua::State* L, int idx) { } } +static int p_set_scroll(UINode* node, lua::State* L, int idx) { + if (auto container = dynamic_cast(node)) { + container->setScroll(lua::tointeger(L, idx)); + } + return 0; +} + static int l_gui_setattr(lua::State* L) { auto docname = lua::require_string(L, 1); auto element = lua::require_string(L, 2); @@ -692,6 +707,7 @@ static int l_gui_setattr(lua::State* L) { {"min", p_set_min}, {"max", p_set_max}, {"step", p_set_step}, + {"scroll", p_set_scroll}, {"trackWidth", p_set_track_width}, {"trackColor", p_set_track_color}, {"textColor", p_set_text_color},