Skip to content

Commit

Permalink
Formspec: make bgcolor element less confusing and allow setting fulls…
Browse files Browse the repository at this point in the history
…creen color (#8996)
  • Loading branch information
Desour authored and sfan5 committed Dec 8, 2019
1 parent d3255f9 commit 8f73ec6
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 15 deletions.
18 changes: 13 additions & 5 deletions doc/lua_api.txt
Expand Up @@ -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>]`

Expand Down
36 changes: 26 additions & 10 deletions src/gui/guiFormSpecMenu.cpp
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);

/*
Expand Down
1 change: 1 addition & 0 deletions src/gui/guiFormSpecMenu.h
Expand Up @@ -369,6 +369,7 @@ class GUIFormSpecMenu : public GUIModalMenu
bool m_lock = false;
v2u32 m_lockscreensize;

bool m_bgnonfullscreen;
bool m_bgfullscreen;
bool m_slotborder;
video::SColor m_bgcolor;
Expand Down
1 change: 1 addition & 0 deletions src/network/networkprotocol.h
Expand Up @@ -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

Expand Down

0 comments on commit 8f73ec6

Please sign in to comment.