diff options
author | SmallJoker <mk939@ymail.com> | 2020-02-11 19:53:09 +0100 |
---|---|---|
committer | SmallJoker <mk939@ymail.com> | 2020-03-11 19:09:50 +0100 |
commit | 766d160ffb36528365c6a38ac93304781e5cecee (patch) | |
tree | 60bcc1203dcf9703e03dcce43473f7e8a1d6a937 /src/gui/guiFormSpecMenu.cpp | |
parent | fd4daefb29f2922937849a207812fe368260f43e (diff) | |
download | minetest-766d160ffb36528365c6a38ac93304781e5cecee.tar.gz minetest-766d160ffb36528365c6a38ac93304781e5cecee.tar.bz2 minetest-766d160ffb36528365c6a38ac93304781e5cecee.zip |
guiHyperText: Fix blinky cursor on link hover (#9392)
Change legacy size/position calculations to 'textarea'
Diffstat (limited to 'src/gui/guiFormSpecMenu.cpp')
-rw-r--r-- | src/gui/guiFormSpecMenu.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 45eb0d17c..b96f53664 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -1634,11 +1634,9 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen pos = getElementBasePos(&v_pos); pos -= padding; - pos.X += stof(v_pos[0]) * spacing.X; - pos.Y += stof(v_pos[1]) * spacing.Y + (m_btn_height * 2); - geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); - geom.Y = (stof(v_geom[1]) * imgsize.Y) - (spacing.Y - imgsize.Y); + geom.Y = (stof(v_geom[1]) * (float)imgsize.Y) - (spacing.Y - imgsize.Y); + pos.Y += m_btn_height; } core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y); @@ -1653,7 +1651,7 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen 258 + m_fields.size() ); - spec.ftype = f_Unknown; + spec.ftype = f_HyperText; GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment, this, spec.fid, rect, m_client, m_tsrc); e->drop(); @@ -3309,7 +3307,8 @@ void GUIFormSpecMenu::drawMenu() } #ifndef HAVE_TOUCHSCREENGUI - if (current_cursor_icon != field.fcursor_icon) + if (field.ftype != f_HyperText && // Handled directly in guiHyperText + current_cursor_icon != field.fcursor_icon) cursor_control->setActiveIcon(field.fcursor_icon); #endif @@ -4235,9 +4234,9 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) (event.GUIEvent.EventType == gui::EGET_CHECKBOX_CHANGED) || (event.GUIEvent.EventType == gui::EGET_COMBO_BOX_CHANGED) || (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED)) { - unsigned int btn_id = event.GUIEvent.Caller->getID(); + s32 caller_id = event.GUIEvent.Caller->getID(); - if (btn_id == 257) { + if (caller_id == 257) { if (m_allowclose) { acceptInput(quit_mode_accept); quitMenu(); @@ -4253,8 +4252,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) for (GUIFormSpecMenu::FieldSpec &s : m_fields) { // if its a button, set the send field so // lua knows which button was pressed - if ((s.ftype == f_Button || s.ftype == f_CheckBox) && - s.fid == event.GUIEvent.Caller->getID()) { + + if (caller_id != s.fid) + continue; + + if (s.ftype == f_Button || s.ftype == f_CheckBox) { s.send = true; if (s.is_exit) { if (m_allowclose) { @@ -4270,8 +4272,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) s.send = false; return true; - } else if ((s.ftype == f_DropDown) && - (s.fid == event.GUIEvent.Caller->getID())) { + } else if (s.ftype == f_DropDown) { // only send the changed dropdown for (GUIFormSpecMenu::FieldSpec &s2 : m_fields) { if (s2.ftype == f_DropDown) { @@ -4289,13 +4290,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } return true; - } else if ((s.ftype == f_ScrollBar) && - (s.fid == event.GUIEvent.Caller->getID())) { + } else if (s.ftype == f_ScrollBar) { s.fdefault = L"Changed"; acceptInput(quit_mode_no); s.fdefault = L""; - } else if ((s.ftype == f_Unknown) && - (s.fid == event.GUIEvent.Caller->getID())) { + } else if (s.ftype == f_Unknown || s.ftype == f_HyperText) { s.send = true; acceptInput(); s.send = false; |