Skip to content

Commit 1fca1fd

Browse files
authored
Merge pull request #597 from namehillsoftware/bugfix/menu-clipping
[Bugfix] Menu Clipping
2 parents daaa755 + 0a6ab20 commit 1fca1fd

File tree

6 files changed

+54
-22
lines changed

6 files changed

+54
-22
lines changed

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/files/details/FileDetailsView.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import androidx.compose.ui.focus.FocusRequester
5858
import androidx.compose.ui.focus.focusRequester
5959
import androidx.compose.ui.graphics.ColorFilter
6060
import androidx.compose.ui.graphics.asImageBitmap
61+
import androidx.compose.ui.graphics.graphicsLayer
6162
import androidx.compose.ui.input.nestedscroll.nestedScroll
6263
import androidx.compose.ui.layout.ContentScale
6364
import androidx.compose.ui.platform.LocalDensity
@@ -567,8 +568,9 @@ private fun FileDetailsSingleColumn(
567568
min = LocalDensity.current.run { collapsedHeight.toPx() },
568569
max = boxHeightPx
569570
)
571+
val maxMenuHeightPx = LocalDensity.current.remember { maxMenuHeight.toPx() }
570572
val menuHeightScaler = rememberDeferredPreScrollConnectedScaler(
571-
LocalDensity.current.remember { maxMenuHeight.toPx() },
573+
maxMenuHeightPx,
572574
0f
573575
)
574576
val compositeScrollConnection = remember(heightScaler, menuHeightScaler) {
@@ -753,7 +755,11 @@ private fun FileDetailsSingleColumn(
753755
contentAlignment = Alignment.BottomStart
754756
) {
755757
ListMenuRow(
756-
modifier = Modifier.requiredHeight(menuHeight)
758+
modifier = Modifier
759+
.graphicsLayer {
760+
translationY = (menuHeightPx - maxMenuHeightPx) * 0.5f
761+
}
762+
.requiredHeight(menuHeight)
757763
) {
758764
menuIcons()
759765
}

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/files/list/search/SearchFilesView.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import androidx.compose.ui.Modifier
4848
import androidx.compose.ui.draw.clipToBounds
4949
import androidx.compose.ui.focus.FocusRequester
5050
import androidx.compose.ui.graphics.Color
51+
import androidx.compose.ui.graphics.graphicsLayer
5152
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
5253
import androidx.compose.ui.input.InputMode
5354
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -209,8 +210,9 @@ private fun SearchFilesMenu(
209210
searchFilesViewModel: SearchFilesViewModel,
210211
applicationNavigation: NavigateApplication,
211212
playbackServiceController: ControlPlaybackService,
213+
modifier: Modifier = Modifier,
212214
) {
213-
ListMenuRow(modifier = Modifier.fillMaxWidth()) {
215+
ListMenuRow(modifier = Modifier.fillMaxWidth().then(modifier)) {
214216
val modifier = Modifier.requiredWidth(topMenuIconWidth)
215217
val files by searchFilesViewModel.files.subscribeAsState()
216218
val isFileControlsEnabled = files.any()
@@ -464,6 +466,9 @@ private fun SearchFilesList(
464466
searchFilesViewModel,
465467
applicationNavigation,
466468
playbackServiceController,
469+
modifier = Modifier.graphicsLayer {
470+
translationY = (menuHeightValue - rowHeightPx) * 0.5f
471+
}
467472
)
468473
}
469474

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/items/list/ItemListView.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.lasthopesoftware.bluewater.client.browsing.items.list
22

3-
import android.annotation.SuppressLint
43
import android.util.Log
54
import androidx.compose.foundation.background
65
import androidx.compose.foundation.focusGroup
@@ -47,6 +46,7 @@ import androidx.compose.ui.focus.FocusRequester
4746
import androidx.compose.ui.focus.focusProperties
4847
import androidx.compose.ui.focus.focusRequester
4948
import androidx.compose.ui.graphics.Color
49+
import androidx.compose.ui.graphics.graphicsLayer
5050
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
5151
import androidx.compose.ui.input.InputMode
5252
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -603,7 +603,6 @@ fun ItemListView(
603603
}
604604
}
605605

606-
@SuppressLint("UnusedBoxWithConstraintsScope")
607606
@OptIn(ExperimentalCoroutinesApi::class)
608607
@Composable
609608
fun ScreenDimensionsScope.ItemListView(
@@ -873,6 +872,9 @@ fun ScreenDimensionsScope.ItemListView(
873872
applicationNavigation = applicationNavigation,
874873
playbackServiceController = playbackServiceController,
875874
modifier = Modifier
875+
.graphicsLayer {
876+
translationY = (menuHeightValue - topMenuHeightPx) * 0.5f
877+
}
876878
.focusProperties {
877879
down = listFocus
878880
}

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/settings/LibrarySettingsView.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import androidx.compose.ui.Alignment
3838
import androidx.compose.ui.Modifier
3939
import androidx.compose.ui.draw.clipToBounds
4040
import androidx.compose.ui.focus.FocusRequester
41+
import androidx.compose.ui.graphics.graphicsLayer
4142
import androidx.compose.ui.input.nestedscroll.nestedScroll
4243
import androidx.compose.ui.platform.LocalDensity
4344
import androidx.compose.ui.res.painterResource
@@ -1025,6 +1026,9 @@ fun ScreenDimensionsScope.LibrarySettingsView(
10251026
stringResources = stringResources,
10261027
onChangeServerTypeClick = { isSelectingServerType = true },
10271028
modifier = Modifier
1029+
.graphicsLayer {
1030+
translationY = (menuHeightPx - topMenuHeightPx) * 0.5f
1031+
}
10281032
.fillMaxWidth()
10291033
.height(menuHeightDp)
10301034
.clipToBounds()

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/stored/library/items/files/view/ActiveFileDownloadsView.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,10 @@ private val boxHeight = expandedTitleHeight + appBarHeight
9393
@Composable
9494
private fun SyncMenu(
9595
activeFileDownloadsViewModel: ActiveFileDownloadsViewModel,
96+
modifier: Modifier = Modifier,
9697
) {
9798
ListMenuRow(
98-
modifier = Modifier.fillMaxWidth()
99+
modifier = Modifier.fillMaxWidth().then(modifier)
99100
) {
100101
val isSyncing by activeFileDownloadsViewModel.isSyncing.subscribeAsState()
101102
val label = stringResource(
@@ -351,7 +352,13 @@ fun ScreenDimensionsScope.ActiveFileDownloadsView(
351352
.height(menuHeightValueDp)
352353
.clipToBounds()
353354
) {
354-
SyncMenu(activeFileDownloadsViewModel)
355+
SyncMenu(
356+
activeFileDownloadsViewModel,
357+
modifier = Modifier
358+
.graphicsLayer {
359+
translationY = (menuHeightValue - topMenuHeightPx) * 0.5f
360+
}
361+
)
355362
}
356363
}
357364
}

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/settings/ApplicationSettingsView.kt

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import androidx.compose.ui.Alignment
4949
import androidx.compose.ui.Modifier
5050
import androidx.compose.ui.draw.clipToBounds
5151
import androidx.compose.ui.graphics.Color
52+
import androidx.compose.ui.graphics.graphicsLayer
5253
import androidx.compose.ui.input.nestedscroll.nestedScroll
5354
import androidx.compose.ui.layout.onPlaced
5455
import androidx.compose.ui.layout.positionInParent
@@ -176,7 +177,9 @@ fun ThemeSettingsSection(
176177
modifier = Modifier.fillMaxWidth(),
177178
) {
178179
Row(
179-
modifier = standardRowModifier.padding(horizontal = horizontalOptionsPadding).selectableGroup(),
180+
modifier = standardRowModifier
181+
.padding(horizontal = horizontalOptionsPadding)
182+
.selectableGroup(),
180183
horizontalArrangement = Arrangement.SpaceEvenly,
181184
) {
182185
val isLoading by applicationSettingsViewModel.isLoading.subscribeAsState()
@@ -482,12 +485,10 @@ private fun ApplicationSettingsViewVertical(
482485
}
483486
}
484487

485-
val menuHeightDp by LocalDensity.current.remember(menuScaler) { derivedStateOf { menuScaler.valueState.floatValue.toDp() } }
488+
val menuHeightPx by LocalDensity.current.remember(menuScaler) { menuScaler.valueState }
489+
val menuHeightDp by LocalDensity.current.remember { derivedStateOf { menuHeightPx.toDp() } }
486490
val paddingDp by LocalDensity.current.remember(paddingScaler) { derivedStateOf { paddingScaler.valueState.value.toDp() } }
487-
Column(
488-
modifier = Modifier
489-
.padding(top = paddingDp)
490-
) {
491+
Column(modifier = Modifier.padding(top = paddingDp)) {
491492
Row(
492493
modifier = Modifier
493494
.fillMaxWidth()
@@ -499,19 +500,26 @@ private fun ApplicationSettingsViewVertical(
499500
}
500501
}
501502

502-
ApplicationSettingsMenu(
503-
applicationSettingsViewModel,
504-
applicationNavigation = applicationNavigation,
505-
selectedLibraryId = selectedLibraryId,
503+
Box(
506504
modifier = Modifier
507505
.fillMaxWidth()
508506
.height(menuHeightDp)
509507
.background(MaterialTheme.colors.surface)
510-
.clipToBounds(),
511-
onTabChange = {
512-
scrollConnection.goToMax()
513-
}
514-
)
508+
.clipToBounds()
509+
) {
510+
ApplicationSettingsMenu(
511+
applicationSettingsViewModel,
512+
applicationNavigation = applicationNavigation,
513+
selectedLibraryId = selectedLibraryId,
514+
modifier = Modifier
515+
.graphicsLayer {
516+
translationY = (menuHeightPx - expandedMenuHeightPx) * 0.5f
517+
},
518+
onTabChange = {
519+
scrollConnection.goToMax()
520+
}
521+
)
522+
}
515523
}
516524
}
517525
}

0 commit comments

Comments
 (0)