Skip to content

Commit a21b14b

Browse files
committed
library: ListPopup: Fix a positioning issues
1 parent b6e5021 commit a21b14b

File tree

1 file changed

+12
-23
lines changed
  • miuix/src/commonMain/kotlin/top/yukonga/miuix/kmp/basic

1 file changed

+12
-23
lines changed

miuix/src/commonMain/kotlin/top/yukonga/miuix/kmp/basic/ListPopup.kt

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -81,34 +81,23 @@ fun ListPopup(
8181
val density = LocalDensity.current
8282
val layoutDirection = LocalLayoutDirection.current
8383

84-
val displayCutoutPaddings = WindowInsets.displayCutout.asPaddingValues()
85-
val statusBarsPaddings = WindowInsets.statusBars.asPaddingValues()
86-
val navigationBarsPaddings = WindowInsets.navigationBars.asPaddingValues()
87-
val captionBarPaddings = WindowInsets.captionBar.asPaddingValues()
88-
8984
val getWindowSizeState = rememberUpdatedState(getWindowSize())
9085
var windowSize by remember { mutableStateOf(IntSize(getWindowSizeState.value.width, getWindowSizeState.value.height)) }
9186
var parentBounds by remember { mutableStateOf(IntRect.Zero) }
9287

93-
val rememberedWindowBounds = remember(
94-
windowSize,
95-
layoutDirection,
96-
density,
97-
displayCutoutPaddings,
98-
statusBarsPaddings,
99-
navigationBarsPaddings,
100-
captionBarPaddings
101-
) {
88+
val windowBounds by rememberUpdatedState(
10289
with(density) {
10390
IntRect(
104-
left = displayCutoutPaddings.calculateLeftPadding(layoutDirection).roundToPx(),
105-
top = statusBarsPaddings.calculateTopPadding().roundToPx(),
106-
right = windowSize.width - displayCutoutPaddings.calculateRightPadding(layoutDirection).roundToPx(),
107-
bottom = windowSize.height - navigationBarsPaddings.calculateBottomPadding()
108-
.roundToPx() - captionBarPaddings.calculateBottomPadding().roundToPx()
91+
left = WindowInsets.displayCutout.asPaddingValues(density).calculateLeftPadding(layoutDirection).roundToPx(),
92+
top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding().roundToPx(),
93+
right = windowSize.width -
94+
WindowInsets.displayCutout.asPaddingValues(density).calculateRightPadding(layoutDirection).roundToPx(),
95+
bottom = windowSize.height -
96+
WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding().roundToPx() -
97+
WindowInsets.captionBar.asPaddingValues().calculateBottomPadding().roundToPx()
10998
)
11099
}
111-
}
100+
)
112101

113102
var popupContentSize by remember { mutableStateOf(IntSize.Zero) }
114103

@@ -181,7 +170,7 @@ fun ListPopup(
181170
maxHeight,
182171
popupPositionProvider,
183172
parentBounds,
184-
rememberedWindowBounds,
173+
windowBounds,
185174
layoutDirection,
186175
rememberedPopupMargin,
187176
alignment,
@@ -199,7 +188,7 @@ fun ListPopup(
199188
minWidth = if (minWidth.roundToPx() <= windowSize.width) minWidth.roundToPx() else windowSize.width,
200189
minHeight = if (50.dp.roundToPx() <= windowSize.height) 50.dp.roundToPx() else windowSize.height,
201190
maxHeight = maxHeight?.roundToPx()?.coerceAtLeast(50.dp.roundToPx())
202-
?: (rememberedWindowBounds.height - rememberedPopupMargin.top - rememberedPopupMargin.bottom).coerceAtLeast(
191+
?: (windowBounds.height - rememberedPopupMargin.top - rememberedPopupMargin.bottom).coerceAtLeast(
203192
50.dp.roundToPx()
204193
),
205194
maxWidth = if (minWidth.roundToPx() <= windowSize.width) windowSize.width else minWidth.roundToPx()
@@ -212,7 +201,7 @@ fun ListPopup(
212201

213202
val calculatedOffset = popupPositionProvider.calculatePosition(
214203
parentBounds,
215-
rememberedWindowBounds,
204+
windowBounds,
216205
layoutDirection,
217206
measuredSize,
218207
rememberedPopupMargin,

0 commit comments

Comments
 (0)