diff --git a/builtin/mainmenu.lua b/builtin/mainmenu.lua index 56143e700..12747c8c9 100644 --- a/builtin/mainmenu.lua +++ b/builtin/mainmenu.lua @@ -389,7 +389,7 @@ end -------------------------------------------------------------------------------- function menubar.refresh() - menubar.formspec = "box[-2,7.625;15.75,1.75;BLK]" + menubar.formspec = "box[-2,7.625;15.75,1.75;000000]" menubar.buttons = {} local button_base = -1.8 diff --git a/builtin/modstore.lua b/builtin/modstore.lua index 73afc3899..1890da138 100644 --- a/builtin/modstore.lua +++ b/builtin/modstore.lua @@ -187,9 +187,9 @@ function modstore.getmodlist(list) " of " .. (list.pagecount +1) .. "]" retval = retval .. "button[11.6,-0.1;0.5,0.5;btn_modstore_page_up;^]" - retval = retval .. "box[11.6,0.35;0.28,8.6;BLK]" + retval = retval .. "box[11.6,0.35;0.28,8.6;000000]" local scrollbarpos = 0.35 + (8.1/list.pagecount) * list.page - retval = retval .. "box[11.6," ..scrollbarpos .. ";0.28,0.5;LIM]" + retval = retval .. "box[11.6," ..scrollbarpos .. ";0.28,0.5;32CD32]" retval = retval .. "button[11.6,9.0;0.5,0.5;btn_modstore_page_down;v]" @@ -210,7 +210,7 @@ function modstore.getmodlist(list) if details ~= nil then local screenshot_ypos = (i-1 - (list.page * modstore.modsperpage))*1.9 +0.2 - retval = retval .. "box[0," .. screenshot_ypos .. ";11.4,1.75;WHT]" + retval = retval .. "box[0," .. screenshot_ypos .. ";11.4,1.75;FFFFFF]" --screenshot if details.screenshot_url ~= nil and @@ -272,4 +272,4 @@ function modstore.get_details(modid) local retval = engine.get_modstore_details(tostring(modid)) modstore.details_cache[modid] = retval return retval -end \ No newline at end of file +end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index ebba40fbf..a9f2d0d46 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -960,7 +960,7 @@ textlist[,;,;;,,...,] ^Scrollabel itemlist showing arbitrary text elements ^ x and y position the itemlist relative to the top left of the menu ^ w and h are the size of the itemlist -^ listelements can be prepended by #colorkey (see colorkeys), +^ listelements can be prepended by #RRGGBB in hexadecimal format ^ if you want a listelement to start with # write ## ^ name fieldname sent to server on doubleclick value is current selected element @@ -973,24 +973,12 @@ tabheader[,;;,;;;,;,;] +box[,;,;] ^ simple colored semitransparent box ^ x and y position the box relative to the top left of the menu ^ w and h are the size of box -^ colorkey (see colorkeys) +^ color in hexadecimal format RRGGBB -Available colorkeys: -- YLW yellow -- GRN green -- LIM lime -- ORN orange -- RED red -- BLU blue -- CYN cyan -- BLK black -- BRN brown -- WHT white -- GRY grey Inventory location: diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 0aa2c2dcd..3a3a9433e 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -663,15 +663,13 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element) { } else { std::wstring toadd = narrow_to_wide(items[i].c_str() + 4); - std::string color = items[i].substr(1,3); + std::string color = items[i].substr(1,6); e->addItem(toadd.c_str()); - bool valid_color = true; + irr::video::SColor toset; - irr::video::SColor toset = getColor(color,valid_color); - - if (valid_color) + if (parseColor(color,toset)) e->setItemOverrideColor(i,toset); } } @@ -1335,11 +1333,9 @@ void GUIFormSpecMenu::parseBox(parserData* data,std::string element) { geom.X = stof(v_geom[0]) * (float)spacing.X; geom.Y = stof(v_geom[1]) * (float)spacing.Y; - bool valid_color = false; + irr::video::SColor color; - irr::video::SColor color = getColor(color_str,valid_color); - - if (valid_color) { + if (parseColor(color_str,color)) { BoxDrawSpec spec(pos,geom,color); m_boxes.push_back(spec); @@ -2520,65 +2516,22 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) return Parent ? Parent->OnEvent(event) : false; } -irr::video::SColor GUIFormSpecMenu::getColor(std::string color,bool& valid_color) { +bool GUIFormSpecMenu::parseColor(std::string color, irr::video::SColor& outcolor) { + outcolor = irr::video::SColor(0,0,0,0); - if (color == "YLW") { - valid_color = true; - return irr::video::SColor(255,255,255,0); - } + if(color.size() != 6) return false; + if(!string_allowed(color, "0123456789abcdefABCDEF")) return false; - if (color == "GRN") { - valid_color = true; - return irr::video::SColor(255,34,249,34); - } + unsigned int r, g, b; + std::istringstream iss(""); + iss.str(color.substr(0, 1)); + iss >> std::hex >> r; + iss.str(color.substr(2, 1)); + iss >> std::hex >> g; + iss.str(color.substr(4, 1)); + iss >> std::hex >> b; - if (color == "LIM") { - valid_color = true; - return irr::video::SColor(255,50,205,50); - } - - if (color == "RED") { - valid_color = true; - return irr::video::SColor(255,255,0,0); - } - - if (color == "ORN") { - valid_color = true; - return irr::video::SColor(255,255,140,0); - } - - if (color == "BLU") { - valid_color = true; - return irr::video::SColor(255,0,0,255); - } - - if (color == "CYN") { - valid_color = true; - return irr::video::SColor(255,0,255,255); - } - - if (color == "BLK") { - valid_color = true; - return irr::video::SColor(255,0,0,0); - } - - if (color == "BRN") { - valid_color = true; - return irr::video::SColor(255,139,69,19); - } - - if (color == "WHT") { - valid_color = true; - return irr::video::SColor(255,255,255,255); - } - - if (color == "GRY") { - valid_color = true; - return irr::video::SColor(255,205,201,201); - } - - valid_color = false; - - return irr::video::SColor(0,0,0,0); + outcolor = irr::video::SColor(255,r,g,b); + return true; } diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index f5a273668..60d170fda 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -321,7 +321,7 @@ private: void parseTabHeader(parserData* data,std::string element); void parseBox(parserData* data,std::string element); - irr::video::SColor getColor(std::string color,bool& valid_color); + bool parseColor(std::string color, irr::video::SColor& outcolor); }; class FormspecFormSource: public IFormSource