fix(home): un-clip CoverTile overlay so play button isn't cut off (#1495)
android / Build + lint + test (push) Successful in 3m58s
android / Build + lint + test (push) Successful in 3m58s
The play button overlaid on artist circles sat under the circular frame: CoverTile clipped the Box that held both the artwork and the overlay, so a BottomEnd button on a CircleShape avatar — which falls in the square's corner, outside the circle — got clipped away. Draw the overlay on an outer un-clipped Box; clip only the inner artwork + background to `shape`. Corner-anchored overlays (play button, variant pill) now sit on top of the frame. Bounds/alignment unchanged, so Album and Playlist tiles keep their layout (pill is padding-inset; their play buttons are simply no longer clipped at the corner radius). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,8 +23,12 @@ import com.fabledsword.minstrel.theme.FabledSwordFlatTokens
|
||||
* ServerImage + fallback structure was identical at all three sites.
|
||||
*
|
||||
* [overlay] is a `BoxScope` slot for things drawn on top of the cover
|
||||
* (e.g. the `VariantPill` system-playlist label) — callers can use
|
||||
* `Modifier.align(...)` inside it.
|
||||
* (e.g. the `VariantPill` system-playlist label, the play button) —
|
||||
* callers can use `Modifier.align(...)` inside it. The overlay sits on
|
||||
* an outer, UN-clipped box so corner-anchored widgets are not cut off by
|
||||
* [shape]: a `BottomEnd` play button on a `CircleShape` avatar falls in
|
||||
* the square's corner, outside the circle, and would otherwise be clipped
|
||||
* away. Only the artwork + background are clipped to [shape].
|
||||
*/
|
||||
@Composable
|
||||
fun CoverTile(
|
||||
@@ -38,18 +42,23 @@ fun CoverTile(
|
||||
overlay: @Composable BoxScope.() -> Unit = {},
|
||||
) {
|
||||
Box(
|
||||
modifier = modifier
|
||||
.size(size)
|
||||
.clip(shape)
|
||||
.background(background),
|
||||
modifier = modifier.size(size),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
ServerImage(
|
||||
url = url,
|
||||
contentDescription = contentDescription,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.clip(shape)
|
||||
.background(background),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
fallback()
|
||||
ServerImage(
|
||||
url = url,
|
||||
contentDescription = contentDescription,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) {
|
||||
fallback()
|
||||
}
|
||||
}
|
||||
overlay()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user