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