ScrollablePanel should try to pass mouse wheel events to child widgets

0.8
Bruno Van de Velde 2018-07-24 19:24:51 +02:00
parent cd983d04db
commit a374650a3c
18 changed files with 56 additions and 26 deletions

View File

@ -340,7 +340,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -549,8 +549,9 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/// Returns whether the scrolling was handled by the widget or not.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void mouseWheelScrolled(float delta, Vector2f pos);
virtual bool mouseWheelScrolled(float delta, Vector2f pos);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -314,7 +314,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -506,7 +506,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -479,7 +479,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -259,7 +259,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -234,7 +234,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -257,7 +257,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -312,7 +312,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseWheelScrolled(float delta, Vector2f pos) override;
bool mouseWheelScrolled(float delta, Vector2f pos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -643,7 +643,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Container::mouseWheelScrolled(float delta, Vector2f pos)
bool Container::mouseWheelScrolled(float delta, Vector2f pos)
{
sf::Event event;
event.type = sf::Event::MouseWheelScrolled;
@ -653,7 +653,7 @@ namespace tgui
event.mouseWheelScroll.y = static_cast<int>(pos.y - getPosition().y - getChildWidgetsOffset().y);
// Let the event manager handle the event
handleEvent(event);
return handleEvent(event);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -944,14 +944,10 @@ namespace tgui
// Check for mouse wheel scrolling
else if ((event.type == sf::Event::MouseWheelScrolled) && (event.mouseWheelScroll.wheel == sf::Mouse::Wheel::VerticalWheel))
{
// Find the widget under the mouse
// Send the event to the widget below the mouse
Widget::Ptr widget = mouseOnWhichWidget({static_cast<float>(event.mouseWheelScroll.x), static_cast<float>(event.mouseWheelScroll.y)});
if (widget != nullptr)
{
// Send the event to the widget
widget->mouseWheelScrolled(event.mouseWheelScroll.delta, {static_cast<float>(event.mouseWheelScroll.x), static_cast<float>(event.mouseWheelScroll.y)});
return true;
}
return widget->mouseWheelScrolled(event.mouseWheelScroll.delta, {static_cast<float>(event.mouseWheelScroll.x), static_cast<float>(event.mouseWheelScroll.y)});
return false;
}

View File

@ -737,8 +737,9 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Widget::mouseWheelScrolled(float, Vector2f)
bool Widget::mouseWheelScrolled(float, Vector2f)
{
return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -357,10 +357,15 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ChatBox::mouseWheelScrolled(float delta, Vector2f pos)
bool ChatBox::mouseWheelScrolled(float delta, Vector2f pos)
{
if (m_scroll->getViewportSize() < m_scroll->getMaximum())
{
m_scroll->mouseWheelScrolled(delta, pos - getPosition());
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -525,11 +525,11 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ComboBox::mouseWheelScrolled(float delta, Vector2f)
bool ComboBox::mouseWheelScrolled(float delta, Vector2f)
{
// Only act to scrolling when the list is not being shown
if (m_listBox->isVisible())
return;
return false;
// Check if you are scrolling down
if (delta < 0)
@ -550,6 +550,8 @@ namespace tgui
m_text.setString(m_listBox->getSelectedItem());
}
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -606,7 +606,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ListBox::mouseWheelScrolled(float delta, Vector2f pos)
bool ListBox::mouseWheelScrolled(float delta, Vector2f pos)
{
if (m_scroll->isShown())
{
@ -614,7 +614,10 @@ namespace tgui
// Update on which item the mouse is hovering
mouseMoved(pos);
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -441,8 +441,23 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ScrollablePanel::mouseWheelScrolled(float delta, Vector2f pos)
bool ScrollablePanel::mouseWheelScrolled(float delta, Vector2f pos)
{
const bool horizontalScrollbarVisible = m_horizontalScrollbar->isVisible() && (!m_horizontalScrollbar->getAutoHide() || (m_horizontalScrollbar->getMaximum() > m_horizontalScrollbar->getViewportSize()));
const bool verticalScrollbarVisible = m_verticalScrollbar->isVisible() && (!m_verticalScrollbar->getAutoHide() || (m_verticalScrollbar->getMaximum() > m_verticalScrollbar->getViewportSize()));
sf::Vector2f innerSize = getInnerSize();
if (verticalScrollbarVisible)
innerSize.x -= m_verticalScrollbar->getSize().x;
if (horizontalScrollbarVisible)
innerSize.y -= m_horizontalScrollbar->getSize().y;
if (FloatRect{getPosition().x + getChildWidgetsOffset().x, getPosition().y + getChildWidgetsOffset().y, innerSize.x, innerSize.y}.contains(pos))
{
if (Container::mouseWheelScrolled(delta, pos + getContentOffset()))
return true; // A child widget swallowed the event
}
if (m_horizontalScrollbar->isShown() && m_horizontalScrollbar->mouseOnWidget(pos - getPosition()))
{
m_horizontalScrollbar->mouseWheelScrolled(delta, pos - getPosition());
@ -453,6 +468,8 @@ namespace tgui
m_verticalScrollbar->mouseWheelScrolled(delta, pos - getPosition());
mouseMoved(pos);
}
return true; // We swallowed the event
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -551,7 +551,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Scrollbar::mouseWheelScrolled(float delta, Vector2f pos)
bool Scrollbar::mouseWheelScrolled(float delta, Vector2f pos)
{
if (static_cast<int>(m_value) - static_cast<int>(delta * m_scrollAmount) < 0)
setValue(0);
@ -560,6 +560,7 @@ namespace tgui
// Update over which part the mouse is hovering
mouseMoved(pos - getPosition());
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -419,7 +419,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Slider::mouseWheelScrolled(float delta, Vector2f)
bool Slider::mouseWheelScrolled(float delta, Vector2f)
{
if (m_invertedDirection)
delta = -delta;
@ -438,6 +438,8 @@ namespace tgui
else
setValue(m_value + std::round(delta) * m_step);
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -975,13 +975,15 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TextBox::mouseWheelScrolled(float delta, Vector2f pos)
bool TextBox::mouseWheelScrolled(float delta, Vector2f pos)
{
if (m_verticalScroll->isShown())
{
m_verticalScroll->mouseWheelScrolled(delta, pos - getPosition());
recalculateVisibleLines();
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////