Reword the windows height management to avoid too big windows.

This commit is contained in:
Thomas Andres Gomez 2025-02-05 11:39:44 +01:00
parent f715b973ff
commit 8fd2ff3cc4
7 changed files with 71 additions and 35 deletions

View file

@ -25,8 +25,10 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
import androidx.compose.ui.window.ApplicationScope
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.rememberWindowState
@ -40,6 +42,7 @@ import com.pixelized.desktop.lwa.navigation.window.WindowsNavHost
import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetEditWindow
import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetWindow
import com.pixelized.desktop.lwa.navigation.window.destination.RollHistoryWindow
import com.pixelized.desktop.lwa.navigation.window.rememberMaxWindowHeight
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.repository.network.NetworkRepository.Status
import com.pixelized.desktop.lwa.screen.characterSheet.CharacterSheetMainNavHost
@ -52,6 +55,7 @@ import lwacharactersheet.composeapp.generated.resources.network__disconnect__mes
import org.jetbrains.compose.resources.getString
import org.jetbrains.compose.ui.tooling.preview.Preview
import org.koin.compose.koinInject
import java.awt.Toolkit
val LocalWindowController = compositionLocalOf<WindowController> {
error("Local Window Controller is not yet ready")
@ -68,9 +72,11 @@ val LocalErrorSnackHost = compositionLocalOf<SnackbarHostState> {
@Composable
@Preview
fun ApplicationScope.App() {
val maxWindowHeight = rememberMaxWindowHeight()
val snackHostState = remember { SnackbarHostState() }
val errorSnackHostState = remember { SnackbarHostState() }
val windowController = remember { WindowController() }
val windowController = remember { WindowController(maxWindowHeight) }
val keyEventHandlers = remember { mutableStateListOf<KeyEventHandler>() }
CompositionLocalProvider(

View file

@ -9,12 +9,16 @@ import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowState
import androidx.compose.ui.window.rememberWindowState
import com.pixelized.desktop.lwa.composable.key.KeyEventHandler
import com.pixelized.desktop.lwa.composable.key.LocalKeyEventHandlers
import com.pixelized.desktop.lwa.navigation.window.destination.Window
import java.awt.Toolkit
val LocalWindow = compositionLocalOf<Window> {
error("Local Window is not yet ready")
@ -24,7 +28,9 @@ val LocalWindowState = compositionLocalOf<WindowState> {
}
@Stable
class WindowController {
class WindowController(
val maxWindowHeight: Dp,
) {
private val _windows = mutableStateOf<Map<String, Window>>(emptyMap())
val windows: State<Map<String, Window>> get() = _windows
@ -41,6 +47,18 @@ class WindowController {
}
}
@Composable
@Stable
fun rememberMaxWindowHeight(): Dp {
val density = LocalDensity.current
val maxWindowHeight = remember(density) {
val screenSize = Toolkit.getDefaultToolkit().screenSize
val screenHeight = screenSize.height
with(density) { screenHeight.toDp() - 128.dp }
}
return maxWindowHeight
}
@Composable
fun WindowsNavHost(
controller: WindowController,

View file

@ -7,25 +7,26 @@ import com.pixelized.desktop.lwa.navigation.window.WindowController
@Stable
class CharacterSheetEditWindow(
title: String,
val sheetId: String?,
title: String,
size: DpSize,
) : Window(
title = title,
size = size,
) {
companion object {
val size = DpSize(600.dp, 900.dp)
}
}
)
fun WindowController.navigateToCharacterSheetEdit(
title: String,
characterId: String?,
title: String,
) {
showWindow(
window = CharacterSheetEditWindow(
title = title,
sheetId = characterId,
title = title,
size = DpSize(
width = 600.dp,
height = maxWindowHeight,
),
)
)
}

View file

@ -7,28 +7,26 @@ import com.pixelized.desktop.lwa.navigation.window.WindowController
@Stable
class CharacterSheetWindow(
title: String,
val characterId: String,
title: String,
size: DpSize,
) : Window(
title = title,
size = size,
) {
companion object {
val size = DpSize(
width = 400.dp + 64.dp,
height = 900.dp,
)
}
}
)
fun WindowController.navigateToCharacterSheet(
title: String,
characterId: String,
title: String,
) {
showWindow(
window = CharacterSheetWindow(
title = title,
characterId = characterId,
title = title,
size = DpSize(
width = 400.dp + 64.dp,
height = maxWindowHeight,
),
)
)
}

View file

@ -1,21 +1,28 @@
package com.pixelized.desktop.lwa.navigation.window.destination
import androidx.compose.runtime.Stable
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import com.pixelized.desktop.lwa.navigation.window.WindowController
class RollHistoryWindow: Window(
title = "",
@Stable
class RollHistoryWindow(
title: String,
size: DpSize,
) : Window(
title = title,
size = size,
) {
companion object {
val size = DpSize(
width = 400.dp + 64.dp,
height = 900.dp,
)
}
}
)
fun WindowController.navigateToRollHistory() {
showWindow(window = RollHistoryWindow())
fun WindowController.navigateToRollHistory(
title: String = "",
) {
showWindow(
window = RollHistoryWindow(
title = title, size = DpSize(
width = 400.dp + 64.dp,
height = maxWindowHeight,
)
)
)
}

View file

@ -49,10 +49,13 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
import com.pixelized.desktop.lwa.LocalWindowController
import com.pixelized.desktop.lwa.composable.blur.BlurContent
import com.pixelized.desktop.lwa.composable.blur.BlurContentController
@ -83,6 +86,7 @@ import org.jetbrains.compose.resources.getString
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel
import java.awt.Toolkit
@Stable
data class CharacterSheetPageUio(
@ -125,8 +129,9 @@ fun CharacterSheetPage(
rollViewModel: RollViewModel = koinViewModel(),
) {
val windowController = LocalWindowController.current
val window = LocalWindow.current
val screen = LocalScreenController.current
val window = LocalWindow.current
val density = LocalDensity.current
val scope = rememberCoroutineScope()
val blurController = remember { BlurContentController() }

View file

@ -22,6 +22,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import com.pixelized.desktop.lwa.LocalWindowController
import com.pixelized.desktop.lwa.navigation.screen.LocalScreenController
@ -79,8 +80,8 @@ fun MainPage(
},
onCreateCharacter = {
window.navigateToCharacterSheetEdit(
title = runBlocking { getString(Res.string.character_sheet_edit__create__title) },
characterId = null,
title = runBlocking { getString(Res.string.character_sheet_edit__create__title) },
)
},
onRollHistory = {