From 2182f72105033db025bb29e08319586112e53c5f Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 10 Jun 2026 19:37:25 +0800
Subject: [PATCH] Fix empty Space lane fill
---
C3.tools/round1-three-zone-linkage-fixture-qa.sh | 63 ++++++++++++++++++++++++++++---
1 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/C3.tools/round1-three-zone-linkage-fixture-qa.sh b/C3.tools/round1-three-zone-linkage-fixture-qa.sh
index 3510d7f..b32d5b8 100755
--- a/C3.tools/round1-three-zone-linkage-fixture-qa.sh
+++ b/C3.tools/round1-three-zone-linkage-fixture-qa.sh
@@ -531,6 +531,23 @@
and inner.get("y", 0) + inner.get("height", 0) <= outer.get("y", 0) + outer.get("height", 0) + tolerance
)
+def is_light_blue(color):
+ return (
+ color.get("alpha", 0) >= 0.98
+ and color.get("blue", 0) >= 0.98
+ and color.get("green", 0) >= 0.90
+ and color.get("red", 0) >= 0.80
+ and color.get("blue", 0) > color.get("red", 0) + 0.04
+ )
+
+def is_white(color):
+ return (
+ color.get("alpha", 0) >= 0.98
+ and color.get("red", 0) >= 0.98
+ and color.get("green", 0) >= 0.98
+ and color.get("blue", 0) >= 0.98
+ )
+
root = report.get("rootView", {})
groups = root.get("spaceLaneDisplayGroups", [])
segments = root.get("spaceLaneSegments", [])
@@ -596,24 +613,56 @@
require(focused[0].get("label") == "B1", "hovered multi-display Space must be B1")
require("focused" in focused[0].get("visualStates", []), "focused B1 segment must expose focused visual state")
-idle_empty_segments = [
+empty_segments = [
segment for segment in segments
if segment.get("windowCount") == 0
+]
+require(empty_segments, "multi-display visual fixture must include at least one empty Space")
+require(
+ {"A3", "B1"}.issubset({segment.get("label") for segment in empty_segments}),
+ "multi-display visual fixture must include the A3/B1 empty Space regression pair"
+)
+require(
+ all(segment.get("backgroundKind") == "clear" for segment in empty_segments),
+ "empty Spaces must not keep a dirty gray fill, even when focused/current/associated"
+)
+require(
+ all(not segment.get("gradientColors", []) for segment in empty_segments),
+ "empty Spaces must clear stale gradient colors"
+)
+require(
+ all(segment.get("backgroundColor", {}).get("alpha", 1) <= 0.01 for segment in empty_segments),
+ "empty Spaces must keep transparent fill"
+)
+require(
+ all(segment.get("shadowOpacity", 1) <= 0.01 for segment in empty_segments),
+ "empty Spaces must not draw a shadow that reads as an interior gray fill"
+)
+idle_occupied_segments = [
+ segment for segment in segments
+ if segment.get("windowCount", 0) > 0
and segment.get("isFocused") is not True
and segment.get("isCurrent") is not True
and segment.get("isAppAssociated") is not True
and segment.get("isWindowAssociated") is not True
]
-require(idle_empty_segments, "multi-display visual fixture must include at least one idle empty Space")
-require(
- all(segment.get("backgroundColor", {}).get("alpha", 1) <= 0.01 for segment in idle_empty_segments),
- "idle empty Spaces must not keep a dirty gray fill"
-)
+require(idle_occupied_segments, "multi-display visual fixture must include an idle occupied Space")
+for segment in idle_occupied_segments:
+ gradient_colors = segment.get("gradientColors", [])
+ require(segment.get("backgroundKind") == "gradient", "idle occupied Spaces must use blue-white gradient fill")
+ require(len(gradient_colors) == 2, "idle occupied Space gradient must expose two color stops")
+ require(is_light_blue(gradient_colors[0]), "idle occupied Space gradient must start with pure light blue")
+ require(is_white(gradient_colors[1]), "idle occupied Space gradient must end with pure white")
fullscreen_segments = [segment for segment in segments if segment.get("type") == "fullscreen"]
require(fullscreen_segments, "multi-display visual fixture must include a fullscreen Space")
for segment in fullscreen_segments:
marker_frame = segment.get("fullscreenMarkerFrame", {})
- require(marker_frame.get("y") == 30, "fullscreen Space marker must keep the previous vertical style")
+ app_frame = segment.get("appFrame", {})
+ marker_center_ratio = segment.get("fullscreenMarkerCenterRatio", 0)
+ marker_mid_y = marker_frame.get("y", 0) + marker_frame.get("height", 0) / 2
+ app_mid_y = app_frame.get("y", 0) + app_frame.get("height", 0) / 2
+ require(0.36 <= marker_center_ratio <= 0.44, "fullscreen Space marker must use adaptive vertical centering")
+ require(abs(marker_mid_y - app_mid_y) <= 2, "fullscreen App label must remain centered in the marker")
print(json.dumps({
"displayGroups": [
--
Gitblit v1.9.3