Avoid drawing clipped out formspec elements (#10095)

This commit is contained in:
EvidenceB 2020-08-23 22:50:14 +02:00 committed by GitHub
parent 3c2890692b
commit 287f3fb2e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 3 deletions

View File

@ -3483,10 +3483,14 @@ void GUIFormSpecMenu::drawMenu()
e->setVisible(true); e->setVisible(true);
/* /*
Call base class This is where all the drawing happens.
(This is where all the drawing happens.)
*/ */
gui::IGUIElement::draw(); core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
if ((*it)->isNotClipped() ||
AbsoluteClippingRect.isRectCollided(
(*it)->getAbsolutePosition()))
(*it)->draw();
for (gui::IGUIElement *e : m_clickthrough_elements) for (gui::IGUIElement *e : m_clickthrough_elements)
e->setVisible(false); e->setVisible(false);

View File

@ -56,6 +56,18 @@ bool GUIScrollContainer::OnEvent(const SEvent &event)
return IGUIElement::OnEvent(event); return IGUIElement::OnEvent(event);
} }
void GUIScrollContainer::draw()
{
if (isVisible()) {
core::list<IGUIElement *>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
if ((*it)->isNotClipped() ||
AbsoluteClippingRect.isRectCollided(
(*it)->getAbsolutePosition()))
(*it)->draw();
}
}
void GUIScrollContainer::updateScrolling() void GUIScrollContainer::updateScrolling()
{ {
s32 pos = m_scrollbar->getPos(); s32 pos = m_scrollbar->getPos();

View File

@ -32,6 +32,8 @@ public:
virtual bool OnEvent(const SEvent &event) override; virtual bool OnEvent(const SEvent &event) override;
virtual void draw() override;
inline void onScrollEvent(gui::IGUIElement *caller) inline void onScrollEvent(gui::IGUIElement *caller)
{ {
if (caller == m_scrollbar) if (caller == m_scrollbar)