diff options
author | rubenwardy <rubenwardy@gmail.com> | 2016-08-07 14:32:31 +0100 |
---|---|---|
committer | rubenwardy <rubenwardy@gmail.com> | 2016-08-29 01:15:31 +0100 |
commit | 78ff5c193683fc643fbec85dc398da91d91a9e44 (patch) | |
tree | f0b8a0544d1eb4f0cee0ebe8fd738a820e1c5eb7 /src | |
parent | fbe4a9267ff75dc8f27ea1f6bcd59bc6727f347a (diff) | |
download | minetest-78ff5c193683fc643fbec85dc398da91d91a9e44.tar.gz minetest-78ff5c193683fc643fbec85dc398da91d91a9e44.tar.bz2 minetest-78ff5c193683fc643fbec85dc398da91d91a9e44.zip |
Fix background formspec elements from interfering with each other
Fixes #4397
Diffstat (limited to 'src')
-rw-r--r-- | src/guiFormSpecMenu.cpp | 24 | ||||
-rw-r--r-- | src/guiFormSpecMenu.h | 39 |
2 files changed, 33 insertions, 30 deletions
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 2564671a3..084a53c9d 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -637,17 +637,17 @@ void GUIFormSpecMenu::parseBackground(parserData* data,std::string element) geom.X = stof(v_geom[0]) * (float)spacing.X; geom.Y = stof(v_geom[1]) * (float)spacing.Y; - if (parts.size() == 4) { - m_clipbackground = is_yes(parts[3]); - if (m_clipbackground) { - pos.X = stoi(v_pos[0]); //acts as offset - pos.Y = stoi(v_pos[1]); //acts as offset - } + if (!data->explicit_size) + warningstream<<"invalid use of background without a size[] element"<<std::endl; + + bool clip = false; + if (parts.size() == 4 && is_yes(parts[3])) { + pos.X = stoi(v_pos[0]); //acts as offset + pos.Y = stoi(v_pos[1]); //acts as offset + clip = true; } + m_backgrounds.push_back(ImageDrawSpec(name, pos, geom, clip)); - if(!data->explicit_size) - warningstream<<"invalid use of background without a size[] element"<<std::endl; - m_backgrounds.push_back(ImageDrawSpec(name, pos, geom)); return; } errorstream<< "Invalid background element(" << parts.size() << "): '" << element << "'" << std::endl; @@ -1892,7 +1892,6 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) m_slotbordercolor = video::SColor(200,0,0,0); m_slotborder = false; - m_clipbackground = false; // Add tooltip { assert(m_tooltip_element == NULL); @@ -2344,7 +2343,7 @@ void GUIFormSpecMenu::drawMenu() // Image rectangle on screen core::rect<s32> rect = imgrect + spec.pos; - if (m_clipbackground) { + if (spec.clip) { core::dimension2d<s32> absrec_size = AbsoluteRect.getSize(); rect = core::rect<s32>(AbsoluteRect.UpperLeftCorner.X - spec.pos.X, AbsoluteRect.UpperLeftCorner.Y - spec.pos.Y, @@ -2358,8 +2357,7 @@ void GUIFormSpecMenu::drawMenu() core::rect<s32>(core::position2d<s32>(0,0), core::dimension2di(texture->getOriginalSize())), NULL/*&AbsoluteClippingRect*/, colors, true); - } - else { + } else { errorstream << "GUIFormSpecMenu::drawMenu() Draw backgrounds unable to load texture:" << std::endl; errorstream << "\t" << spec.name << std::endl; } diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index d06aa6cf5..dbcbf126a 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -143,9 +143,10 @@ class GUIFormSpecMenu : public GUIModalMenu struct ImageDrawSpec { ImageDrawSpec(): - parent_button(NULL) - { - } + parent_button(NULL), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, const std::string &a_item_name, gui::IGUIButton *a_parent_button, @@ -155,9 +156,10 @@ class GUIFormSpecMenu : public GUIModalMenu parent_button(a_parent_button), pos(a_pos), geom(a_geom), - scale(true) - { - } + scale(true), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, const std::string &a_item_name, const v2s32 &a_pos, const v2s32 &a_geom): @@ -166,32 +168,36 @@ class GUIFormSpecMenu : public GUIModalMenu parent_button(NULL), pos(a_pos), geom(a_geom), - scale(true) - { - } + scale(true), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, - const v2s32 &a_pos, const v2s32 &a_geom): + const v2s32 &a_pos, const v2s32 &a_geom, bool clip=false): name(a_name), parent_button(NULL), pos(a_pos), geom(a_geom), - scale(true) - { - } + scale(true), + clip(clip) + {} + ImageDrawSpec(const std::string &a_name, const v2s32 &a_pos): name(a_name), parent_button(NULL), pos(a_pos), - scale(false) - { - } + scale(false), + clip(false) + {} + std::string name; std::string item_name; gui::IGUIButton *parent_button; v2s32 pos; v2s32 geom; bool scale; + bool clip; }; struct FieldSpec @@ -428,7 +434,6 @@ protected: bool m_bgfullscreen; bool m_slotborder; - bool m_clipbackground; video::SColor m_bgcolor; video::SColor m_slotbg_n; video::SColor m_slotbg_h; |