From 0653effb1787abf26820ada992582a142e50cf89 Mon Sep 17 00:00:00 2001 From: Maxwell Metzger Mitchell <60010512+maxmmitchell@users.noreply.github.com> Date: Fri, 8 May 2026 18:07:02 +0000 Subject: [PATCH 1/2] Add emoji highlighter --- .../core/data/SerializedInkDataClasses.kt | 3 + .../core/ui/CahierTextureBitmapStore.kt | 5 +- .../com/example/cahier/core/ui/Converters.kt | 3 + .../brushdesigner/ui/BrushDesignerTopBar.kt | 48 +++++++++++- .../cahier/features/drawing/DrawingToolbox.kt | 73 +++++++++++++++++- .../viewmodel/DrawingCanvasViewModel.kt | 10 ++- app/src/main/res/drawable/emoji_heart.png | Bin 0 -> 13954 bytes app/src/main/res/drawable/emoji_poop.png | Bin 0 -> 27303 bytes app/src/main/res/drawable/emoji_star.png | Bin 0 -> 16097 bytes app/src/main/res/drawable/ic_emoji_heart.xml | 9 +++ .../res/drawable/ic_emoji_highlighter.xml | 9 +++ app/src/main/res/drawable/ic_emoji_poop.xml | 11 +++ app/src/main/res/drawable/ic_emoji_star.xml | 9 +++ app/src/main/res/values/strings.xml | 4 + 14 files changed, 177 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/drawable/emoji_heart.png create mode 100644 app/src/main/res/drawable/emoji_poop.png create mode 100644 app/src/main/res/drawable/emoji_star.png create mode 100644 app/src/main/res/drawable/ic_emoji_heart.xml create mode 100644 app/src/main/res/drawable/ic_emoji_highlighter.xml create mode 100644 app/src/main/res/drawable/ic_emoji_poop.xml create mode 100644 app/src/main/res/drawable/ic_emoji_star.xml diff --git a/app/src/main/java/com/example/cahier/core/data/SerializedInkDataClasses.kt b/app/src/main/java/com/example/cahier/core/data/SerializedInkDataClasses.kt index 9bd89177..596ff063 100644 --- a/app/src/main/java/com/example/cahier/core/data/SerializedInkDataClasses.kt +++ b/app/src/main/java/com/example/cahier/core/data/SerializedInkDataClasses.kt @@ -63,4 +63,7 @@ enum class SerializedStockBrush { PressurePenLatest, HighlighterLatest, DashedLineLatest, + EmojiHighlighterHeartLatest, + EmojiHighlighterStarLatest, + EmojiHighlighterPoopLatest, } \ No newline at end of file diff --git a/app/src/main/java/com/example/cahier/core/ui/CahierTextureBitmapStore.kt b/app/src/main/java/com/example/cahier/core/ui/CahierTextureBitmapStore.kt index 998fc362..2712b9b9 100644 --- a/app/src/main/java/com/example/cahier/core/ui/CahierTextureBitmapStore.kt +++ b/app/src/main/java/com/example/cahier/core/ui/CahierTextureBitmapStore.kt @@ -31,7 +31,10 @@ class CahierTextureBitmapStore(context: Context) : TextureBitmapStore { private val textureResources: Map = mapOf( "music-clef-g" to R.drawable.music_clef_g, - "music-note-sixteenth" to R.drawable.music_note_sixteenth + "music-note-sixteenth" to R.drawable.music_note_sixteenth, + "emoji-heart" to R.drawable.emoji_heart, + "emoji-star" to R.drawable.emoji_star, + "emoji-poop" to R.drawable.emoji_poop, ) private val loadedBitmaps = mutableMapOf() diff --git a/app/src/main/java/com/example/cahier/core/ui/Converters.kt b/app/src/main/java/com/example/cahier/core/ui/Converters.kt index d15b2a8e..0f014325 100644 --- a/app/src/main/java/com/example/cahier/core/ui/Converters.kt +++ b/app/src/main/java/com/example/cahier/core/ui/Converters.kt @@ -49,6 +49,9 @@ class Converters { StockBrushes.pressurePen() to SerializedStockBrush.PressurePenLatest, StockBrushes.highlighter() to SerializedStockBrush.HighlighterLatest, StockBrushes.dashedLine() to SerializedStockBrush.DashedLineLatest, + StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true) to SerializedStockBrush.EmojiHighlighterHeartLatest, + StockBrushes.emojiHighlighter("emoji-star", showMiniEmojiTrail = true) to SerializedStockBrush.EmojiHighlighterStarLatest, + StockBrushes.emojiHighlighter("emoji-poop", showMiniEmojiTrail = true) to SerializedStockBrush.EmojiHighlighterPoopLatest, ) private val enumToStockBrush = diff --git a/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt b/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt index 2136e5eb..393bb364 100644 --- a/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt +++ b/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt @@ -48,7 +48,9 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.PopupProperties import androidx.ink.brush.BrushFamily import androidx.ink.brush.StockBrushes import com.example.cahier.R @@ -140,6 +142,7 @@ private fun BrushLibraryMenu( R.string.marker to StockBrushes.marker(), R.string.pressure_pen to StockBrushes.pressurePen(), R.string.dashed_line to StockBrushes.dashedLine(), + R.string.emoji_highlighter to StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true), ) } @@ -159,7 +162,7 @@ private fun BrushLibraryMenu( onClick = {}, enabled = false ) - stockBrushes.forEach { (nameResId, brushFamily) -> + stockBrushes.filter { it.first != R.string.emoji_highlighter }.forEach { (nameResId, brushFamily) -> DropdownMenuItem( text = { Text(stringResource(nameResId)) }, onClick = { @@ -168,6 +171,49 @@ private fun BrushLibraryMenu( } ) } + + var showEmojiSubMenu by remember { mutableStateOf(false) } + + Box { + DropdownMenuItem( + text = { Text(stringResource(R.string.emoji_highlighter)) }, + trailingIcon = { + Text(text = if (showEmojiSubMenu) "▶" else "▼") + }, + onClick = { showEmojiSubMenu = true } + ) + DropdownMenu( + expanded = showEmojiSubMenu, + onDismissRequest = { showEmojiSubMenu = false }, + offset = DpOffset(x = 166.dp, y = (-56).dp), + properties = PopupProperties(focusable = true) + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.emoji_heart)) }, + onClick = { + onLoadBrush(StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true)) + showEmojiSubMenu = false + expanded = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.emoji_star)) }, + onClick = { + onLoadBrush(StockBrushes.emojiHighlighter("emoji-star", showMiniEmojiTrail = true)) + showEmojiSubMenu = false + expanded = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.emoji_poop)) }, + onClick = { + onLoadBrush(StockBrushes.emojiHighlighter("emoji-poop", showMiniEmojiTrail = true)) + showEmojiSubMenu = false + expanded = false + } + ) + } + } if (cahierBrushes.isNotEmpty()) { DropdownMenuItem( diff --git a/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt b/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt index ef82901b..8ce60ce0 100644 --- a/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt +++ b/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt @@ -42,6 +42,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue @@ -49,6 +50,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.window.PopupProperties import androidx.ink.brush.BrushFamily @@ -431,9 +433,14 @@ fun BrushesDropdownMenu( customBrushes: List, modifier: Modifier = Modifier ) { + var showEmojiSubMenu by remember { mutableStateOf(false) } + DropdownMenu( expanded = expanded, - onDismissRequest = onDismissRequest, + onDismissRequest = { + onDismissRequest() + showEmojiSubMenu = false + }, properties = PopupProperties(focusable = true), modifier = modifier ) { @@ -477,6 +484,70 @@ fun BrushesDropdownMenu( }, onClick = { onBrushChange(StockBrushes.dashedLine()) } ) + Box { + DropdownMenuItem( + text = { Text(text = stringResource(R.string.emoji_highlighter)) }, + leadingIcon = { + Icon( + painter = painterResource(R.drawable.ic_emoji_highlighter), + contentDescription = stringResource(R.string.emoji_highlighter) + ) + }, + trailingIcon = { + Text(text = if (showEmojiSubMenu) "▶" else "▼") + }, + onClick = { showEmojiSubMenu = true } + ) + DropdownMenu( + expanded = showEmojiSubMenu, + onDismissRequest = { showEmojiSubMenu = false }, + offset = DpOffset(x = 202.dp, y = (-56).dp), + properties = PopupProperties(focusable = true) + ) { + DropdownMenuItem( + text = { Text(text = stringResource(R.string.emoji_heart)) }, + leadingIcon = { + Icon( + painter = painterResource(R.drawable.ic_emoji_heart), + contentDescription = stringResource(R.string.emoji_heart) + ) + }, + onClick = { + onBrushChange(StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true)) + showEmojiSubMenu = false + onDismissRequest() + } + ) + DropdownMenuItem( + text = { Text(text = stringResource(R.string.emoji_star)) }, + leadingIcon = { + Icon( + painter = painterResource(R.drawable.ic_emoji_star), + contentDescription = stringResource(R.string.emoji_star) + ) + }, + onClick = { + onBrushChange(StockBrushes.emojiHighlighter("emoji-star", showMiniEmojiTrail = true)) + showEmojiSubMenu = false + onDismissRequest() + } + ) + DropdownMenuItem( + text = { Text(text = stringResource(R.string.emoji_poop)) }, + leadingIcon = { + Icon( + painter = painterResource(R.drawable.ic_emoji_poop), + contentDescription = stringResource(R.string.emoji_poop) + ) + }, + onClick = { + onBrushChange(StockBrushes.emojiHighlighter("emoji-poop", showMiniEmojiTrail = true)) + showEmojiSubMenu = false + onDismissRequest() + } + ) + } + } if (customBrushes.isNotEmpty()) { HorizontalDivider() Text( diff --git a/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt b/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt index f8c87393..df5e9bb9 100644 --- a/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt +++ b/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt @@ -375,10 +375,12 @@ class DrawingCanvasViewModel @Inject constructor( isBrushSelectedInSession = true _selectedBrush.update { currentBrush -> val newBrush = currentBrush.copy(family = brushFamily) - val colorToApply = if (newBrush.family == StockBrushes.highlighter()) { - newBrush.composeColor.copy(alpha = HIGHLIGHTER_ALPHA) - } else { - newBrush.composeColor.copy(alpha = 1f) + val colorToApply = when(newBrush.family) { + StockBrushes.highlighter() -> newBrush.composeColor.copy(alpha = HIGHLIGHTER_ALPHA) + StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true) -> Color(0xFF45CA).copy(alpha = HIGHLIGHTER_ALPHA) + StockBrushes.emojiHighlighter("emoji-poop", showMiniEmojiTrail = true) -> Color(0x783013).copy(alpha = HIGHLIGHTER_ALPHA) + StockBrushes.emojiHighlighter("emoji-star", showMiniEmojiTrail = true) -> Color(0xFFE100).copy(alpha = HIGHLIGHTER_ALPHA) + else -> newBrush.composeColor.copy(alpha = 1f) } newBrush.copyWithComposeColor(colorToApply) } diff --git a/app/src/main/res/drawable/emoji_heart.png b/app/src/main/res/drawable/emoji_heart.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d96d2eb50a07398a6a678cb8b5f034b1324d90 GIT binary patch literal 13954 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_emoji_heart.xml b/app/src/main/res/drawable/ic_emoji_heart.xml new file mode 100644 index 00000000..c9de8483 --- /dev/null +++ b/app/src/main/res/drawable/ic_emoji_heart.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_emoji_highlighter.xml b/app/src/main/res/drawable/ic_emoji_highlighter.xml new file mode 100644 index 00000000..684e2565 --- /dev/null +++ b/app/src/main/res/drawable/ic_emoji_highlighter.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_emoji_poop.xml b/app/src/main/res/drawable/ic_emoji_poop.xml new file mode 100644 index 00000000..05abf82a --- /dev/null +++ b/app/src/main/res/drawable/ic_emoji_poop.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_emoji_star.xml b/app/src/main/res/drawable/ic_emoji_star.xml new file mode 100644 index 00000000..be0426d5 --- /dev/null +++ b/app/src/main/res/drawable/ic_emoji_star.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7c9403b4..009423f0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,10 @@ Marker Highlighter Dashed line + Emoji Highlighter + Heart Emoji + Star Emoji + Poop Emoji Note image preview Drawing note indicator From 4b4d9fd85e1fd25669e79444cc044664cbdd146d Mon Sep 17 00:00:00 2001 From: Maxwell Metzger Mitchell <60010512+maxmmitchell@users.noreply.github.com> Date: Fri, 8 May 2026 18:57:38 +0000 Subject: [PATCH 2/2] Gemini comments --- .../brushdesigner/ui/BrushDesignerTopBar.kt | 12 ++++- .../cahier/features/drawing/DrawingToolbox.kt | 49 +++++++++++-------- .../viewmodel/DrawingCanvasViewModel.kt | 35 ++++++++----- app/src/main/res/drawable/ic_emoji_poop.xml | 2 +- 4 files changed, 62 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt b/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt index 393bb364..72b4c3fb 100644 --- a/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt +++ b/app/src/main/java/com/example/cahier/developer/brushdesigner/ui/BrushDesignerTopBar.kt @@ -44,7 +44,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow @@ -173,8 +175,14 @@ private fun BrushLibraryMenu( } var showEmojiSubMenu by remember { mutableStateOf(false) } + var itemWidth by remember { mutableStateOf(0) } + var itemHeight by remember { mutableStateOf(0) } + val density = LocalDensity.current - Box { + Box(modifier = Modifier.onSizeChanged { + itemWidth = it.width + itemHeight = it.height + }) { DropdownMenuItem( text = { Text(stringResource(R.string.emoji_highlighter)) }, trailingIcon = { @@ -185,7 +193,7 @@ private fun BrushLibraryMenu( DropdownMenu( expanded = showEmojiSubMenu, onDismissRequest = { showEmojiSubMenu = false }, - offset = DpOffset(x = 166.dp, y = (-56).dp), + offset = DpOffset(x = density.run { itemWidth.toDp() }, y = density.run { -itemHeight.toDp() }), properties = PopupProperties(focusable = true) ) { DropdownMenuItem( diff --git a/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt b/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt index 8ce60ce0..a433d36b 100644 --- a/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt +++ b/app/src/main/java/com/example/cahier/features/drawing/DrawingToolbox.kt @@ -48,6 +48,8 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpOffset @@ -484,26 +486,33 @@ fun BrushesDropdownMenu( }, onClick = { onBrushChange(StockBrushes.dashedLine()) } ) - Box { - DropdownMenuItem( - text = { Text(text = stringResource(R.string.emoji_highlighter)) }, - leadingIcon = { - Icon( - painter = painterResource(R.drawable.ic_emoji_highlighter), - contentDescription = stringResource(R.string.emoji_highlighter) - ) - }, - trailingIcon = { - Text(text = if (showEmojiSubMenu) "▶" else "▼") - }, - onClick = { showEmojiSubMenu = true } - ) - DropdownMenu( - expanded = showEmojiSubMenu, - onDismissRequest = { showEmojiSubMenu = false }, - offset = DpOffset(x = 202.dp, y = (-56).dp), - properties = PopupProperties(focusable = true) - ) { + var itemWidth by remember { mutableStateOf(0) } + var itemHeight by remember { mutableStateOf(0) } + val density = LocalDensity.current + + Box(modifier = Modifier.onSizeChanged { + itemWidth = it.width + itemHeight = it.height + }) { + DropdownMenuItem( + text = { Text(text = stringResource(R.string.emoji_highlighter)) }, + leadingIcon = { + Icon( + painter = painterResource(R.drawable.ic_emoji_highlighter), + contentDescription = stringResource(R.string.emoji_highlighter) + ) + }, + trailingIcon = { + Text(text = if (showEmojiSubMenu) "▶" else "▼") + }, + onClick = { showEmojiSubMenu = true } + ) + DropdownMenu( + expanded = showEmojiSubMenu, + onDismissRequest = { showEmojiSubMenu = false }, + offset = DpOffset(x = density.run { itemWidth.toDp() }, y = density.run { -itemHeight.toDp() }), + properties = PopupProperties(focusable = true) + ) { DropdownMenuItem( text = { Text(text = stringResource(R.string.emoji_heart)) }, leadingIcon = { diff --git a/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt b/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt index df5e9bb9..8104b241 100644 --- a/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt +++ b/app/src/main/java/com/example/cahier/features/drawing/viewmodel/DrawingCanvasViewModel.kt @@ -88,6 +88,11 @@ class DrawingCanvasViewModel @Inject constructor( private val currentNightMode = AppCompatDelegate.getDefaultNightMode() + private val heartHighlighter = StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true) + private val poopHighlighter = StockBrushes.emojiHighlighter("emoji-poop", showMiniEmojiTrail = true) + private val starHighlighter = StockBrushes.emojiHighlighter("emoji-star", showMiniEmojiTrail = true) + private val highlighter = StockBrushes.highlighter() + private val _defaultBrush = MutableStateFlow( Brush.createWithComposeColor( family = StockBrushes.pressurePen(), @@ -376,11 +381,11 @@ class DrawingCanvasViewModel @Inject constructor( _selectedBrush.update { currentBrush -> val newBrush = currentBrush.copy(family = brushFamily) val colorToApply = when(newBrush.family) { - StockBrushes.highlighter() -> newBrush.composeColor.copy(alpha = HIGHLIGHTER_ALPHA) - StockBrushes.emojiHighlighter("emoji-heart", showMiniEmojiTrail = true) -> Color(0xFF45CA).copy(alpha = HIGHLIGHTER_ALPHA) - StockBrushes.emojiHighlighter("emoji-poop", showMiniEmojiTrail = true) -> Color(0x783013).copy(alpha = HIGHLIGHTER_ALPHA) - StockBrushes.emojiHighlighter("emoji-star", showMiniEmojiTrail = true) -> Color(0xFFE100).copy(alpha = HIGHLIGHTER_ALPHA) - else -> newBrush.composeColor.copy(alpha = 1f) + highlighter -> newBrush.composeColor.copy(alpha = HIGHLIGHTER_ALPHA) + heartHighlighter -> Color(0xFFFF45CA).copy(alpha = HIGHLIGHTER_ALPHA) + poopHighlighter -> Color(0xFF783013).copy(alpha = HIGHLIGHTER_ALPHA) + starHighlighter -> Color(0xFFFFE100).copy(alpha = HIGHLIGHTER_ALPHA) + else -> newBrush.composeColor.copy(alpha = 1f) } newBrush.copyWithComposeColor(colorToApply) } @@ -390,10 +395,12 @@ class DrawingCanvasViewModel @Inject constructor( isBrushSelectedInSession = true _selectedBrush.update { currentBrush -> val newBrush = currentBrush.copy(family = brushFamily, size = size) - val colorToApply = if (newBrush.family == StockBrushes.highlighter()) { - newBrush.composeColor.copy(alpha = HIGHLIGHTER_ALPHA) - } else { - newBrush.composeColor.copy(alpha = 1f) + val colorToApply = when(newBrush.family) { + highlighter -> newBrush.composeColor.copy(alpha = HIGHLIGHTER_ALPHA) + heartHighlighter -> Color(0xFFFF45CA).copy(alpha = HIGHLIGHTER_ALPHA) + poopHighlighter -> Color(0xFF783013).copy(alpha = HIGHLIGHTER_ALPHA) + starHighlighter -> Color(0xFFFFE100).copy(alpha = HIGHLIGHTER_ALPHA) + else -> newBrush.composeColor.copy(alpha = 1f) } newBrush.copyWithComposeColor(colorToApply) } @@ -402,10 +409,12 @@ class DrawingCanvasViewModel @Inject constructor( fun changeBrushColor(color: Color) { isBrushSelectedInSession = true _selectedBrush.update { currentBrush -> - val colorToApply = if (currentBrush.family == StockBrushes.highlighter()) { - color.copy(alpha = HIGHLIGHTER_ALPHA) - } else { - color.copy(alpha = 1f) + val colorToApply = when(currentBrush.family) { + heartHighlighter, + poopHighlighter, + starHighlighter, + highlighter -> color.copy(alpha = HIGHLIGHTER_ALPHA) + else -> color.copy(alpha = 1f) } currentBrush.copyWithComposeColor(color = colorToApply) } diff --git a/app/src/main/res/drawable/ic_emoji_poop.xml b/app/src/main/res/drawable/ic_emoji_poop.xml index 05abf82a..b7bbb262 100644 --- a/app/src/main/res/drawable/ic_emoji_poop.xml +++ b/app/src/main/res/drawable/ic_emoji_poop.xml @@ -6,6 +6,6 @@