Added mousePressed and mouseReleased functions to Widget that get called for any mouse button (closes #96)

0.8
Bruno Van de Velde 2019-05-04 15:54:05 +02:00
parent 86be352070
commit 8e897bf235
34 changed files with 135 additions and 88 deletions

View File

@ -365,7 +365,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -227,7 +227,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -299,7 +299,7 @@ namespace tgui
std::function<void(std::uint32_t)> implTextEntered;
std::function<bool(float, sf::Vector2f)> implMouseWheelScrolled;
std::function<void()> implMouseNoLongerOnWidget;
std::function<void()> implMouseNoLongerDown;
std::function<void()> implMouseNoLongerDown; // TODO: Rename
std::function<void()> implMouseEnteredWidget;
std::function<void()> implMouseLeftWidget;
std::function<bool(const std::string&)> implRendererChanged;

View File

@ -551,6 +551,16 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void rightMouseReleased(Vector2f pos);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void mousePressed(sf::Mouse::Button button, Vector2f pos);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void mouseReleased(sf::Mouse::Button button, Vector2f pos);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -577,10 +587,16 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void mouseNoLongerOnWidget();
#ifndef TGUI_REMOVE_DEPRECATED_CODE
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void mouseNoLongerDown();
TGUI_DEPRECATED("Use leftMouseButtonNoLongerDown instead") virtual void mouseNoLongerDown();
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void leftMouseButtonNoLongerDown();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -361,7 +361,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -395,7 +395,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -339,7 +339,7 @@ namespace tgui
void mouseNoLongerOnWidget() override;
/// @internal
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -502,7 +502,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -639,7 +639,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -495,7 +495,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -258,7 +258,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -265,7 +265,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -248,7 +248,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -262,7 +262,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -405,7 +405,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -286,7 +286,7 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mouseNoLongerDown() override;
void leftMouseButtonNoLongerDown() override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal

View File

@ -634,7 +634,7 @@ namespace tgui
event.mouseButton.x = static_cast<int>(pos.x - getPosition().x - getChildWidgetsOffset().x);
event.mouseButton.y = static_cast<int>(pos.y - getPosition().y - getChildWidgetsOffset().y);
// Let the event manager handle the event, but don't let it call mouseNoLongerDown on all widgets (it will be done later)
// Let the event manager handle the event, but don't let it call leftMouseButtonNoLongerDown on all widgets (it will be done later)
m_handingMouseReleased = true;
handleEvent(event);
m_handingMouseReleased = false;
@ -710,12 +710,12 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Container::mouseNoLongerDown()
void Container::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
for (auto& widget : m_widgets)
widget->mouseNoLongerDown();
widget->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -861,7 +861,7 @@ namespace tgui
}
// Check if a mouse button was pressed or a touch event occurred
else if ((event.type == sf::Event::MouseButtonPressed) || (event.type == sf::Event::TouchBegan))
else if ((event.type == sf::Event::MouseButtonPressed) || ((event.type == sf::Event::TouchBegan) && (event.touch.finger == 0)))
{
Vector2f mousePos;
if (event.type == sf::Event::MouseButtonPressed)
@ -882,17 +882,10 @@ namespace tgui
if (!widget->isContainer())
widget->setFocused(true);
if (((event.type == sf::Event::MouseButtonPressed) && (event.mouseButton.button == sf::Mouse::Left))
|| ((event.type == sf::Event::TouchBegan) && (event.touch.finger == 0)))
{
widget->leftMousePressed(mousePos);
return true;
}
else if ((event.type == sf::Event::MouseButtonPressed) && (event.mouseButton.button == sf::Mouse::Right))
{
widget->rightMousePressed(mousePos);
return true;
}
if (event.type == sf::Event::MouseButtonPressed)
widget->mousePressed(event.mouseButton.button, mousePos);
else // Touch began of finger 0
widget->mousePressed(sf::Mouse::Button::Left, mousePos);
}
else // The mouse did not went down on a widget, so unfocus the focused child widget, but keep ourselves focused
{
@ -907,8 +900,7 @@ namespace tgui
}
// Check if a mouse button was released
else if (((event.type == sf::Event::MouseButtonReleased) && (event.mouseButton.button == sf::Mouse::Left))
|| ((event.type == sf::Event::TouchEnded) && (event.touch.finger == 0)))
else if ((event.type == sf::Event::MouseButtonReleased) || ((event.type == sf::Event::TouchEnded) && (event.touch.finger == 0)))
{
Vector2f mousePos;
if (event.type == sf::Event::MouseButtonReleased)
@ -919,15 +911,25 @@ namespace tgui
// Check if the mouse is on top of a widget
Widget::Ptr widgetBelowMouse = mouseOnWhichWidget(mousePos);
if (widgetBelowMouse != nullptr)
widgetBelowMouse->leftMouseReleased(mousePos);
// Tell all widgets that the mouse has gone up
// But don't do this when leftMouseReleased was called on this container because
// it will happen afterwards when mouseNoLongerDown is called on it
if (!m_handingMouseReleased)
{
for (auto& widget : m_widgets)
widget->mouseNoLongerDown();
if (event.type == sf::Event::MouseButtonReleased)
widgetBelowMouse->mouseReleased(event.mouseButton.button, mousePos);
else
widgetBelowMouse->mouseReleased(sf::Mouse::Button::Right, mousePos);
}
if (((event.type == sf::Event::MouseButtonReleased) && (event.mouseButton.button == sf::Mouse::Left))
|| ((event.type == sf::Event::TouchEnded) && (event.touch.finger == 0)))
{
// Tell all widgets that the mouse has gone up
// But don't do this when leftMouseReleased was called on this container because
// it will happen afterwards when leftMouseButtonNoLongerDown is called on it
if (!m_handingMouseReleased)
{
// TODO: Only call leftMouseButtonNoLongerDown on the widget that last got the left mouse down event
for (auto& widget : m_widgets)
widget->leftMouseButtonNoLongerDown();
}
}
if (widgetBelowMouse != nullptr)

View File

@ -192,9 +192,9 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CustomWidgetForBindings::mouseNoLongerDown()
void CustomWidgetForBindings::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
implMouseNoLongerDown();
}

