Make clipping of formspec elements more consistent (#9262)
authorHugues Ross <hugues.ross@gmail.com>
Thu, 16 Jan 2020 18:41:07 +0000 (13:41 -0500)
committerrubenwardy <rw@rubenwardy.com>
Thu, 16 Jan 2020 18:41:07 +0000 (18:41 +0000)
doc/lua_api.txt
src/gui/guiFormSpecMenu.cpp
src/network/networkprotocol.h

index f14c815ed7c37d248a4f673b486700661a1a16e4..57159d6acdcf8d94decdaa5be88d11fb1420d68e 100644 (file)
@@ -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)
index 3c9e55d063a40fdde6cab80ce54c5bd0530f1080..5ddfbc6d5badb4cdc5bdb96056f1ef6bd7ea0c7f 100644 (file)
@@ -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<s32>(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();
 
index a2be181fb72fe71af0abd2d87c167a4395897fdf..2ade030c4036e5ae5ac6d9777938097f7cbeec50 100644 (file)
@@ -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