From baa7c8f8ad4e5717e324948c85d3da6bbbf17c16 Mon Sep 17 00:00:00 2001
From: RealBadAngel <maciej.kasatkin@o2.pl>
Date: Tue, 9 Feb 2016 06:06:10 +0100
Subject: [PATCH] FormSpec: Add StaticTextSpec and superimpose over item image
 buttons

---
 src/guiFormSpecMenu.cpp | 18 +++++++++++++++++-
 src/guiFormSpecMenu.h   | 15 +++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index 116688e95..226cc6cf0 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -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
 	*/
diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h
index 9b892f192..0677e87a6 100644
--- a/src/guiFormSpecMenu.h
+++ b/src/guiFormSpecMenu.h
@@ -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 @@ class GUIFormSpecMenu : public GUIModalMenu
 	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;
-- 
GitLab