From f21d9d0a25d869f2daf0d6c00c1f414fe0c79bd3 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 19 Apr 2025 20:34:30 +0300 Subject: [PATCH] add iframe 'src' scripting property --- src/graphics/ui/elements/InlineFrame.cpp | 4 ++++ src/graphics/ui/elements/InlineFrame.hpp | 2 ++ src/logic/scripting/lua/libs/libgui.cpp | 20 ++++++++------------ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/graphics/ui/elements/InlineFrame.cpp b/src/graphics/ui/elements/InlineFrame.cpp index d81d499f..cd01d45b 100644 --- a/src/graphics/ui/elements/InlineFrame.cpp +++ b/src/graphics/ui/elements/InlineFrame.cpp @@ -49,3 +49,7 @@ void InlineFrame::setSize(glm::vec2 size) { root->setSize(size); } } + +const std::string& InlineFrame::getSrc() const { + return src; +} diff --git a/src/graphics/ui/elements/InlineFrame.hpp b/src/graphics/ui/elements/InlineFrame.hpp index fd8a6967..41ad7345 100644 --- a/src/graphics/ui/elements/InlineFrame.hpp +++ b/src/graphics/ui/elements/InlineFrame.hpp @@ -15,6 +15,8 @@ namespace gui { void act(float delta) override; void setSize(glm::vec2 size) override; + + const std::string& getSrc() const; private: std::string src; std::shared_ptr document; diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index 7c891c88..3fb5fcde 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -13,6 +13,7 @@ #include "graphics/ui/elements/Panel.hpp" #include "graphics/ui/elements/TextBox.hpp" #include "graphics/ui/elements/TrackBar.hpp" +#include "graphics/ui/elements/InlineFrame.hpp" #include "graphics/ui/gui_util.hpp" #include "graphics/ui/markdown.hpp" #include "graphics/core/Font.hpp" @@ -330,6 +331,8 @@ static int p_get_markup(UINode* node, lua::State* L) { static int p_get_src(UINode* node, lua::State* L) { if (auto image = dynamic_cast(node)) { return lua::pushstring(L, image->getTexture()); + } else if (auto iframe = dynamic_cast(node)) { + return lua::pushstring(L, iframe->getSrc()); } return 0; } @@ -644,6 +647,8 @@ static void p_set_markup(UINode* node, lua::State* L, int idx) { static void p_set_src(UINode* node, lua::State* L, int idx) { if (auto image = dynamic_cast(node)) { image->setTexture(lua::require_string(L, idx)); + } else if (auto iframe = dynamic_cast(node)) { + iframe->setSrc(lua::require_string(L, idx)); } } static void p_set_value(UINode* node, lua::State* L, int idx) { @@ -704,10 +709,10 @@ static void p_set_inventory(UINode* node, lua::State* L, int idx) { } } static void p_set_focused( - const std::shared_ptr& node, lua::State* L, int idx + UINode* node, lua::State* L, int idx ) { if (lua::toboolean(L, idx) && !node->isFocused()) { - engine->getGUI().setFocus(node); + engine->getGUI().setFocus(node->shared_from_this()); } else if (node->isFocused()) { node->defocus(); } @@ -771,21 +776,12 @@ static int l_gui_setattr(lua::State* L) { {"page", p_set_page}, {"inventory", p_set_inventory}, {"cursor", p_set_cursor}, + {"focused", p_set_focused}, }; auto func = setters.find(attr); if (func != setters.end()) { func->second(node.get(), L, 4); } - static const std::unordered_map< - std::string_view, - std::function, lua::State*, int)>> - setters2 { - {"focused", p_set_focused}, - }; - auto func2 = setters2.find(attr); - if (func2 != setters2.end()) { - func2->second(node, L, 4); - } return 0; }