diff --git a/colorpicker/src/commonMain/kotlin/codes/side/colorpicker/ui/GradientTrack.kt b/colorpicker/src/commonMain/kotlin/codes/side/colorpicker/ui/GradientTrack.kt index 6c3d3ff..7e878b6 100644 --- a/colorpicker/src/commonMain/kotlin/codes/side/colorpicker/ui/GradientTrack.kt +++ b/colorpicker/src/commonMain/kotlin/codes/side/colorpicker/ui/GradientTrack.kt @@ -21,12 +21,14 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.drawscope.clipPath +import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import codes.side.colorpicker.theme.ColorPickerDefaults import kotlinx.collections.immutable.ImmutableList +import kotlin.math.ceil // M3 token defaults (from SliderTokens). The handle narrows by this much while pressed; // the same shrink is applied to a custom thumb so the track keeps its M3 feel. @@ -146,7 +148,21 @@ internal fun GradientTrack( clipPath(segmentsPath) { if (checkerboardBrush != null) { - drawRect(brush = checkerboardBrush) + // The shader tiles from the Canvas origin, so a track whose height is not + // a whole number of cells shows a full cell along the top edge and a stub + // along the bottom — at 16dp over 6dp cells that is 6dp against 4dp, on a + // pattern only three rows tall. Shifting the fill up by half the overshoot + // splits the remainder evenly, so both edges show the same sliver. The + // fill is grown by the same amount at each end so it still covers the + // track, and the clip above trims it. + val cell = CheckerboardCellSize.toPx() + val overshoot = ceil(size.height / cell) * cell - size.height + translate(top = -overshoot / 2f) { + drawRect( + brush = checkerboardBrush, + size = Size(size.width, size.height + overshoot), + ) + } } drawRect(brush = brush) } diff --git a/docs/images/cmyk-contextual.png b/docs/images/cmyk-contextual.png index 6e0f071..504e4ba 100644 Binary files a/docs/images/cmyk-contextual.png and b/docs/images/cmyk-contextual.png differ diff --git a/docs/images/cmyk-independent.png b/docs/images/cmyk-independent.png index ffdd75a..9c82313 100644 Binary files a/docs/images/cmyk-independent.png and b/docs/images/cmyk-independent.png differ diff --git a/docs/images/custom-thumb.png b/docs/images/custom-thumb.png index 949c139..df4251a 100644 Binary files a/docs/images/custom-thumb.png and b/docs/images/custom-thumb.png differ diff --git a/docs/images/hsl-contextual.png b/docs/images/hsl-contextual.png index b1488c6..f89bb67 100644 Binary files a/docs/images/hsl-contextual.png and b/docs/images/hsl-contextual.png differ diff --git a/docs/images/hsl-independent.png b/docs/images/hsl-independent.png index d41fcb4..ffd28c1 100644 Binary files a/docs/images/hsl-independent.png and b/docs/images/hsl-independent.png differ diff --git a/docs/images/lab-contextual.png b/docs/images/lab-contextual.png index 8d5f3f8..b7867ee 100644 Binary files a/docs/images/lab-contextual.png and b/docs/images/lab-contextual.png differ diff --git a/docs/images/lab-independent.png b/docs/images/lab-independent.png index 5fb06e1..f7a4c2d 100644 Binary files a/docs/images/lab-independent.png and b/docs/images/lab-independent.png differ diff --git a/docs/images/rgb-contextual.png b/docs/images/rgb-contextual.png index 990adc3..8454de1 100644 Binary files a/docs/images/rgb-contextual.png and b/docs/images/rgb-contextual.png differ diff --git a/docs/images/rgb-independent.png b/docs/images/rgb-independent.png index 70f2810..4262350 100644 Binary files a/docs/images/rgb-independent.png and b/docs/images/rgb-independent.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykContextualPreview_CMYK contextual_9d5e518a_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykContextualPreview_CMYK contextual_9d5e518a_0.png index 6e0f071..504e4ba 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykContextualPreview_CMYK contextual_9d5e518a_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykContextualPreview_CMYK contextual_9d5e518a_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykIndependentPreview_CMYK independent_bcc000ed_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykIndependentPreview_CMYK independent_bcc000ed_0.png index ffdd75a..9c82313 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykIndependentPreview_CMYK independent_bcc000ed_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CmykIndependentPreview_CMYK independent_bcc000ed_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CustomThumbPreview_Custom thumb_a11852cf_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CustomThumbPreview_Custom thumb_a11852cf_0.png index 949c139..df4251a 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CustomThumbPreview_Custom thumb_a11852cf_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/CustomThumbPreview_Custom thumb_a11852cf_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslContextualPreview_HSL contextual_1c21b604_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslContextualPreview_HSL contextual_1c21b604_0.png index b1488c6..f89bb67 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslContextualPreview_HSL contextual_1c21b604_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslContextualPreview_HSL contextual_1c21b604_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslIndependentPreview_HSL independent_76e523f0_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslIndependentPreview_HSL independent_76e523f0_0.png index d41fcb4..ffd28c1 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslIndependentPreview_HSL independent_76e523f0_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/HslIndependentPreview_HSL independent_76e523f0_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabContextualPreview_LAB contextual_525c1e73_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabContextualPreview_LAB contextual_525c1e73_0.png index 8d5f3f8..b7867ee 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabContextualPreview_LAB contextual_525c1e73_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabContextualPreview_LAB contextual_525c1e73_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabIndependentPreview_LAB independent_3ae8c929_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabIndependentPreview_LAB independent_3ae8c929_0.png index 5fb06e1..f7a4c2d 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabIndependentPreview_LAB independent_3ae8c929_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/LabIndependentPreview_LAB independent_3ae8c929_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbContextualPreview_RGB contextual_e033696b_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbContextualPreview_RGB contextual_e033696b_0.png index 990adc3..8454de1 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbContextualPreview_RGB contextual_e033696b_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbContextualPreview_RGB contextual_e033696b_0.png differ diff --git a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbIndependentPreview_RGB independent_fe17b4a4_0.png b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbIndependentPreview_RGB independent_fe17b4a4_0.png index 70f2810..4262350 100644 Binary files a/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbIndependentPreview_RGB independent_fe17b4a4_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/codes/side/colorpicker/screenshot/ColorPickerPreviewsKt/RgbIndependentPreview_RGB independent_fe17b4a4_0.png differ