diff --git a/hyprtester/src/tests/main/layout_custom.cpp b/hyprtester/src/tests/main/layout_custom.cpp new file mode 100644 index 000000000..9a98a74a2 --- /dev/null +++ b/hyprtester/src/tests/main/layout_custom.cpp @@ -0,0 +1,56 @@ +#include "../shared.hpp" +#include "../../shared.hpp" +#include "../../hyprctlCompat.hpp" +#include "tests.hpp" + +TEST_CASE(layoutCustomGrid) { + OK(getFromSocket("r/eval hl.config({ general = { layout = 'lua:grid' } })")); + + ASSERT(!!Tests::spawnKitty("kitty_A"), true); + ASSERT(!!Tests::spawnKitty("kitty_B"), true); + + { + auto clients = getFromSocket("/clients"); + EXPECT_COUNT_STRING(clients, "size: 931,1036", 2); + } + + ASSERT(!!Tests::spawnKitty("kitty_C"), true); + + { + auto clients = getFromSocket("/clients"); + EXPECT_COUNT_STRING(clients, "size: 931,511", 3); + } + + ASSERT(!!Tests::spawnKitty("kitty_D"), true); + + { + auto clients = getFromSocket("/clients"); + EXPECT_COUNT_STRING(clients, "size: 931,511", 4); + } +} + +TEST_CASE(layoutCustomColumns) { + OK(getFromSocket("r/eval hl.config({ general = { layout = 'lua:columns' } })")); + + ASSERT(!!Tests::spawnKitty("kitty_A"), true); + ASSERT(!!Tests::spawnKitty("kitty_B"), true); + + { + auto clients = getFromSocket("/clients"); + EXPECT_COUNT_STRING(clients, "size: 931,1036", 2); + } + + ASSERT(!!Tests::spawnKitty("kitty_C"), true); + + { + auto clients = getFromSocket("/clients"); + EXPECT_COUNT_STRING(clients, ",1036\n", 3); // this won't split evenly + } + + ASSERT(!!Tests::spawnKitty("kitty_D"), true); + + { + auto clients = getFromSocket("/clients"); + EXPECT_COUNT_STRING(clients, ",1036\n", 4); // this won't split evenly + } +} diff --git a/hyprtester/test.lua b/hyprtester/test.lua index d1f8657e8..71009bb1e 100644 --- a/hyprtester/test.lua +++ b/hyprtester/test.lua @@ -293,3 +293,32 @@ hl.gesture({ fingers = 4, direction = "left", action = function() hl.dispatch(hl hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = "1", mode = "live" }) hl.gesture({ fingers = 2, direction = "right", action = "float", disable_inhibit = true }) + +hl.layout.register("columns", { + recalculate = function(ctx) + local n = #ctx.targets + if n == 0 then + return + end + + for i, target in ipairs(ctx.targets) do + target:place(ctx:column(i, n)) + end + end, +}) + +hl.layout.register("grid", { + recalculate = function(ctx) + local n = #ctx.targets + if n == 0 then + return + end + + local cols = math.ceil(math.sqrt(n)) + + for i, target in ipairs(ctx.targets) do + target:place(ctx:grid_cell(i, cols)) + end + end, +}) +