Seat each hour in its own cell (#113)

The timeline's hour lines become a per-hour grid, in the month grid's visual
language: 24 rounded cells on surfaceContainer, separated by a 2dp gap that
reveals the surface behind them, so the hour boundary is negative space rather
than a stroke. The column's Card takes surface and the container colour moves
onto the cells.

- `HourLines.kt` becomes `HourGrid.kt`: `hourGridCells` draws the cells in the
  same `drawBehind` the lines used, under the blocks and above the column.
- The cell corner is the event chip's 4dp, not the month grid's 12dp, and is
  clamped to half the shorter side so a fit-the-day sliver or a narrow week
  column can't round into a lozenge.
- The hour gutter's label lift comes off its own line height instead of a
  hardcoded -6dp, so label and seam line up at any font scale.
- The preference keeps its stored key and its string keys; only the English
  source text and the Kotlin names change (`showHourLines` → `showHourGrid`).

Block placement is not left untouched, as the issue expected: a block gives up
the same half-gap at each end the cells do, or an on-the-hour event overhangs
the seam into its neighbours' cells. That inset follows through to the drag —
the floating copy takes the same gap off, so it stays the size of the block it
lifted off (#267), and the grab is measured off the placement rather than the
seated position. An end cut at midnight keeps none of it and stays against the
column edge.

Closes #113
This commit is contained in:
2026-09-07 18:19:51 +02:00
parent 60f05a5c65
commit e720fd68ba
17 changed files with 390 additions and 99 deletions
+8
View File
@@ -20,6 +20,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
is not in that row. Event times across the month, week and day views are also
set in a regular weight against the title's, so a time reads as a time rather
than as part of the name next to it ([#219]).
- **The hour lines in week and day view are now an hour grid.** The setting
that drew a faint separator line at each hour now seats every hour in its own
rounded cell, so an hour boundary reads as the seam between two surfaces
rather than a line drawn across one — the same negative space that separates
the month grid's days and the week's columns. An event that starts on the hour
fills its cell instead of overhanging the seam, and one that runs past
midnight still meets the edge of its column ([#113]).
- The calendar titles now shorten instead of being cut off. When the full month
name doesn't fit the top bar, the month and week views fall back to its
three-letter form and the day view drops the weekday, rather than trailing off
@@ -1603,3 +1610,4 @@ automatically, with zero telemetry and no internet permission.
[#248]: https://codeberg.org/jlmakiola/calendula/issues/248
[#253]: https://codeberg.org/jlmakiola/calendula/issues/253
[#273]: https://codeberg.org/jlmakiola/calendula/issues/273
[#113]: https://codeberg.org/jlmakiola/calendula/issues/113