Use hexadecimal RRGGBB instead of colorkeys, rename getColor to parseColor
authorSfan5 <sfan5@live.de>
Sat, 6 Jul 2013 08:32:58 +0000 (10:32 +0200)
committerSfan5 <sfan5@live.de>
Sat, 6 Jul 2013 08:32:58 +0000 (10:32 +0200)
builtin/mainmenu.lua
builtin/modstore.lua
doc/lua_api.txt
src/guiFormSpecMenu.cpp
src/guiFormSpecMenu.h

index 56143e700b518b4b9caf54d9d4388a8433af2677..12747c8c94815483e8fe6571a715e8d6f3c94614 100644 (file)
@@ -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
index 73afc38995bb9012c4ad9628222e797718f12ced..1890da13800e25a31c3bec58e64de48bd480a86b 100644 (file)
@@ -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
index ebba40fbf2245fbe0e9d35a09e70ad3117ca5274..a9f2d0d46ff62ee896d357d1947be1d3708876d3 100644 (file)
@@ -960,7 +960,7 @@ textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>]
 ^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[<X>,<Y>;<name>;<caption 1>,<caption 2>;<current_tab>;<transparent>;<dr
 ^ transparent (optional) show transparent
 ^ draw_border (optional) draw border
 
-box[<X>,<Y>;<W>,<H>;<colorkey>]
+box[<X>,<Y>;<W>,<H>;<color>]
 ^ 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)
-
-Available colorkeys:
-- YLW yellow
-- GRN green
-- LIM lime
-- ORN orange
-- RED red
-- BLU blue
-- CYN cyan
-- BLK black
-- BRN brown
-- WHT white
-- GRY grey
+^ color in hexadecimal format RRGGBB
+
 
 Inventory location:
 
index 0aa2c2dcd8db40f00b576ab1805b5cf64ab67e76..3a3a9433eb6d97106c3eb33612a76134bd692494 100644 (file)
@@ -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 = getColor(color_str,valid_color);
+               irr::video::SColor 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) {
-
-       if (color == "YLW") {
-               valid_color = true;
-               return irr::video::SColor(255,255,255,0);
-       }
-
-       if (color == "GRN") {
-               valid_color = true;
-               return irr::video::SColor(255,34,249,34);
-       }
-
-       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);
-       }
+bool GUIFormSpecMenu::parseColor(std::string color, irr::video::SColor& outcolor) {
+       outcolor = irr::video::SColor(0,0,0,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);
-       }
+       if(color.size() != 6) return false;
+       if(!string_allowed(color, "0123456789abcdefABCDEF")) return false;
 
-       valid_color = false;
+       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;
 
-       return irr::video::SColor(0,0,0,0);
+       outcolor = irr::video::SColor(255,r,g,b);
+       return true;
 }
 
index f5a273668d65a9abb78854734eddcbb04b4cfd85..60d170fda10fd2ed821799ce977d1b9854ddcd98 100644 (file)
@@ -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