mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-12 03:21:08 +00:00
fix(stores): let a game's description fill the free height of the page (#1493)
Co-authored-by: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
This commit is contained in:
1 parent
7ef52865d2
commit
067f82e5e2
2 files changed
+18
-3
No files matched your search
@@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.compositionLocalOf
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
@@ -37,6 +38,8 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.getValue
|
||||
|
||||
/** A grid of cards with a game page that floods out of the opened card and drains back into it. */
|
||||
internal val LocalDetailFloor = compositionLocalOf<() -> Float> { { Float.MAX_VALUE } }
|
||||
|
||||
@OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class)
|
||||
@Composable
|
||||
internal fun CardDetailHost(
|
||||
@@ -57,6 +60,7 @@ internal fun CardDetailHost(
|
||||
var from by remember { mutableStateOf<Origin?>(null) }
|
||||
var art by remember { mutableStateOf<String?>(null) }
|
||||
var viewportAt by remember { mutableStateOf(Offset.Zero) }
|
||||
var viewportH by remember { mutableStateOf(0) }
|
||||
LaunchedEffect(open) {
|
||||
if (open != null) {
|
||||
val mark = StoresMotion.takeCard(open)
|
||||
@@ -83,7 +87,7 @@ internal fun CardDetailHost(
|
||||
val fade = with(density) { 14.dp.toPx() }
|
||||
Box(
|
||||
modifier.clipToBounds()
|
||||
.onGloballyPositioned { viewportAt = it.positionInRoot() }
|
||||
.onGloballyPositioned { viewportAt = it.positionInRoot(); viewportH = it.size.height }
|
||||
.graphicsLayer { compositingStrategy = androidx.compose.ui.graphics.CompositingStrategy.Offscreen }
|
||||
.drawWithContent {
|
||||
drawContent()
|
||||
@@ -114,7 +118,10 @@ internal fun CardDetailHost(
|
||||
.onFocusChanged { onDetailFocus(it.hasFocus) }
|
||||
.focusProperties { exit = { if (coveringNow.value && Steps.step == null && StoresMotion.step == null) FocusRequester.Cancel else FocusRequester.Default } }
|
||||
.focusGroup(),
|
||||
) { detail(key) }
|
||||
) {
|
||||
val floor = { viewportAt.y + viewportH - with(density) { 16.dp.toPx() } - detailScroll.value }
|
||||
CompositionLocalProvider(LocalDetailFloor provides floor) { detail(key) }
|
||||
}
|
||||
}
|
||||
}
|
||||
val origin = from
|
||||
|
||||
@@ -56,6 +56,8 @@ import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.layout.boundsInRoot
|
||||
import androidx.compose.ui.layout.onGloballyPositioned
|
||||
import androidx.compose.ui.layout.positionInRoot
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.testTag
|
||||
@@ -599,7 +601,13 @@ private fun AboutTab(developer: String, publisher: String, releaseDate: String,
|
||||
val parts = listOf(developer, publisher, com.droiddeck.launcher.stores.GameFacts.releaseLabel(releaseDate).orEmpty()).filter { it.isNotBlank() }.distinct()
|
||||
Text(parts.joinToString(" · "), fontSize = 13.sp, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.readable())
|
||||
}
|
||||
if (description.isNotBlank()) StoreAbout(description, AboutHeight, Modifier.fillMaxWidth())
|
||||
if (description.isNotBlank()) {
|
||||
val floor = LocalDetailFloor.current
|
||||
val density = LocalDensity.current
|
||||
var room by remember { mutableStateOf(AboutHeight) }
|
||||
val fill = Modifier.onGloballyPositioned { c -> room = maxOf(AboutHeight, with(density) { (floor() - c.positionInRoot().y).toDp() - 14.dp }) }
|
||||
StoreAbout(description, room, Modifier.fillMaxWidth().then(fill))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user