a73x

cd9e8b61

Add ScaleTracker.enteredCount

a73x   2026-04-16 10:41

Exposes the size of the entered-output set so higher layers can gate
rendering on surface visibility.

diff --git a/src/scale_tracker.zig b/src/scale_tracker.zig
index 87c2e45..5cda2b6 100644
--- a/src/scale_tracker.zig
+++ b/src/scale_tracker.zig
@@ -52,6 +52,10 @@ pub const ScaleTracker = struct {
        }
        return max_scale;
    }

    pub fn enteredCount(self: *const ScaleTracker) usize {
        return self.entered.count();
    }
};

test "new tracker reports default scale of 1" {
@@ -135,3 +139,26 @@ test "setOutputScale on unknown id is a no-op" {
    t.setOutputScale(999, 5);
    try std.testing.expectEqual(@as(i32, 1), t.bufferScale());
}

test "enteredCount reflects the entered-output set" {
    var t = ScaleTracker.init(std.testing.allocator);
    defer t.deinit();

    try std.testing.expectEqual(@as(usize, 0), t.enteredCount());

    try t.addOutput(1);
    try t.addOutput(2);
    try std.testing.expectEqual(@as(usize, 0), t.enteredCount());

    try t.enterOutput(1);
    try std.testing.expectEqual(@as(usize, 1), t.enteredCount());

    try t.enterOutput(2);
    try std.testing.expectEqual(@as(usize, 2), t.enteredCount());

    t.leaveOutput(1);
    try std.testing.expectEqual(@as(usize, 1), t.enteredCount());

    t.removeOutput(2);
    try std.testing.expectEqual(@as(usize, 0), t.enteredCount());
}