feat: m3e for the colour picker

This commit is contained in:
infi 2026-05-21 20:11:29 +02:00
parent b9033bafe0
commit 4ad4b7f42e
3 changed files with 46 additions and 36 deletions

View File

@ -23,19 +23,17 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonGroup
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.SegmentedButton
import androidx.compose.material3.SingleChoiceSegmentedButtonRow
import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.SliderState
@ -54,11 +52,11 @@ import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.ShaderBrush
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import chat.stoat.R
@ -264,7 +262,10 @@ vec4 main(vec2 fragCoord) {
}
"""
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@OptIn(
ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class,
ExperimentalMaterial3ExpressiveApi::class
)
@Composable
fun ColumnScope.ColourPickerSheet(
initialValue: Int,
@ -303,34 +304,32 @@ fun ColumnScope.ColourPickerSheet(
.padding(horizontal = 16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
SingleChoiceSegmentedButtonRow(Modifier.fillMaxWidth()) {
SegmentedButton(
selected = mode == ColourPickerMode.Sliders,
onClick = { mode = ColourPickerMode.Sliders },
shape = CircleShape.copy(
topEnd = CornerSize(0),
bottomEnd = CornerSize(0)
)
) {
Text(stringResource(R.string.colour_picker_mode_sliders))
}
SegmentedButton(
selected = mode == ColourPickerMode.Palette,
onClick = { mode = ColourPickerMode.Palette },
shape = RectangleShape
) {
Text(stringResource(R.string.colour_picker_mode_palette))
}
SegmentedButton(
selected = mode == ColourPickerMode.Hex,
onClick = { mode = ColourPickerMode.Hex },
shape = CircleShape.copy(
topStart = CornerSize(0),
bottomStart = CornerSize(0)
)
) {
Text(stringResource(R.string.colour_picker_hex))
}
val slidersLabel = stringResource(R.string.colour_picker_mode_sliders)
val paletteLabel = stringResource(R.string.colour_picker_mode_palette)
val hexLabel = stringResource(R.string.colour_picker_hex)
ButtonGroup(
modifier = Modifier.fillMaxWidth(),
overflowIndicator = {}
) {
toggleableItem(
weight = 1f,
checked = mode == ColourPickerMode.Sliders,
onCheckedChange = { mode = ColourPickerMode.Sliders },
label = slidersLabel
)
toggleableItem(
weight = 1f,
checked = mode == ColourPickerMode.Palette,
onCheckedChange = { mode = ColourPickerMode.Palette },
label = paletteLabel
)
toggleableItem(
weight = 1f,
checked = mode == ColourPickerMode.Hex,
onCheckedChange = { mode = ColourPickerMode.Hex },
label = hexLabel
)
}
Spacer(Modifier.height(16.dp))
@ -672,7 +671,7 @@ fun ColumnScope.ColourPickerSheet(
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
TextButton(onClick = onUseDefaultColour, Modifier.fillMaxWidth()) {
Icon(Icons.Default.CheckCircle, null)
Icon(painter = painterResource(R.drawable.ic_undo_24dp), null)
Spacer(Modifier.width(8.dp))
Text(stringResource(R.string.colour_picker_use_default))
}

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M280,760L280,680L564,680Q627,680 673.5,640Q720,600 720,540Q720,480 673.5,440Q627,400 564,400L312,400L416,504L360,560L160,360L360,160L416,216L312,320L564,320Q661,320 730.5,383Q800,446 800,540Q800,634 730.5,697Q661,760 564,760L280,760Z"/>
</vector>

View File

@ -595,7 +595,7 @@
<string name="colour_picker_hex_use">Use</string>
<string name="colour_picker_alpha">Alpha</string>
<string name="colour_picker_preview">Preview</string>
<string name="colour_picker_use_default">Default</string>
<string name="colour_picker_use_default">Use Default</string>
<string name="colour_picker_cancel">Cancel</string>
<string name="colour_picker_apply">Apply</string>