FormSpec: Add StaticTextSpec and superimpose over item image buttons
authorRealBadAngel <maciej.kasatkin@o2.pl>
Tue, 9 Feb 2016 05:06:10 +0000 (06:06 +0100)
committerkwolekr <kwolekr@minetest.net>
Tue, 9 Feb 2016 08:03:55 +0000 (03:03 -0500)
src/guiFormSpecMenu.cpp
src/guiFormSpecMenu.h

index 116688e956f86d85317e8681f86d3b809c2b1349..226cc6cf0e771f5714b36089cdc4917249a994e6 100644 (file)
@@ -1497,7 +1497,7 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
                        258 + m_fields.size()
                );
 
-               gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, spec.flabel.c_str());
+               gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, L"");
 
                if (spec.fname == data->focused_fieldname) {
                        Environment->setFocus(e);
@@ -1515,6 +1515,12 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
                pos.X += stof(v_pos[0]) * (float) spacing.X;
                pos.Y += stof(v_pos[1]) * (float) spacing.Y;
                m_itemimages.push_back(ImageDrawSpec("", item_name, pos, geom));
+
+               StaticTextSpec label_spec(
+                       utf8_to_wide(label),
+                       rect
+               );
+               m_static_texts.push_back(label_spec);
                return;
        }
        errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'"  << std::endl;
@@ -1883,6 +1889,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
        m_boxes.clear();
        m_tooltips.clear();
        m_inventory_rings.clear();
+       m_static_texts.clear();
 
        // Set default values (fits old formspec values)
        m_bgcolor = video::SColor(140,0,0,0);
@@ -2462,6 +2469,15 @@ void GUIFormSpecMenu::drawMenu()
        m_pointer = m_device->getCursorControl()->getPosition();
 #endif
 
+       /*
+               Draw static text elements
+       */
+       for (u32 i = 0; i < m_static_texts.size(); i++) {
+               const StaticTextSpec &spec = m_static_texts[i]; 
+               video::SColor color(255, 255, 255, 255);
+               m_font->draw(spec.text.c_str(), spec.rect, color, true, true, &spec.rect);
+       }
+
        /*
                Draw fields/buttons tooltips
        */
index 9b892f19273d2cd110cb5ac7660aa0fdd00a3a28..0677e87a690de54e43caacc879675125df8ec395 100644 (file)
@@ -228,6 +228,20 @@ class GUIFormSpecMenu : public GUIModalMenu
                irr::video::SColor color;
        };
 
+       struct StaticTextSpec {
+               StaticTextSpec()
+               {
+               }
+               StaticTextSpec(const std::wstring &a_text,
+                               const core::rect<s32> &a_rect):
+                       text(a_text),
+                       rect(a_rect)
+               {
+               }
+               std::wstring text;
+               core::rect<s32> rect;
+       };
+
 public:
        GUIFormSpecMenu(irr::IrrlichtDevice* dev,
                        gui::IGUIElement* parent, s32 id,
@@ -339,6 +353,7 @@ protected:
        std::vector<ImageDrawSpec> m_itemimages;
        std::vector<BoxDrawSpec> m_boxes;
        std::vector<FieldSpec> m_fields;
+       std::vector<StaticTextSpec> m_static_texts;
        std::vector<std::pair<FieldSpec,GUITable*> > m_tables;
        std::vector<std::pair<FieldSpec,gui::IGUICheckBox*> > m_checkboxes;
        std::map<std::string, TooltipSpec> m_tooltips;