forked from Mirrorlandia_minetest/minetest
Formspec: recreate item_image_button pressed state for its image and label
This commit is contained in:
parent
bd43933828
commit
5ca48a35a6
@ -1503,10 +1503,6 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
|
|||||||
Environment->setFocus(e);
|
Environment->setFocus(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
e->setUseAlphaChannel(true);
|
|
||||||
e->setImage(guiScalingImageButton(Environment->getVideoDriver(), NULL, geom.X, geom.Y));
|
|
||||||
e->setPressedImage(guiScalingImageButton(Environment->getVideoDriver(), NULL, geom.X, geom.Y));
|
|
||||||
e->setScaleImage(true);
|
|
||||||
spec.ftype = f_Button;
|
spec.ftype = f_Button;
|
||||||
rect+=data->basepos-padding;
|
rect+=data->basepos-padding;
|
||||||
spec.rect=rect;
|
spec.rect=rect;
|
||||||
@ -1514,13 +1510,8 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
|
|||||||
pos = padding + AbsoluteRect.UpperLeftCorner;
|
pos = padding + AbsoluteRect.UpperLeftCorner;
|
||||||
pos.X += stof(v_pos[0]) * (float) spacing.X;
|
pos.X += stof(v_pos[0]) * (float) spacing.X;
|
||||||
pos.Y += stof(v_pos[1]) * (float) spacing.Y;
|
pos.Y += stof(v_pos[1]) * (float) spacing.Y;
|
||||||
m_itemimages.push_back(ImageDrawSpec("", item_name, pos, geom));
|
m_itemimages.push_back(ImageDrawSpec("", item_name, e, pos, geom));
|
||||||
|
m_static_texts.push_back(StaticTextSpec(utf8_to_wide(label), rect, e));
|
||||||
StaticTextSpec label_spec(
|
|
||||||
utf8_to_wide(label),
|
|
||||||
rect
|
|
||||||
);
|
|
||||||
m_static_texts.push_back(label_spec);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
|
errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
|
||||||
@ -2442,6 +2433,11 @@ void GUIFormSpecMenu::drawMenu()
|
|||||||
core::rect<s32> imgrect(0, 0, spec.geom.X, spec.geom.Y);
|
core::rect<s32> imgrect(0, 0, spec.geom.X, spec.geom.Y);
|
||||||
// Viewport rectangle on screen
|
// Viewport rectangle on screen
|
||||||
core::rect<s32> rect = imgrect + spec.pos;
|
core::rect<s32> rect = imgrect + spec.pos;
|
||||||
|
if (spec.parent_button && spec.parent_button->isPressed()) {
|
||||||
|
rect += core::dimension2d<s32>(
|
||||||
|
skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
|
||||||
|
skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));
|
||||||
|
}
|
||||||
drawItemStack(driver, m_font, item, rect, &AbsoluteClippingRect,
|
drawItemStack(driver, m_font, item, rect, &AbsoluteClippingRect,
|
||||||
m_gamedef, IT_ROT_NONE);
|
m_gamedef, IT_ROT_NONE);
|
||||||
}
|
}
|
||||||
@ -2474,8 +2470,16 @@ void GUIFormSpecMenu::drawMenu()
|
|||||||
*/
|
*/
|
||||||
for (u32 i = 0; i < m_static_texts.size(); i++) {
|
for (u32 i = 0; i < m_static_texts.size(); i++) {
|
||||||
const StaticTextSpec &spec = m_static_texts[i];
|
const StaticTextSpec &spec = m_static_texts[i];
|
||||||
|
core::rect<s32> rect = spec.rect;
|
||||||
|
if (spec.parent_button && spec.parent_button->isPressed()) {
|
||||||
|
// Use image offset instead of text's because its a bit smaller
|
||||||
|
// and fits better, also TEXT_OFFSET_X is always 0
|
||||||
|
rect += core::dimension2d<s32>(
|
||||||
|
skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
|
||||||
|
skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));
|
||||||
|
}
|
||||||
video::SColor color(255, 255, 255, 255);
|
video::SColor color(255, 255, 255, 255);
|
||||||
m_font->draw(spec.text.c_str(), spec.rect, color, true, true, &spec.rect);
|
m_font->draw(spec.text.c_str(), rect, color, true, true, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -139,36 +139,53 @@ class GUIFormSpecMenu : public GUIModalMenu
|
|||||||
|
|
||||||
struct ImageDrawSpec
|
struct ImageDrawSpec
|
||||||
{
|
{
|
||||||
ImageDrawSpec()
|
ImageDrawSpec():
|
||||||
|
parent_button(NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
ImageDrawSpec(const std::string &a_name,
|
||||||
|
const std::string &a_item_name,
|
||||||
|
gui::IGUIButton *a_parent_button,
|
||||||
|
const v2s32 &a_pos, const v2s32 &a_geom):
|
||||||
|
name(a_name),
|
||||||
|
item_name(a_item_name),
|
||||||
|
parent_button(a_parent_button),
|
||||||
|
pos(a_pos),
|
||||||
|
geom(a_geom),
|
||||||
|
scale(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
ImageDrawSpec(const std::string &a_name,
|
ImageDrawSpec(const std::string &a_name,
|
||||||
const std::string &a_item_name,
|
const std::string &a_item_name,
|
||||||
const v2s32 &a_pos, const v2s32 &a_geom):
|
const v2s32 &a_pos, const v2s32 &a_geom):
|
||||||
name(a_name),
|
name(a_name),
|
||||||
item_name (a_item_name),
|
item_name(a_item_name),
|
||||||
|
parent_button(NULL),
|
||||||
pos(a_pos),
|
pos(a_pos),
|
||||||
geom(a_geom)
|
geom(a_geom),
|
||||||
|
scale(true)
|
||||||
{
|
{
|
||||||
scale = true;
|
|
||||||
}
|
}
|
||||||
ImageDrawSpec(const std::string &a_name,
|
ImageDrawSpec(const std::string &a_name,
|
||||||
const v2s32 &a_pos, const v2s32 &a_geom):
|
const v2s32 &a_pos, const v2s32 &a_geom):
|
||||||
name(a_name),
|
name(a_name),
|
||||||
|
parent_button(NULL),
|
||||||
pos(a_pos),
|
pos(a_pos),
|
||||||
geom(a_geom)
|
geom(a_geom),
|
||||||
|
scale(true)
|
||||||
{
|
{
|
||||||
scale = true;
|
|
||||||
}
|
}
|
||||||
ImageDrawSpec(const std::string &a_name,
|
ImageDrawSpec(const std::string &a_name,
|
||||||
const v2s32 &a_pos):
|
const v2s32 &a_pos):
|
||||||
name(a_name),
|
name(a_name),
|
||||||
pos(a_pos)
|
parent_button(NULL),
|
||||||
|
pos(a_pos),
|
||||||
|
scale(false)
|
||||||
{
|
{
|
||||||
scale = false;
|
|
||||||
}
|
}
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string item_name;
|
std::string item_name;
|
||||||
|
gui::IGUIButton *parent_button;
|
||||||
v2s32 pos;
|
v2s32 pos;
|
||||||
v2s32 geom;
|
v2s32 geom;
|
||||||
bool scale;
|
bool scale;
|
||||||
@ -229,17 +246,28 @@ class GUIFormSpecMenu : public GUIModalMenu
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct StaticTextSpec {
|
struct StaticTextSpec {
|
||||||
StaticTextSpec()
|
StaticTextSpec():
|
||||||
|
parent_button(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
StaticTextSpec(const std::wstring &a_text,
|
StaticTextSpec(const std::wstring &a_text,
|
||||||
const core::rect<s32> &a_rect):
|
const core::rect<s32> &a_rect):
|
||||||
text(a_text),
|
text(a_text),
|
||||||
rect(a_rect)
|
rect(a_rect),
|
||||||
|
parent_button(NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
StaticTextSpec(const std::wstring &a_text,
|
||||||
|
const core::rect<s32> &a_rect,
|
||||||
|
gui::IGUIButton *a_parent_button):
|
||||||
|
text(a_text),
|
||||||
|
rect(a_rect),
|
||||||
|
parent_button(a_parent_button)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
std::wstring text;
|
std::wstring text;
|
||||||
core::rect<s32> rect;
|
core::rect<s32> rect;
|
||||||
|
gui::IGUIButton *parent_button;
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Loading…
Reference in New Issue
Block a user