/* * This source file is part of RmlUi, the HTML/CSS Interface Middleware * * For the latest information, see http://github.com/mikke89/RmlUi * * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd * Copyright (c) 2019-2023 The RmlUi Team, and contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ #include "../Common/TestsShell.h" #include #include #include #include #include using namespace Rml; static const String document_flex_rml = R"(
)"; TEST_CASE("FlexFormatting") { Context* context = TestsShell::GetContext(); REQUIRE(context); ElementDocument* document = context->LoadDocumentFromMemory(document_flex_rml); REQUIRE(document); document->Show(); Element* checkbox = document->GetElementById("checkbox"); Element* flex = document->GetElementById("flex"); struct TestCase { String flex_direction; String align_items; Vector2f expected_size; }; TestCase test_cases[] = { {"column", "stretch", Vector2f(248, 16)}, {"column", "center", Vector2f(16, 16)}, {"row", "stretch", Vector2f(16, 88)}, {"row", "center", Vector2f(16, 16)}, }; for (auto& test_case : test_cases) { flex->SetProperty("flex-direction", test_case.flex_direction); flex->SetProperty("align-items", test_case.align_items); TestsShell::RenderLoop(); CAPTURE(test_case.align_items); CAPTURE(test_case.flex_direction); CHECK(checkbox->GetBox().GetSize().x == doctest::Approx(test_case.expected_size.x)); CHECK(checkbox->GetBox().GetSize().y == doctest::Approx(test_case.expected_size.y)); } document->Close(); TestsShell::ShutdownShell(); } static const String document_flex_dp_ratio_rml = R"(
)"; TEST_CASE("FlexFormatting.dp_ratio") { Context* context = TestsShell::GetContext(); REQUIRE(context); ElementDocument* document = context->LoadDocumentFromMemory(document_flex_dp_ratio_rml); REQUIRE(document); document->Show(); Element* window = document->GetChild(0); constexpr float native_width = 1920.f; constexpr float native_height = 1080.f; const float test_window_widths[] = { 3440.f, 2960.f, 2880.f, 2560.f, 2400.f, 2048.f, 1921.f, 1920.f, 1919.f, 1600.f, 1366.f, 1280.f, 1024.f, }; for (float window_width : test_window_widths) { const float dp_ratio = window_width / native_width; CAPTURE(window_width); CAPTURE(dp_ratio); context->SetDensityIndependentPixelRatio(dp_ratio); TestsShell::RenderLoop(); CHECK(window->GetBox().GetSize().x == window_width); CHECK(window->GetBox().GetSize().y == doctest::Approx((window_width / native_width) * native_height)); } document->Close(); TestsShell::ShutdownShell(); }