Reword the windows height management to avoid too big windows.
This commit is contained in:
parent
f715b973ff
commit
8fd2ff3cc4
7 changed files with 71 additions and 35 deletions
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -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,
|
||||
),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -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,
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -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() }
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue