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);
/*
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)
e->setVisible(false);

View File

@ -56,6 +56,18 @@ bool GUIScrollContainer::OnEvent(const SEvent &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()
{
s32 pos = m_scrollbar->getPos();

View File

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