Formspecs: Allow setting alpha value for the box[] element
authorThomas--S <Thomas--S@users.noreply.github.com>
Mon, 23 Apr 2018 17:50:50 +0000 (19:50 +0200)
committerrubenwardy <rw@rubenwardy.com>
Mon, 23 Apr 2018 17:50:50 +0000 (18:50 +0100)
doc/lua_api.txt
src/gui/guiFormSpecMenu.cpp
src/gui/guiFormSpecMenu.h
src/util/string.cpp
src/util/string.h

index 70eb48c128febb76cdf9fc4feac62de1c0f6ebd4..321c2abc611db3c829de4bb9518813515155fe24 100644 (file)
@@ -2283,10 +2283,11 @@ appearing when you don't expect them to. See `no_prepend[]`
 * `draw_border` (optional): draw border
 
 #### `box[<X>,<Y>;<W>,<H>;<color>]`
-* Simple colored semitransparent box
+* Simple colored box
 * `x` and `y` position the box relative to the top left of the menu
 * `w` and `h` are the size of box
-* `color` is color specified as a `ColorString`
+* `color` is color specified as a `ColorString`.
+  If the alpha component is left blank, the box will be semitransparent.
 
 #### `dropdown[<X>,<Y>;<W>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>]`
 * Show a dropdown field
index e582c30deb1c0e3175fcf54093f235b1c352bdea..12caf39eb3940d038d921466c5800e0bb15c9648 100644 (file)
@@ -1560,7 +1560,7 @@ void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element)
 
                video::SColor tmp_color;
 
-               if (parseColorString(parts[2], tmp_color, false)) {
+               if (parseColorString(parts[2], tmp_color, false, 0x8C)) {
                        BoxDrawSpec spec(pos, geom, tmp_color);
 
                        m_boxes.push_back(spec);
@@ -2515,8 +2515,6 @@ void GUIFormSpecMenu::drawMenu()
        for (const GUIFormSpecMenu::BoxDrawSpec &spec : m_boxes) {
                irr::video::SColor todraw = spec.color;
 
-               todraw.setAlpha(140);
-
                core::rect<s32> rect(spec.pos.X,spec.pos.Y,
                                                        spec.pos.X + spec.geom.X,spec.pos.Y + spec.geom.Y);
 
index 51d25a4f56319ef4a74e1505a779e1dd0bd629cf..013ba65cb08f6791aa476d951d39c0e9d9bfeefd 100644 (file)
@@ -223,7 +223,7 @@ class GUIFormSpecMenu : public GUIModalMenu
 
        struct BoxDrawSpec
        {
-               BoxDrawSpec(v2s32 a_pos, v2s32 a_geom,irr::video::SColor a_color):
+               BoxDrawSpec(v2s32 a_pos, v2s32 a_geom, irr::video::SColor a_color):
                        pos(a_pos),
                        geom(a_geom),
                        color(a_color)
index 3eabcbe11b1edb0aa03962deb8be4df0d52fff35..25f5734201143226e449a40ca9dd72bc44dbd12f 100644 (file)
@@ -43,7 +43,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        #define BSD_ICONV_USED
 #endif
 
-static bool parseHexColorString(const std::string &value, video::SColor &color);
+static bool parseHexColorString(const std::string &value, video::SColor &color,
+               unsigned char default_alpha = 0xff);
 static bool parseNamedColorString(const std::string &value, video::SColor &color);
 
 #ifndef _WIN32
@@ -464,12 +465,13 @@ u64 read_seed(const char *str)
        return num;
 }
 
-bool parseColorString(const std::string &value, video::SColor &color, bool quiet)
+bool parseColorString(const std::string &value, video::SColor &color, bool quiet,
+               unsigned char default_alpha)
 {
        bool success;
 
        if (value[0] == '#')
-               success = parseHexColorString(value, color);
+               success = parseHexColorString(value, color, default_alpha);
        else
                success = parseNamedColorString(value, color);
 
@@ -479,9 +481,10 @@ bool parseColorString(const std::string &value, video::SColor &color, bool quiet
        return success;
 }
 
-static bool parseHexColorString(const std::string &value, video::SColor &color)
+static bool parseHexColorString(const std::string &value, video::SColor &color,
+               unsigned char default_alpha)
 {
-       unsigned char components[] = { 0x00, 0x00, 0x00, 0xff }; // R,G,B,A
+       unsigned char components[] = { 0x00, 0x00, 0x00, default_alpha }; // R,G,B,A
 
        if (value[0] != '#')
                return false;
index 2840f1192458b563ddcd9d3a30030e6208a40d9c..35b7cfa8a718d7870fef5173805b0784c3f48d81 100644 (file)
@@ -85,7 +85,8 @@ std::string writeFlagString(u32 flags, const FlagDesc *flagdesc, u32 flagmask);
 size_t mystrlcpy(char *dst, const char *src, size_t size);
 char *mystrtok_r(char *s, const char *sep, char **lasts);
 u64 read_seed(const char *str);
-bool parseColorString(const std::string &value, video::SColor &color, bool quiet);
+bool parseColorString(const std::string &value, video::SColor &color, bool quiet,
+               unsigned char default_alpha = 0xff);
 
 
 /**