| | |
| | | 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", []) |
| | |
| | | ] |
| | | 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), |
| | | all(segment.get("backgroundKind") == "clear" for segment in idle_empty_segments), |
| | | "idle empty Spaces must not keep a dirty 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_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": [ |