View File

@ -782,6 +782,26 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Widget::mousePressed(sf::Mouse::Button button, Vector2f pos)
{
if (button == sf::Mouse::Left)
leftMousePressed(pos);
else if (button == sf::Mouse::Right)
rightMousePressed(pos);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Widget::mouseReleased(sf::Mouse::Button button, Vector2f pos)
{
if (button == sf::Mouse::Left)
leftMouseReleased(pos);
else if (button == sf::Mouse::Right)
rightMouseReleased(pos);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Widget::mouseMoved(Vector2f)
{
if (!m_mouseHover)
@ -817,7 +837,16 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef TGUI_REMOVE_DEPRECATED_CODE
void Widget::mouseNoLongerDown()
{
leftMouseButtonNoLongerDown();
}
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Widget::leftMouseButtonNoLongerDown()
{
m_mouseDown = false;
}

View File

@ -381,10 +381,10 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ChatBox::mouseNoLongerDown()
void ChatBox::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
m_scroll->mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
m_scroll->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -540,7 +540,7 @@ namespace tgui
{
// Tell the widgets that the mouse was released
for (auto& widget : m_widgets)
widget->mouseNoLongerDown();
widget->leftMouseButtonNoLongerDown();
// Check if the mouse is on top of the title bar
if (FloatRect{m_bordersCached.getLeft(), m_bordersCached.getTop(), getSize().x, m_titleBarHeightCached}.contains(pos))
@ -687,14 +687,14 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ChildWindow::mouseNoLongerDown()
void ChildWindow::leftMouseButtonNoLongerDown()
{
Container::mouseNoLongerDown();
Container::leftMouseButtonNoLongerDown();
for (const auto& button : {m_closeButton.get(), m_maximizeButton.get(), m_minimizeButton.get()})
{
if (button->isVisible())
button->mouseNoLongerDown();
button->leftMouseButtonNoLongerDown();
}
}

View File

@ -355,10 +355,10 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Label::mouseNoLongerDown()
void Label::leftMouseButtonNoLongerDown()
{
ClickableWidget::mouseNoLongerDown();
m_scrollbar->mouseNoLongerDown();
ClickableWidget::leftMouseButtonNoLongerDown();
m_scrollbar->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -644,10 +644,10 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ListBox::mouseNoLongerDown()
void ListBox::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
m_scroll->mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
m_scroll->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1024,11 +1024,11 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ListView::mouseNoLongerDown()
void ListView::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
m_verticalScrollbar->mouseNoLongerDown();
m_horizontalScrollbar->mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
m_verticalScrollbar->leftMouseButtonNoLongerDown();
m_horizontalScrollbar->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -744,13 +744,13 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void MenuBar::mouseNoLongerDown()
void MenuBar::leftMouseButtonNoLongerDown()
{
// Close the open menu, but not when it just opened because of this mouse click
if (!m_mouseDown)
closeMenu();
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -472,13 +472,13 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RangeSlider::mouseNoLongerDown()
void RangeSlider::leftMouseButtonNoLongerDown()
{
// The thumb might have been dragged between two values
if (m_mouseDown)
updateThumbPositions();
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -487,11 +487,11 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ScrollablePanel::mouseNoLongerDown()
void ScrollablePanel::leftMouseButtonNoLongerDown()
{
Panel::mouseNoLongerDown();
m_verticalScrollbar->mouseNoLongerDown();
m_horizontalScrollbar->mouseNoLongerDown();
Panel::leftMouseButtonNoLongerDown();
m_verticalScrollbar->leftMouseButtonNoLongerDown();
m_horizontalScrollbar->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -587,13 +587,13 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Scrollbar::mouseNoLongerDown()
void Scrollbar::leftMouseButtonNoLongerDown()
{
// The thumb might have been dragged between two values
if (m_mouseDown)
updateThumbPosition();
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -444,13 +444,13 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Slider::mouseNoLongerDown()
void Slider::leftMouseButtonNoLongerDown()
{
// The thumb might have been dragged between two values
if (m_mouseDown)
updateThumbPosition();
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -606,15 +606,15 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TextBox::mouseNoLongerDown()
void TextBox::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
if (m_verticalScrollbar->isShown())
m_verticalScrollbar->mouseNoLongerDown();
m_verticalScrollbar->leftMouseButtonNoLongerDown();
if (m_horizontalScrollbar->isShown())
m_horizontalScrollbar->mouseNoLongerDown();
m_horizontalScrollbar->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -807,11 +807,11 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TreeView::mouseNoLongerDown()
void TreeView::leftMouseButtonNoLongerDown()
{
Widget::mouseNoLongerDown();
m_verticalScrollbar->mouseNoLongerDown();
m_horizontalScrollbar->mouseNoLongerDown();
Widget::leftMouseButtonNoLongerDown();
m_verticalScrollbar->leftMouseButtonNoLongerDown();
m_horizontalScrollbar->leftMouseButtonNoLongerDown();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -122,7 +122,7 @@ void testClickableWidgetSignals(tgui::ClickableWidget::Ptr widget)
}
parent->leftMouseReleased({175, 135});
parent->mouseNoLongerDown();
parent->leftMouseButtonNoLongerDown();
REQUIRE(mousePressedCount == 1);
REQUIRE(mouseReleasedCount == 2);

View File

@ -201,7 +201,7 @@ TEST_CASE("[Label]")
parent->leftMousePressed({175, 135});
parent->leftMouseReleased({175, 135});
parent->mouseNoLongerDown();
parent->leftMouseButtonNoLongerDown();
REQUIRE(mousePressedCountBack == 0);
REQUIRE(mousePressedCountFront == 1);
@ -210,7 +210,7 @@ TEST_CASE("[Label]")
parent->leftMousePressed({175, 135});
parent->leftMouseReleased({175, 135});
parent->mouseNoLongerDown();
parent->leftMouseButtonNoLongerDown();
REQUIRE(mousePressedCountBack == 1);
REQUIRE(mousePressedCountFront == 1);

View File

@ -138,7 +138,7 @@ TEST_CASE("[Picture]")
parent->leftMousePressed({175, 135});
parent->leftMouseReleased({175, 135});
parent->mouseNoLongerDown();
parent->leftMouseButtonNoLongerDown();
REQUIRE(mousePressedCountBack == 0);
REQUIRE(mousePressedCountFront == 1);
@ -147,7 +147,7 @@ TEST_CASE("[Picture]")
parent->leftMousePressed({175, 135});
parent->leftMouseReleased({175, 135});
parent->mouseNoLongerDown();
parent->leftMouseButtonNoLongerDown();
REQUIRE(mousePressedCountBack == 1);
REQUIRE(mousePressedCountFront == 1);

View File

@ -197,7 +197,7 @@ TEST_CASE("[Slider]")
REQUIRE(slider->getValue() == 14);
REQUIRE(valueChangedCount == 1);
slider->leftMouseReleased({71, 10});
slider->mouseNoLongerDown();
slider->leftMouseButtonNoLongerDown();
REQUIRE(valueChangedCount == 1);
}
@ -232,7 +232,7 @@ TEST_CASE("[Slider]")
REQUIRE(slider->getValue() == 16);
REQUIRE(valueChangedCount == 1);
slider->leftMouseReleased({10, 71});
slider->mouseNoLongerDown();
slider->leftMouseButtonNoLongerDown();
REQUIRE(valueChangedCount == 1);
}