TGUI/tests/Widgets/VerticalLayout.cpp

151 lines
7.1 KiB
C++

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// TGUI - Texus' Graphical User Interface
// Copyright (C) 2012-2018 Bruno Van de Velde (vdv_b@tgui.eu)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "Tests.hpp"
#include <TGUI/Widgets/VerticalLayout.hpp>
#include <TGUI/Widgets/Button.hpp>
TEST_CASE("[VerticalLayout]")
{
auto layout = tgui::VerticalLayout::create();
layout->setSize(1000, 800);
layout->setPosition(50, 40);
SECTION("Positions and sizes")
{
auto button1 = tgui::Button::create();
layout->add(button1);
REQUIRE(button1->getPosition() == sf::Vector2f(0, 0));
REQUIRE(button1->getFullSize() == sf::Vector2f(1000, 800));
auto button2 = tgui::Button::create();
layout->add(button2);
REQUIRE(button2->getPosition() == sf::Vector2f(0, 400));
REQUIRE(button1->getFullSize() == sf::Vector2f(1000, 400));
REQUIRE(button2->getFullSize() == sf::Vector2f(1000, 400));
layout->getRenderer()->setPadding({10});
REQUIRE(button1->getPosition() == sf::Vector2f(0, 0));
REQUIRE(button2->getPosition() == sf::Vector2f(0, 395));
REQUIRE(button1->getFullSize() == sf::Vector2f(980, 385));
REQUIRE(button2->getFullSize() == sf::Vector2f(980, 385));
layout->getRenderer()->setSpaceBetweenWidgets(30);
REQUIRE(button1->getPosition() == sf::Vector2f(0, 0));
REQUIRE(button2->getPosition() == sf::Vector2f(0, 405));
REQUIRE(button1->getFullSize() == sf::Vector2f(980, 375));
REQUIRE(button2->getFullSize() == sf::Vector2f(980, 375));
SECTION("Spaces and ratios")
{
layout->addSpace(0.5f);
auto button3 = tgui::Button::create();
layout->add(button3, 20);
REQUIRE(layout->getRatio(0) == 1.f);
REQUIRE(layout->getRatio(button1) == 1.f);
REQUIRE(layout->getRatio(2) == 0.5f);
REQUIRE(layout->getRatio(3) == 20);
REQUIRE(layout->getRatio(button3) == 20);
REQUIRE(layout->setRatio(button3, 2));
REQUIRE(layout->getRatio(button3) == 2);
REQUIRE(!layout->setRatio(10, 1));
REQUIRE(layout->getRatio(10) == 0);
REQUIRE(!layout->setRatio(nullptr, 1));
REQUIRE(layout->getRatio(nullptr) == 0);
REQUIRE(layout->get(0)->getFullSize() == sf::Vector2f(980, (800 - 20 - 3*30) * (1 / 4.5f)));
REQUIRE(layout->get(1)->getFullSize() == sf::Vector2f(980, (800 - 20 - 3*30) * (1 / 4.5f)));
REQUIRE(layout->get(2)->getFullSize() == sf::Vector2f(980, (800 - 20 - 3*30) * (0.5f / 4.5f)));
REQUIRE(layout->get(3)->getFullSize() == sf::Vector2f(980, (800 - 20 - 3*30) * (2 / 4.5f)));
REQUIRE(layout->get(0)->getPosition() == sf::Vector2f(0, 0));
REQUIRE(layout->get(1)->getPosition() == sf::Vector2f(0, layout->get(0)->getPosition().y + layout->get(0)->getFullSize().y + 30));
REQUIRE(layout->get(2)->getPosition() == sf::Vector2f(0, layout->get(1)->getPosition().y + layout->get(1)->getFullSize().y + 30));
REQUIRE(layout->get(3)->getPosition() == sf::Vector2f(0, layout->get(2)->getPosition().y + layout->get(2)->getFullSize().y + 30));
layout->insertSpace(1, 1.5f);
layout->insertSpace(3, 2.5f);
layout->remove(4);
auto button4 = tgui::Button::create();
layout->insert(2, button4);
layout->remove(2);
REQUIRE(layout->get(0)->getFullSize() == sf::Vector2f(980, (800 - 20 - 4*30) * (1 / 8.f)));
REQUIRE(layout->get(1)->getFullSize() == sf::Vector2f(980, (800 - 20 - 4*30) * (1.5f / 8.f)));
REQUIRE(layout->get(2)->getFullSize() == sf::Vector2f(980, (800 - 20 - 4*30) * (1 / 8.f)));
REQUIRE(layout->get(3)->getFullSize() == sf::Vector2f(980, (800 - 20 - 4*30) * (2.5f / 8.f)));
REQUIRE(layout->get(4)->getFullSize() == sf::Vector2f(980, (800 - 20 - 4*30) * (2 / 8.f)));
REQUIRE(layout->get(0)->getPosition() == sf::Vector2f(0, 0));
REQUIRE(layout->get(1)->getPosition() == sf::Vector2f(0, layout->get(0)->getPosition().y + layout->get(0)->getFullSize().y + 30));
REQUIRE(layout->get(2)->getPosition() == sf::Vector2f(0, layout->get(1)->getPosition().y + layout->get(1)->getFullSize().y + 30));
REQUIRE(layout->get(3)->getPosition() == sf::Vector2f(0, layout->get(2)->getPosition().y + layout->get(2)->getFullSize().y + 30));
REQUIRE(layout->get(4)->getPosition() == sf::Vector2f(0, layout->get(3)->getPosition().y + layout->get(3)->getFullSize().y + 30));
}
}
SECTION("Order")
{
REQUIRE(layout->get(0) == nullptr);
layout->add(tgui::Button::create(), "1");
layout->add(tgui::Button::create(), "2");
layout->insert(1, tgui::Button::create(), "3");
layout->insert(0, tgui::Button::create(), "4");
layout->insert(4, tgui::Button::create(), "5");
REQUIRE(layout->getWidgetName(layout->get(0)) == "4");
REQUIRE(layout->getWidgetName(layout->get(1)) == "1");
REQUIRE(layout->getWidgetName(layout->get(2)) == "3");
REQUIRE(layout->getWidgetName(layout->get(3)) == "2");
REQUIRE(layout->getWidgetName(layout->get(4)) == "5");
REQUIRE(layout->get(5) == nullptr);
REQUIRE(layout->remove(layout->get("2")) == true);
REQUIRE(layout->remove(1) == true);
REQUIRE(layout->remove(5) == false);
REQUIRE(layout->remove(tgui::Button::create()) == false);
REQUIRE(layout->getWidgetName(layout->get(0)) == "4");
REQUIRE(layout->getWidgetName(layout->get(1)) == "3");
REQUIRE(layout->getWidgetName(layout->get(2)) == "5");
REQUIRE(layout->get(5) == nullptr);
layout->removeAllWidgets();
REQUIRE(layout->get(0) == nullptr);
}
SECTION("Saving and loading from file")
{
layout->add(tgui::Button::create("Hello"));
layout->addSpace(0.5);
layout->add(tgui::Button::create("Hi"));
testSavingWidget("VerticalLayout", layout, false);
}
}