From 5ca48a35a610aefd5c34d615cb49900f423b7aa6 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Tue, 9 Feb 2016 10:43:38 +0100 Subject: Formspec: recreate item_image_button pressed state for its image and label --- src/guiFormSpecMenu.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src/guiFormSpecMenu.cpp') diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 226cc6cf0..8a657a2ff 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -1503,10 +1503,6 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element) 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; rect+=data->basepos-padding; spec.rect=rect; @@ -1514,13 +1510,8 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element) pos = padding + AbsoluteRect.UpperLeftCorner; 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); + m_itemimages.push_back(ImageDrawSpec("", item_name, e, pos, geom)); + m_static_texts.push_back(StaticTextSpec(utf8_to_wide(label), rect, e)); return; } errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl; @@ -2442,6 +2433,11 @@ void GUIFormSpecMenu::drawMenu() core::rect imgrect(0, 0, spec.geom.X, spec.geom.Y); // Viewport rectangle on screen core::rect rect = imgrect + spec.pos; + if (spec.parent_button && spec.parent_button->isPressed()) { + rect += core::dimension2d( + 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, m_gamedef, IT_ROT_NONE); } @@ -2474,8 +2470,16 @@ void GUIFormSpecMenu::drawMenu() */ for (u32 i = 0; i < m_static_texts.size(); i++) { const StaticTextSpec &spec = m_static_texts[i]; + core::rect 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( + 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); - 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); } /* -- cgit v1.2.3