From 680aaa1bd55fd4f0162ba31ca47d7e5b3563f2a1 Mon Sep 17 00:00:00 2001 From: Hugues Ross Date: Thu, 16 Jan 2020 13:41:07 -0500 Subject: [PATCH] Make clipping of formspec elements more consistent (#9262) --- doc/lua_api.txt | 8 ++++++++ src/gui/guiFormSpecMenu.cpp | 11 ++++++++--- src/network/networkprotocol.h | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f14c815ed..57159d6ac 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2563,6 +2563,9 @@ Some types may inherit styles from parent types. ### Valid Properties +* box + * noclip - boolean, set to true to allow the element to exceed formspec bounds. + * Default to false in formspec_version version 3 or higher * button, button_exit, image_button, item_image_button * alpha - boolean, whether to draw alpha in bgimg. Default true. * bgcolor - color, sets button tint. @@ -2586,6 +2589,11 @@ Some types may inherit styles from parent types. * border - set to false to hide the textbox background and border. Default true. * noclip - boolean, set to true to allow the element to exceed formspec bounds. * textcolor - color. Default white. +* image + * noclip - boolean, set to true to allow the element to exceed formspec bounds. + * Default to false in formspec_version version 3 or higher +* item_image + * noclip - boolean, set to true to allow the element to exceed formspec bounds. Default to false. * label, vertlabel * noclip - boolean, set to true to allow the element to exceed formspec bounds. * image_button (additional properties) diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 3c9e55d06..5ddfbc6d5 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -744,7 +744,8 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element) gui::IGUIImage *e = Environment->addImage(rect, this, spec.fid, 0, true); e->setImage(texture); e->setScaleImage(true); - e->setNotClipped(true); + auto style = getStyleForElement("image", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); m_fields.push_back(spec); return; @@ -776,7 +777,8 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element) ); gui::IGUIImage *e = Environment->addImage(texture, pos, true, this, spec.fid, 0); - e->setNotClipped(true); + auto style = getStyleForElement("image", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); m_fields.push_back(spec); return; @@ -824,6 +826,8 @@ void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &elemen GUIItemImage *e = new GUIItemImage(Environment, this, spec.fid, core::rect(pos, pos + geom), name, m_font, m_client); + auto style = getStyleForElement("item_image", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); e->drop(); m_fields.push_back(spec); @@ -2110,7 +2114,8 @@ void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element) GUIBox *e = new GUIBox(Environment, this, spec.fid, rect, tmp_color); - e->setNotClipped(true); + auto style = getStyleForElement("box", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); e->drop(); diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index a2be181fb..2ade030c4 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -232,6 +232,7 @@ with this program; if not, write to the Free Software Foundation, Inc., FORMSPEC VERSION 3: Formspec elements are drawn in the order of definition bgcolor[]: use 3 parameters (bgcolor, formspec (now an enum), fbgcolor) + box[] and image[] elements enable clipping by default */ #define FORMSPEC_API_VERSION 3