Added event and draw tests for ListBox

This commit is contained in:
Bruno Van de Velde 2018-05-14 22:59:06 +02:00
parent c656152fbb
commit c285c69ce6
18 changed files with 336 additions and 13 deletions

View File

@ -362,6 +362,20 @@ namespace tgui
Widget::Ptr askToolTip(Vector2f mousePos) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
// This function is called every frame with the time passed since the last frame.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void update(sf::Time elapsedTime) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
// The function returns true when the event is consumed and false when the event was ignored by all widgets.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool handleEvent(sf::Event& event);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
protected:
@ -387,18 +401,6 @@ namespace tgui
void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// This function is called every frame with the time passed since the last frame.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void update(sf::Time elapsedTime) override;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The function returns true when the event is consumed and false when the event was ignored by all widgets.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool handleEvent(sf::Event& event);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Checks above which widget the mouse is standing.
// If there is no widget below the mouse then this function will return a null pointer.

View File

@ -24,6 +24,7 @@
#include "Tests.hpp"
#include <TGUI/Widgets/ListBox.hpp>
#include <TGUI/Widgets/Group.hpp>
TEST_CASE("[ListBox]")
{
@ -271,14 +272,153 @@ TEST_CASE("[ListBox]")
REQUIRE(listBox->getItems()[2] == "Item 3");
}
SECTION("AutoScroll")
{
REQUIRE(listBox->getAutoScroll());
listBox->setAutoScroll(false);
REQUIRE(!listBox->getAutoScroll());
listBox->setAutoScroll(true);
REQUIRE(listBox->getAutoScroll());
}
SECTION("Events / Signals")
{
auto container = tgui::Group::create({400.f, 300.f});
container->add(listBox);
auto mouseMoved = [container](sf::Vector2i pos){
sf::Event event;
event.type = sf::Event::MouseMoved;
event.mouseMove.x = pos.x;
event.mouseMove.y = pos.y;
container->handleEvent(event);
};
auto mousePressed = [container](sf::Vector2i pos){
sf::Event event;
event.type = sf::Event::MouseButtonPressed;
event.mouseButton.button = sf::Mouse::Left;
event.mouseButton.x = pos.x;
event.mouseButton.y = pos.y;
container->handleEvent(event);
};
auto mouseReleased = [container](sf::Vector2i pos){
sf::Event event;
event.type = sf::Event::MouseButtonReleased;
event.mouseButton.button = sf::Mouse::Left;
event.mouseButton.x = pos.x;
event.mouseButton.y = pos.y;
container->handleEvent(event);
};
listBox->setPosition(10, 20);
listBox->setSize(120, 64);
listBox->setItemHeight(20);
listBox->getRenderer()->setBorders(2);
listBox->getRenderer()->setScrollbarWidth(10);
listBox->addItem("Item 1");
listBox->addItem("Item 2");
listBox->addItem("Item 3");
SECTION("Widget")
{
testWidgetSignals(listBox);
}
// TODO
unsigned int itemSelectedCount = 0;
unsigned int doubleClickedCount = 0;
listBox->connect("ItemSelected", &genericCallback, std::ref(itemSelectedCount));
listBox->connect("DoubleClicked", &genericCallback, std::ref(doubleClickedCount));
SECTION("Click on item")
{
// Clicking the border does nothing
mouseMoved({11, 21});
mousePressed({11, 21});
mouseReleased({11, 21});
REQUIRE(itemSelectedCount == 0);
REQUIRE(listBox->getSelectedItemIndex() == -1);
// Select the first item
mouseMoved({12, 22});
mousePressed({12, 22});
mouseReleased({12, 22});
REQUIRE(itemSelectedCount == 1);
REQUIRE(listBox->getSelectedItemIndex() == 0);
// Select the third item
mousePressed({40, 70});
mouseReleased({40, 70});
REQUIRE(itemSelectedCount == 2);
REQUIRE(listBox->getSelectedItemIndex() == 2);
SECTION("Double click")
{
// If a click happens a long time after the previous click then it isn't a double click
container->update(sf::milliseconds(10000));
mousePressed({40, 70});
mouseReleased({40, 70});
REQUIRE(doubleClickedCount == 0);
container->update(sf::milliseconds(5));
mousePressed({40, 70});
mouseReleased({40, 70});
REQUIRE(doubleClickedCount == 1);
REQUIRE(itemSelectedCount == 2);
REQUIRE(listBox->getSelectedItemIndex() == 2);
// Third click is not registered as another double click
mousePressed({40, 70});
mouseReleased({40, 70});
REQUIRE(doubleClickedCount == 1);
}
}
SECTION("Scrollbar interaction")
{
// There is no scrollbar yet
mousePressed({127, 81});
mouseReleased({127, 81});
REQUIRE(itemSelectedCount == 1);
REQUIRE(listBox->getSelectedItemIndex() == 2);
listBox->addItem("Item 4");
// Clicking on scrollbar arrow down
mousePressed({127, 81});
mouseReleased({127, 81});
// Dragging scrollbar thumb
mouseMoved({125, 50});
mousePressed({125, 50});
mouseMoved({125, 45});
mouseReleased({125, 45});
REQUIRE(itemSelectedCount == 1);
REQUIRE(listBox->getSelectedItemIndex() == 2);
// Select the second and then third item
mouseMoved({40, 51});
mousePressed({40, 51});
REQUIRE(itemSelectedCount == 2);
REQUIRE(listBox->getSelectedItemIndex() == 1);
mouseMoved({40, 52});
REQUIRE(itemSelectedCount == 3);
REQUIRE(listBox->getSelectedItemIndex() == 2);
listBox->setAutoScroll(false);
listBox->addItem("Item 5");
listBox->addItem("Item 6");
listBox->addItem("Item 7");
listBox->addItem("Item 8");
listBox->addItem("Item 9");
// Scrolling down with mouse wheel
container->mouseWheelScrolled(-1, {40, 70});
container->mouseWheelScrolled(-1, {40, 70});
mousePressed({40, 52});
REQUIRE(listBox->getSelectedItemIndex() == 4);
}
}
testWidgetRenderer(listBox->getRenderer());
@ -308,6 +448,7 @@ TEST_CASE("[ListBox]")
REQUIRE_NOTHROW(renderer->setProperty("TextStyle", "Bold"));
REQUIRE_NOTHROW(renderer->setProperty("SelectedTextStyle", "Italic"));
REQUIRE_NOTHROW(renderer->setProperty("Scrollbar", "{ TrackColor = Red; ThumbColor = Blue; }"));
REQUIRE_NOTHROW(renderer->setProperty("ScrollbarWidth", "15"));
}
SECTION("set object property")
@ -326,6 +467,7 @@ TEST_CASE("[ListBox]")
REQUIRE_NOTHROW(renderer->setProperty("TextStyle", sf::Text::Bold));
REQUIRE_NOTHROW(renderer->setProperty("SelectedTextStyle", sf::Text::Italic));
REQUIRE_NOTHROW(renderer->setProperty("Scrollbar", scrollbarRenderer.getData()));
REQUIRE_NOTHROW(renderer->setProperty("ScrollbarWidth", 15));
}
SECTION("functions")
@ -344,6 +486,7 @@ TEST_CASE("[ListBox]")
renderer->setTextStyle(sf::Text::Bold);
renderer->setSelectedTextStyle(sf::Text::Italic);
renderer->setScrollbar(scrollbarRenderer.getData());
renderer->setScrollbarWidth(15);
}
REQUIRE(renderer->getProperty("BackgroundColor").getColor() == sf::Color(20, 30, 40));
@ -359,6 +502,7 @@ TEST_CASE("[ListBox]")
REQUIRE(renderer->getProperty("Padding").getOutline() == tgui::Borders(5, 6, 7, 8));
REQUIRE(renderer->getProperty("TextStyle").getTextStyle() == sf::Text::Bold);
REQUIRE(renderer->getProperty("SelectedTextStyle").getTextStyle() == sf::Text::Italic);
REQUIRE(renderer->getProperty("ScrollbarWidth").getNumber() == 15);
REQUIRE(renderer->getScrollbar()->propertyValuePairs.size() == 2);
REQUIRE(renderer->getScrollbar()->propertyValuePairs["trackcolor"].getColor() == sf::Color::Red);
@ -404,4 +548,181 @@ TEST_CASE("[ListBox]")
testSavingWidget("ListBox", listBox);
}
SECTION("Draw")
{
TEST_DRAW_INIT(80, 70, listBox)
listBox->setEnabled(true);
listBox->setPosition(10, 5);
listBox->setSize(60, 60);
listBox->setTextSize(14);
listBox->setItemHeight(18);
tgui::ListBoxRenderer renderer = tgui::RendererData::create();
renderer.setBackgroundColor(sf::Color::Green);
renderer.setTextColor(sf::Color::Red);
renderer.setSelectedBackgroundColor(sf::Color::White);
renderer.setSelectedTextColor(sf::Color::Black);
renderer.setBorderColor(sf::Color::Blue);
renderer.setBorders({1, 2, 3, 4});
renderer.setPadding({4, 3, 2, 1});
renderer.setTextStyle(sf::Text::Italic);
renderer.setSelectedTextStyle(sf::Text::Bold);
renderer.setScrollbarWidth(14);
renderer.setOpacity(0.7f);
listBox->setRenderer(renderer.getData());
auto setHoverRenderer = [&]{
renderer.setBackgroundColorHover(sf::Color::Yellow);
renderer.setTextColorHover(sf::Color::Magenta);
renderer.setSelectedBackgroundColorHover(sf::Color::Cyan);
renderer.setSelectedTextColorHover("#808080");
};
listBox->addItem("1");
listBox->addItem("2");
listBox->addItem("3");
listBox->addItem("4");
listBox->addItem("5");
listBox->addItem("6");
const sf::Vector2f mousePos1{30, 20};
const sf::Vector2f mousePos2{30, 35};
const sf::Vector2f mousePos3{30, 50};
SECTION("Colored")
{
SECTION("No selected item")
{
SECTION("No hover")
{
TEST_DRAW("ListBox_NoSelectedNoHover.png")
}
SECTION("Hover")
{
listBox->mouseMoved(mousePos2);
SECTION("No hover properties set")
{
TEST_DRAW("ListBox_NoSelectedHover_NoHoverSet.png")
}
SECTION("Hover properties set")
{
setHoverRenderer();
TEST_DRAW("ListBox_NoSelectedHover_HoverSet.png")
}
}
}
SECTION("Selected item")
{
listBox->setSelectedItem("4");
SECTION("No hover")
{
TEST_DRAW("ListBox_SelectedNoHover.png")
}
SECTION("Hover selected")
{
listBox->mouseMoved(mousePos1);
SECTION("No hover properties set")
{
TEST_DRAW("ListBox_SelectedHoverSelected_NoHoverSet.png")
}
SECTION("Hover properties set")
{
setHoverRenderer();
TEST_DRAW("ListBox_SelectedHoverSelected_HoverSet.png")
}
}
SECTION("Hover other")
{
listBox->mouseMoved(mousePos3);
SECTION("No hover properties set")
{
TEST_DRAW("ListBox_SelectedHoverOther_NoHoverSet.png")
}
SECTION("Hover properties set")
{
setHoverRenderer();
TEST_DRAW("ListBox_SelectedHoverOther_HoverSet.png")
}
}
}
}
SECTION("Textured")
{
renderer.setTextureBackground("resources/Texture1.png");
SECTION("No selected item")
{
SECTION("No hover")
{
TEST_DRAW("ListBox_NoSelectedNoHover_Texture.png")
}
SECTION("Hover")
{
listBox->mouseMoved(mousePos2);
SECTION("No hover properties set")
{
TEST_DRAW("ListBox_NoSelectedHover_NoHoverSet_Texture.png")
}
SECTION("Hover properties set")
{
setHoverRenderer();
TEST_DRAW("ListBox_NoSelectedHover_HoverSet_Texture.png")
}
}
}
SECTION("Selected item")
{
listBox->setSelectedItem("4");
SECTION("No hover")
{
TEST_DRAW("ListBox_SelectedNoHover_Texture.png")
}
SECTION("Hover selected")
{
listBox->mouseMoved(mousePos1);
SECTION("No hover properties set")
{
TEST_DRAW("ListBox_SelectedHoverSelected_NoHoverSet_Texture.png")
}
SECTION("Hover properties set")
{
setHoverRenderer();
TEST_DRAW("ListBox_SelectedHoverSelected_HoverSet_Texture.png")
}
}
SECTION("Hover other")
{
listBox->mouseMoved(mousePos3);
SECTION("No hover properties set")
{
TEST_DRAW("ListBox_SelectedHoverOther_NoHoverSet_Texture.png")
}
SECTION("Hover properties set")
{
setHoverRenderer();
TEST_DRAW("ListBox_SelectedHoverOther_HoverSet_Texture.png")
}
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB