summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorv-rob <robinsonvincent89@gmail.com>2020-03-01 06:39:57 -0800
committerGitHub <noreply@github.com>2020-03-01 14:39:57 +0000
commit7dffd08c1a068e5e0748a046fd8a1e884947b597 (patch)
tree867a61698d93c6b107d4432059b8245cabd5f3f3
parent0c08f948d7014e66d5a79d7584c03164af2edd93 (diff)
downloadminetest-7dffd08c1a068e5e0748a046fd8a1e884947b597.tar.gz
minetest-7dffd08c1a068e5e0748a046fd8a1e884947b597.tar.bz2
minetest-7dffd08c1a068e5e0748a046fd8a1e884947b597.zip
Add multiple element selection to `style` and `style_type` (#9380)
-rw-r--r--doc/lua_api.txt17
-rw-r--r--games/minimal/mods/test/formspec.lua15
-rw-r--r--src/gui/guiFormSpecMenu.cpp26
3 files changed, 29 insertions, 29 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 6ff7f802a..4b7132828 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -2495,16 +2495,16 @@ Elements
* `span=<value>`: number of following columns to affect
(default: infinite).
-### `style[<name>;<prop1>;<prop2>;...]`
+### `style[<name 1>,<name 2>,...;<prop1>;<prop2>;...]`
-* Set the style for the named element `name`.
+* Set the style for the named element(s) `name`.
* Note: this **must** be before the element is defined.
* See [Styling Formspecs].
-### `style_type[<type>;<prop1>;<prop2>;...]`
+### `style_type[<type 1>,<type 2>,...;<prop1>;<prop2>;...]`
-* Sets the style for all elements of type `type` which appear after this element.
+* Sets the style for all elements of type(s) `type` which appear after this element.
* See [Styling Formspecs].
Migrating to Real Coordinates
@@ -2547,13 +2547,18 @@ Styling Formspecs
Formspec elements can be themed using the style elements:
- style[<name>;<prop1>;<prop2>;...]
- style_type[<type>;<prop1>;<prop2>;...]
+ style[<name 1>,<name 2>,...;<prop1>;<prop2>;...]
+ style_type[<type 1>,<type 2>,...;<prop1>;<prop2>;...]
Where a prop is:
property_name=property_value
+A name/type can optionally be a comma separated list of names/types, like so:
+
+ world_delete,world_create,world_configure
+ button,image_button
+
For example:
style_type[button;bgcolor=#006699]
diff --git a/games/minimal/mods/test/formspec.lua b/games/minimal/mods/test/formspec.lua
index 50c506899..a836a811d 100644
--- a/games/minimal/mods/test/formspec.lua
+++ b/games/minimal/mods/test/formspec.lua
@@ -1,18 +1,9 @@
local color = minetest.colorize
local clip_fs = [[
- style_type[label;noclip=%c]
- style_type[button;noclip=%c]
- style_type[image_button;noclip=%c]
- style_type[item_image_button;noclip=%c]
- style_type[tabheader;noclip=%c]
- style_type[field;noclip=%c]
- style_type[textarea;noclip=%c]
- style_type[checkbox;noclip=%c]
- style_type[dropdown;noclip=%c]
- style_type[scrollbar;noclip=%c]
- style_type[table;noclip=%c]
- style_type[animated_image;noclip=%c]
+ style_type[label,button,image_button,item_image_button,
+ tabheader,scrollbar,table,animated_image
+ ,field,textarea,checkbox,dropdown;noclip=%c]
label[0,0;A clipping test]
button[0,1;3,0.8;x;A clipping test]
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 40c3bbdae..d892555b3 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -2450,13 +2450,6 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
return false;
}
- std::string selector = trim(parts[0]);
- if (selector.empty()) {
- errorstream << "Invalid style element (Selector required): '" << element
- << "'" << std::endl;
- return false;
- }
-
StyleSpec spec;
for (size_t i = 1; i < parts.size(); i++) {
@@ -2486,10 +2479,21 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
spec.set(prop, value);
}
- if (style_type) {
- theme_by_type[selector] |= spec;
- } else {
- theme_by_name[selector] |= spec;
+ std::vector<std::string> selectors = split(parts[0], ',');
+ for (size_t sel = 0; sel < selectors.size(); sel++) {
+ std::string selector = trim(selectors[sel]);
+
+ if (selector.empty()) {
+ errorstream << "Invalid style element (Empty selector): '" << element
+ << "'" << std::endl;
+ continue;
+ }
+
+ if (style_type) {
+ theme_by_type[selector] |= spec;
+ } else {
+ theme_by_name[selector] |= spec;
+ }
}
return true;