crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

commit e98eaf1d440c1be0bae86cc9d9a35954ab7b6831
parent df7ebce237a6bbb50d070236ee581b10c045f032
Author: Michael Camilleri <[email protected]>
Date:   Fri,  3 Jul 2026 08:22:04 +0900

Pin the grid thumbnail's filled-cell grey across appearances

The Game List thumbnail depicts the grid, which is black-and-white in
every appearance, but its filled cells were tinted with the dynamic
systemGray3. In Dark Mode that colour resolves to a dark grey that is
nearly indistinguishable from the black blocks, so cells the players had
filled in read as blocked squares. This commit pins the fill to a fixed
grey matching systemGray3's light-mode value, so the thumbnail renders
identically in both appearances and the light appearance is unchanged.

Co-Authored-By: Claude Fable 5 <[email protected]>

Diffstat:
MCrossmate/Views/Components/GridThumbnailView.swift | 9++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/Crossmate/Views/Components/GridThumbnailView.swift b/Crossmate/Views/Components/GridThumbnailView.swift @@ -12,6 +12,13 @@ struct GridThumbnailView: View { private let spacing: CGFloat = 0.5 + /// Fill for cells with a letter entered. The thumbnail depicts the grid, + /// which is black-and-white in every appearance, so this stays a fixed + /// gray (systemGray3's light-mode value) rather than a dynamic colour — + /// the dark-mode variant is nearly indistinguishable from the black + /// blocks. + private let filledColor = Color(white: 0.78) + var body: some View { Canvas(rendersAsynchronously: false) { ctx, canvasSize in ctx.fill( @@ -39,7 +46,7 @@ struct GridThumbnailView: View { let y = originY + spacing + CGFloat(r) * (cell + spacing) ctx.fill( Path(CGRect(x: x, y: y, width: cell, height: cell)), - with: .color(cellValue == .filled ? Color(.systemGray3) : .white) + with: .color(cellValue == .filled ? filledColor : .white) ) } }