Add currency tooltip in chat / character inventory.
This commit is contained in:
parent
a2bfd6d775
commit
a92def2529
7 changed files with 174 additions and 46 deletions
|
|
@ -40,10 +40,8 @@ import androidx.compose.ui.input.key.Key
|
|||
import androidx.compose.ui.input.key.KeyEventType
|
||||
import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.DpSize
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.pixelized.desktop.lwa.ui.composable.character.LwaDialog
|
||||
import com.pixelized.desktop.lwa.ui.composable.decoratedBox.DecoratedBox
|
||||
import com.pixelized.desktop.lwa.ui.composable.key.KeyHandler
|
||||
|
|
|
|||
|
|
@ -0,0 +1,125 @@
|
|||
package com.pixelized.desktop.lwa.ui.composable.currency
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.TooltipPlacement
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.DpSize
|
||||
import androidx.compose.ui.unit.LayoutDirection
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.pixelized.desktop.lwa.ui.composable.tooltip.TooltipDefault
|
||||
import com.pixelized.desktop.lwa.ui.composable.tooltip.TooltipLayout
|
||||
import com.pixelized.desktop.lwa.ui.theme.lwa
|
||||
import lwacharactersheet.composeapp.generated.resources.Res
|
||||
import lwacharactersheet.composeapp.generated.resources.generic__copper__singular
|
||||
import lwacharactersheet.composeapp.generated.resources.generic__gold__singular
|
||||
import lwacharactersheet.composeapp.generated.resources.generic__silver__singular
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_copper_32px
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_gold_32px
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_silver_32px
|
||||
import org.jetbrains.compose.resources.DrawableResource
|
||||
import org.jetbrains.compose.resources.StringResource
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
|
||||
@Stable
|
||||
sealed class CurrencyUio(
|
||||
val icon: DrawableResource,
|
||||
val tooltip: StringResource,
|
||||
) {
|
||||
@Stable
|
||||
data object Gold : CurrencyUio(
|
||||
icon = Res.drawable.ic_gold_32px,
|
||||
tooltip = Res.string.generic__gold__singular,
|
||||
)
|
||||
|
||||
@Stable
|
||||
data object Silver : CurrencyUio(
|
||||
icon = Res.drawable.ic_silver_32px,
|
||||
tooltip = Res.string.generic__silver__singular,
|
||||
)
|
||||
|
||||
@Stable
|
||||
data object Copper : CurrencyUio(
|
||||
icon = Res.drawable.ic_copper_32px,
|
||||
tooltip = Res.string.generic__copper__singular,
|
||||
)
|
||||
}
|
||||
|
||||
@Stable
|
||||
object CurrencyDefault {
|
||||
@Stable
|
||||
val size = DpSize(width = 16.dp, height = 16.dp)
|
||||
|
||||
@Stable
|
||||
val padding = PaddingValues(bottom = 2.dp)
|
||||
|
||||
@Stable
|
||||
val brush = Color(0xFF121212).let { color ->
|
||||
Brush.horizontalGradient(
|
||||
listOf(
|
||||
color.copy(alpha = 0f),
|
||||
color,
|
||||
color,
|
||||
color.copy(alpha = 0f),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Stable
|
||||
val placement = TooltipPlacement.ComponentRect(
|
||||
anchor = Alignment.Center,
|
||||
alignment = Alignment.BottomEnd,
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun Currency(
|
||||
modifier: Modifier = Modifier,
|
||||
paddings: PaddingValues = CurrencyDefault.padding,
|
||||
tooltipPlacement: TooltipPlacement = CurrencyDefault.placement,
|
||||
size: DpSize = CurrencyDefault.size,
|
||||
currency: CurrencyUio,
|
||||
) {
|
||||
TooltipLayout(
|
||||
modifier = modifier,
|
||||
tooltipPlacement = tooltipPlacement,
|
||||
delayMillis = 0,
|
||||
tips = currency.tooltip,
|
||||
tooltip = {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.background(brush = CurrencyDefault.brush)
|
||||
.padding(horizontal = 8.dp, vertical = 4.dp),
|
||||
) {
|
||||
Text(
|
||||
style = MaterialTheme.lwa.typography.system.caption,
|
||||
text = stringResource(it),
|
||||
)
|
||||
}
|
||||
},
|
||||
content = {
|
||||
Image(
|
||||
modifier = Modifier
|
||||
.padding(paddingValues = paddings)
|
||||
.size(size = size),
|
||||
painter = painterResource(currency.icon),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
@ -4,11 +4,9 @@ import androidx.compose.foundation.ExperimentalFoundationApi
|
|||
import androidx.compose.foundation.TooltipArea
|
||||
import androidx.compose.foundation.TooltipPlacement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.DpOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
|
@ -36,13 +34,7 @@ fun <T> TooltipLayout(
|
|||
if (tips != null && tooltip != null) {
|
||||
TooltipArea(
|
||||
modifier = modifier,
|
||||
tooltip = {
|
||||
Box(
|
||||
modifier = Modifier.width(width = 448.dp),
|
||||
contentAlignment = Alignment.TopEnd,
|
||||
content = { tooltip(tips) },
|
||||
)
|
||||
},
|
||||
tooltip = { tooltip(tips) },
|
||||
content = content,
|
||||
delayMillis = delayMillis,
|
||||
tooltipPlacement = tooltipPlacement,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.height
|
|||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.MaterialTheme
|
||||
|
|
@ -113,7 +114,9 @@ fun InventoryItem(
|
|||
modifier = modifier,
|
||||
tips = item.tooltips,
|
||||
tooltip = { tooltips ->
|
||||
DecoratedBox {
|
||||
DecoratedBox(
|
||||
modifier = Modifier.width(width = 448.dp),
|
||||
) {
|
||||
Surface {
|
||||
Box(
|
||||
modifier = Modifier.padding(paddingValues = toolTipPaddings)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import androidx.compose.animation.fadeOut
|
|||
import androidx.compose.animation.slideInHorizontally
|
||||
import androidx.compose.animation.slideOutHorizontally
|
||||
import androidx.compose.animation.togetherWith
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
|
|
@ -25,6 +26,8 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.pixelized.desktop.lwa.ui.composable.currency.Currency
|
||||
import com.pixelized.desktop.lwa.ui.composable.currency.CurrencyUio
|
||||
import com.pixelized.desktop.lwa.ui.theme.lwa
|
||||
import lwacharactersheet.composeapp.generated.resources.Res
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_copper_32px
|
||||
|
|
@ -45,6 +48,7 @@ object InventoryPurseDefault {
|
|||
val paddings = PaddingValues(horizontal = 0.dp, vertical = 4.dp)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun InventoryPurse(
|
||||
modifier: Modifier = Modifier,
|
||||
|
|
@ -65,10 +69,8 @@ fun InventoryPurse(
|
|||
horizontalArrangement = Arrangement.spacedBy(space = 8.dp),
|
||||
) {
|
||||
Row(verticalAlignment = Alignment.Bottom) {
|
||||
Image(
|
||||
painter = painterResource(Res.drawable.ic_gold_32px),
|
||||
modifier = Modifier.padding(bottom = 2.dp).size(size = 16.dp),
|
||||
contentDescription = null,
|
||||
Currency(
|
||||
currency = CurrencyUio.Gold,
|
||||
)
|
||||
AnimatedContent(
|
||||
targetState = purse.gold,
|
||||
|
|
@ -83,10 +85,8 @@ fun InventoryPurse(
|
|||
}
|
||||
|
||||
Row(verticalAlignment = Alignment.Bottom) {
|
||||
Image(
|
||||
painter = painterResource(Res.drawable.ic_silver_32px),
|
||||
modifier = Modifier.padding(bottom = 2.dp).size(size = 16.dp),
|
||||
contentDescription = null,
|
||||
Currency(
|
||||
currency = CurrencyUio.Silver,
|
||||
)
|
||||
AnimatedContent(
|
||||
targetState = purse.silver,
|
||||
|
|
@ -101,10 +101,8 @@ fun InventoryPurse(
|
|||
}
|
||||
|
||||
Row(verticalAlignment = Alignment.Bottom) {
|
||||
Image(
|
||||
painter = painterResource(Res.drawable.ic_copper_32px),
|
||||
modifier = Modifier.padding(bottom = 2.dp).size(size = 16.dp),
|
||||
contentDescription = null,
|
||||
Currency(
|
||||
currency = CurrencyUio.Copper,
|
||||
)
|
||||
AnimatedContent(
|
||||
targetState = purse.copper,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.pixelized.desktop.lwa.ui.screen.campaign.text
|
||||
|
||||
import androidx.compose.animation.core.animateDpAsState
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
|
|
@ -66,7 +67,7 @@ data class ChatSettingsUio(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
@OptIn(ExperimentalComposeUiApi::class, ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun CampaignChat(
|
||||
modifier: Modifier = Modifier,
|
||||
|
|
|
|||
|
|
@ -1,25 +1,23 @@
|
|||
package com.pixelized.desktop.lwa.ui.screen.campaign.text.messages
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.TooltipPlacement
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.pixelized.desktop.lwa.ui.composable.currency.Currency
|
||||
import com.pixelized.desktop.lwa.ui.composable.currency.CurrencyUio
|
||||
import com.pixelized.desktop.lwa.ui.theme.lwa
|
||||
import lwacharactersheet.composeapp.generated.resources.Res
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_copper_32px
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_gold_32px
|
||||
import lwacharactersheet.composeapp.generated.resources.ic_silver_32px
|
||||
import org.jetbrains.compose.resources.StringResource
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
|
||||
@Stable
|
||||
|
|
@ -33,14 +31,30 @@ data class PurseTextMessageUio(
|
|||
val copper: Int?,
|
||||
) : TextMessage
|
||||
|
||||
@Stable
|
||||
object PurseTextDefault {
|
||||
@Stable
|
||||
val spacings: Dp = 3.dp
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Stable
|
||||
val placement = TooltipPlacement.ComponentRect(
|
||||
anchor = Alignment.Center,
|
||||
alignment = Alignment.TopEnd,
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun PurseTextMessage(
|
||||
modifier: Modifier = Modifier,
|
||||
spacings: Dp = PurseTextDefault.spacings,
|
||||
placement : TooltipPlacement = PurseTextDefault.placement,
|
||||
message: PurseTextMessageUio,
|
||||
) {
|
||||
Row(
|
||||
modifier = modifier,
|
||||
horizontalArrangement = Arrangement.spacedBy(space = 3.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(space = spacings),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Text(
|
||||
|
|
@ -80,10 +94,9 @@ fun PurseTextMessage(
|
|||
maxLines = 1,
|
||||
text = "$it",
|
||||
)
|
||||
Image(
|
||||
painter = painterResource(Res.drawable.ic_gold_32px),
|
||||
modifier = Modifier.padding(bottom = 2.dp).size(size = 16.dp),
|
||||
contentDescription = null,
|
||||
Currency(
|
||||
tooltipPlacement = placement,
|
||||
currency = CurrencyUio.Gold,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -96,10 +109,9 @@ fun PurseTextMessage(
|
|||
maxLines = 1,
|
||||
text = "$it",
|
||||
)
|
||||
Image(
|
||||
painter = painterResource(Res.drawable.ic_silver_32px),
|
||||
modifier = Modifier.padding(bottom = 2.dp).size(size = 16.dp),
|
||||
contentDescription = null,
|
||||
Currency(
|
||||
tooltipPlacement = placement,
|
||||
currency = CurrencyUio.Silver,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -113,10 +125,9 @@ fun PurseTextMessage(
|
|||
maxLines = 1,
|
||||
text = "$it",
|
||||
)
|
||||
Image(
|
||||
painter = painterResource(Res.drawable.ic_copper_32px),
|
||||
modifier = Modifier.padding(bottom = 2.dp).size(size = 16.dp),
|
||||
contentDescription = null,
|
||||
Currency(
|
||||
tooltipPlacement = placement,
|
||||
currency = CurrencyUio.Copper,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue