diff options
author | DS <vorunbekannt75@web.de> | 2019-12-08 18:59:30 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2019-12-08 18:59:30 +0100 |
commit | 8f73ec6c6c18ea5676261064399a650911333da5 (patch) | |
tree | e225b3ffcb8984364d543d23dda349a3989d55f5 | |
parent | d3255f92d7ed5758de5db735eda7796ef7b5e017 (diff) | |
download | minetest-8f73ec6c6c18ea5676261064399a650911333da5.tar.gz minetest-8f73ec6c6c18ea5676261064399a650911333da5.tar.bz2 minetest-8f73ec6c6c18ea5676261064399a650911333da5.zip |
Formspec: make bgcolor element less confusing and allow setting fullscreen color (#8996)
-rw-r--r-- | doc/lua_api.txt | 18 | ||||
-rw-r--r-- | src/gui/guiFormSpecMenu.cpp | 36 | ||||
-rw-r--r-- | src/gui/guiFormSpecMenu.h | 1 | ||||
-rw-r--r-- | src/network/networkprotocol.h | 1 |
4 files changed, 41 insertions, 15 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f3e21bbc5..7ba3ad77d 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2104,11 +2104,19 @@ Elements * Show an inventory image of registered item/node -### `bgcolor[<color>;<fullscreen>]` - -* Sets background color of formspec as `ColorString` -* If `true`, a fullscreen background is drawn and the color is ignored - (does not affect the size of the formspec) +### `bgcolor[<bgcolor>;<fullscreen>;<fbgcolor>]` + +* Sets background color of formspec. +* `bgcolor` and `fbgcolor` (optional) are `ColorString`s, they define the color + of the non-fullscreen and the fullscreen background. +* `fullscreen` (optional) can be one of the following: + * `false`: Only the non-fullscreen background color is drawn. (default) + * `true`: Only the fullscreen background color is drawn. + * `both`: The non-fullscreen and the fullscreen background color are drawn. + * `neither`: No background color is drawn. +* Note: Leave a parameter empty to not modify the value. +* Note: `fbgcolor`, leaving parameters empty and values for `fullscreen` that + are not bools are only available since formspec version 3. ### `background[<X>,<Y>;<W>,<H>;<texture name>]` diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 26ca525c8..ed3445b5b 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -2178,21 +2178,36 @@ void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element) void GUIFormSpecMenu::parseBackgroundColor(parserData* data, const std::string &element) { std::vector<std::string> parts = split(element,';'); + const u32 parameter_count = parts.size(); - if (((parts.size() == 1) || (parts.size() == 2)) || - ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION))) { + if ((parameter_count > 2 && m_formspec_version < 3) || + (parameter_count > 3 && m_formspec_version <= FORMSPEC_API_VERSION)) { + errorstream << "Invalid bgcolor element(" << parameter_count << "): '" + << element << "'" << std::endl; + return; + } + + // bgcolor + if (parameter_count >= 1 && parts[0] != "") parseColorString(parts[0], m_bgcolor, false); - if (parts.size() == 2) { - std::string fullscreen = parts[1]; - m_bgfullscreen = is_yes(fullscreen); + // fullscreen + if (parameter_count >= 2) { + if (parts[1] == "both") { + m_bgnonfullscreen = true; + m_bgfullscreen = true; + } else if (parts[1] == "neither") { + m_bgnonfullscreen = false; + m_bgfullscreen = false; + } else if (parts[1] != "" || m_formspec_version < 3) { + m_bgfullscreen = is_yes(parts[1]); + m_bgnonfullscreen = !m_bgfullscreen; } - - return; } - errorstream << "Invalid bgcolor element(" << parts.size() << "): '" << element << "'" - << std::endl; + // fbgcolor + if (parameter_count >= 3 && parts[2] != "") + parseColorString(parts[2], m_fullscreen_bgcolor, false); } void GUIFormSpecMenu::parseListColors(parserData* data, const std::string &element) @@ -2735,6 +2750,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) theme_by_name.clear(); theme_by_type.clear(); + m_bgnonfullscreen = true; m_bgfullscreen = false; m_formspec_version = 1; @@ -3312,7 +3328,7 @@ void GUIFormSpecMenu::drawMenu() if (m_bgfullscreen) driver->draw2DRectangle(m_fullscreen_bgcolor, allbg, &allbg); - else + if (m_bgnonfullscreen) driver->draw2DRectangle(m_bgcolor, AbsoluteRect, &AbsoluteClippingRect); /* diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h index 3a3a74c05..d6c762866 100644 --- a/src/gui/guiFormSpecMenu.h +++ b/src/gui/guiFormSpecMenu.h @@ -369,6 +369,7 @@ protected: bool m_lock = false; v2u32 m_lockscreensize; + bool m_bgnonfullscreen; bool m_bgfullscreen; bool m_slotborder; video::SColor m_bgcolor; diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index f74027828..a2be181fb 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -231,6 +231,7 @@ with this program; if not, write to the Free Software Foundation, Inc., background9[]: 9-slice scaling parameters FORMSPEC VERSION 3: Formspec elements are drawn in the order of definition + bgcolor[]: use 3 parameters (bgcolor, formspec (now an enum), fbgcolor) */ #define FORMSPEC_API_VERSION 3 |