From 726dbbbaf3f5f293d8048b54cb757062fa8866c9 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Mon, 9 Nov 2026 18:51:00 +0100 Subject: [PATCH] Month widget: require font scale for lane fitting (#491) --- .../calendula/widget/month/MonthGrid.kt | 5 ++--- .../calendula/widget/month/MonthGridTest.kt | 16 ++++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/widget/month/MonthGrid.kt b/app/src/main/java/de/jeanlucmakiola/calendula/widget/month/MonthGrid.kt index 80acdbe..23783c1 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/widget/month/MonthGrid.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/widget/month/MonthGrid.kt @@ -76,7 +76,7 @@ internal data class LaneFit(val lanes: Int, val compact: Boolean = false) * [MAX_LANES] so a tall widget's payload stays bounded (#214). A row too short * for one full lane still gets a compact one when its text fits at [fontScale] (#491). */ -internal fun lanesFitting(weekHeight: Dp, fontScale: Float = 1f): LaneFit { +internal fun lanesFitting(weekHeight: Dp, fontScale: Float): LaneFit { val room = weekHeight.value - DAY_ROW_DP - LANES_TOP_DP val full = (room / LANE_ROW_DP).toInt().coerceIn(0, MAX_LANES) val compactFits = room >= COMPACT_LANE_ROW_DP && fontScale <= COMPACT_MAX_FONT_SCALE @@ -90,8 +90,7 @@ internal fun lanesFitting(weekHeight: Dp, fontScale: Float = 1f): LaneFit { */ internal fun fitWeeks(weeks: List, fit: LaneFit): List = weeks.map { week -> val lanes = fit.lanes - if (lanes == 0) return@map WeekLayout(week, laneCap = 0, showsOverflow = false) - if (fit.compact) return@map WeekLayout(week, laneCap = lanes, showsOverflow = false, compact = true) + if (lanes == 0 || fit.compact) return@map WeekLayout(week, laneCap = lanes, showsOverflow = false, compact = fit.compact) val needed = WeekLayout(week, UNCAPPED_LANES).usedLanes WeekLayout(week, if (needed <= lanes) lanes else lanes - 1) } diff --git a/app/src/test/java/de/jeanlucmakiola/calendula/widget/month/MonthGridTest.kt b/app/src/test/java/de/jeanlucmakiola/calendula/widget/month/MonthGridTest.kt index d861769..c336b50 100644 --- a/app/src/test/java/de/jeanlucmakiola/calendula/widget/month/MonthGridTest.kt +++ b/app/src/test/java/de/jeanlucmakiola/calendula/widget/month/MonthGridTest.kt @@ -56,17 +56,17 @@ class MonthGridTest { @Test fun `a taller week fits more lanes`() { - assertThat(lanesFitting(19.dp)).isEqualTo(LaneFit(0)) - assertThat(lanesFitting(50.dp)).isEqualTo(LaneFit(2)) - assertThat(lanesFitting(100.dp)).isEqualTo(LaneFit(5)) + assertThat(lanesFitting(19.dp, fontScale = 1f)).isEqualTo(LaneFit(0)) + assertThat(lanesFitting(50.dp, fontScale = 1f)).isEqualTo(LaneFit(2)) + assertThat(lanesFitting(100.dp, fontScale = 1f)).isEqualTo(LaneFit(5)) } @Test fun `a row too short for a full lane gets a compact one`() { - assertThat(lanesFitting(34.dp)).isEqualTo(LaneFit(1, compact = true)) - assertThat(lanesFitting(32.dp)).isEqualTo(LaneFit(1, compact = true)) - assertThat(lanesFitting(31.dp)).isEqualTo(LaneFit(0)) - assertThat(lanesFitting(35.dp)).isEqualTo(LaneFit(1)) + assertThat(lanesFitting(34.dp, fontScale = 1f)).isEqualTo(LaneFit(1, compact = true)) + assertThat(lanesFitting(32.dp, fontScale = 1f)).isEqualTo(LaneFit(1, compact = true)) + assertThat(lanesFitting(31.dp, fontScale = 1f)).isEqualTo(LaneFit(0)) + assertThat(lanesFitting(35.dp, fontScale = 1f)).isEqualTo(LaneFit(1)) } @Test @@ -89,7 +89,7 @@ class MonthGridTest { @Test fun `lanes stop at the cap however tall the week`() { - assertThat(lanesFitting(1000.dp)).isEqualTo(LaneFit(MAX_LANES)) + assertThat(lanesFitting(1000.dp, fontScale = 1f)).isEqualTo(LaneFit(MAX_LANES)) } @Test