Update the landing screen background & Clean import

This commit is contained in:
Andres Gomez, Thomas (ITDV RL) 2024-05-28 11:02:22 +02:00
parent 4b54e51b39
commit 223ae9f02b
53 changed files with 282 additions and 90 deletions

View file

@ -39,7 +39,7 @@ import com.pixelized.rplexicon.ui.screens.rolls.RollOverlay
import com.pixelized.rplexicon.ui.screens.rolls.RollOverlayViewModel import com.pixelized.rplexicon.ui.screens.rolls.RollOverlayViewModel
import com.pixelized.rplexicon.ui.screens.rolls.rememberBlurredRollOverlayHostState import com.pixelized.rplexicon.ui.screens.rolls.rememberBlurredRollOverlayHostState
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
val NO_WINDOW_INSETS = WindowInsets(0, 0, 0, 0) val NO_WINDOW_INSETS = WindowInsets(0, 0, 0, 0)

View file

@ -5,7 +5,6 @@ import coil.ImageLoader
import coil.ImageLoaderFactory import coil.ImageLoaderFactory
import coil.disk.DiskCache import coil.disk.DiskCache
import coil.memory.MemoryCache import coil.memory.MemoryCache
import coil.size.Precision
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp @HiltAndroidApp

View file

@ -1,16 +1,14 @@
package com.pixelized.rplexicon.ui.composable package com.pixelized.rplexicon.ui.composable
import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.ColorMatrix import androidx.compose.ui.graphics.ColorMatrix
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
@ -20,17 +18,21 @@ import androidx.compose.ui.layout.ContentScale
@Composable @Composable
fun BackgroundImage( fun BackgroundImage(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current, alignment: Alignment = Alignment.TopCenter,
background: Brush = rememberBackgroundGradient(), contentScale: ContentScale = ContentScale.Crop,
colorFilter: ColorFilter? = rememberSaturationFilter(saturation = 0f),
painter: Painter, painter: Painter,
background: Brush = rememberBackgroundGradient(),
) { ) {
Box( Box(
modifier = modifier modifier = modifier
) { ) {
Icon( Image(
modifier = Modifier.matchParentSize(), modifier = Modifier.matchParentSize(),
tint = tint, colorFilter = colorFilter,
painter = painter, painter = painter,
alignment = alignment,
contentScale = contentScale,
contentDescription = null, contentDescription = null,
) )
Box( Box(
@ -46,11 +48,7 @@ fun BackgroundImage(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
alignment: Alignment = Alignment.TopCenter, alignment: Alignment = Alignment.TopCenter,
contentScale: ContentScale = ContentScale.Crop, contentScale: ContentScale = ContentScale.Crop,
colorFilter: ColorFilter? = remember { colorFilter: ColorFilter? = rememberSaturationFilter(saturation = 0f),
ColorFilter.colorMatrix(
ColorMatrix().also { it.setToSaturation(0f) }
)
},
model: Any?, model: Any?,
background: Brush = rememberBackgroundGradient(), background: Brush = rememberBackgroundGradient(),
) { ) {
@ -72,6 +70,17 @@ fun BackgroundImage(
} }
} }
@Composable
fun rememberSaturationFilter(
saturation: Float = 0f,
): ColorFilter {
return remember {
ColorFilter.colorMatrix(
ColorMatrix().also { it.setToSaturation(saturation) }
)
}
}
@Composable @Composable
fun rememberBackgroundGradient( fun rememberBackgroundGradient(
from: Float = 0.5f, from: Float = 0.5f,

View file

@ -25,8 +25,8 @@ import androidx.compose.ui.draw.BlurredEdgeTreatment
import androidx.compose.ui.draw.blur import androidx.compose.ui.draw.blur
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.utilitary.extentions.clickableInterceptor
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.clickableInterceptor
@Stable @Stable
interface BlurredOverlayHostState { interface BlurredOverlayHostState {

View file

@ -1,11 +1,31 @@
package com.pixelized.rplexicon.ui.composable package com.pixelized.rplexicon.ui.composable
import androidx.compose.animation.* import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.* import androidx.compose.animation.core.FastOutSlowInEasing
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkHorizontally
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement
import androidx.compose.material3.* import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.BoxWithConstraintsScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.ButtonColors
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ButtonElevation
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember

View file

@ -27,8 +27,8 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.modifier.zoomable
import com.pixelized.rplexicon.utilitary.extentions.uri import com.pixelized.rplexicon.utilitary.extentions.uri
import com.pixelized.rplexicon.utilitary.extentions.zoomable
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject import javax.inject.Inject

View file

@ -34,8 +34,8 @@ import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.NumberPicker import com.pixelized.rplexicon.ui.composable.NumberPicker
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.toLabel import com.pixelized.rplexicon.utilitary.extentions.toLabel
@Stable @Stable

View file

@ -25,8 +25,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.ui.composable.NumberPicker import com.pixelized.rplexicon.ui.composable.NumberPicker
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class SkillEditDialogUio( data class SkillEditDialogUio(

View file

@ -26,8 +26,8 @@ import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.NumberPicker import com.pixelized.rplexicon.ui.composable.NumberPicker
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class SpellEditDialogUio( data class SpellEditDialogUio(

View file

@ -8,16 +8,16 @@ import androidx.navigation.NavHostController
import androidx.navigation.NavOptionsBuilder import androidx.navigation.NavOptionsBuilder
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.pixelized.rplexicon.ui.navigation.screens.composableLexicon
import com.pixelized.rplexicon.ui.navigation.screens.composableLocations
import com.pixelized.rplexicon.ui.navigation.screens.composableQuests
import com.pixelized.rplexicon.ui.navigation.screens.AUTHENTICATION_ROUTE import com.pixelized.rplexicon.ui.navigation.screens.AUTHENTICATION_ROUTE
import com.pixelized.rplexicon.ui.navigation.screens.composableAuthentication import com.pixelized.rplexicon.ui.navigation.screens.composableAuthentication
import com.pixelized.rplexicon.ui.navigation.screens.composableCharacterSheet import com.pixelized.rplexicon.ui.navigation.screens.composableCharacterSheet
import com.pixelized.rplexicon.ui.navigation.screens.composableLanding import com.pixelized.rplexicon.ui.navigation.screens.composableLanding
import com.pixelized.rplexicon.ui.navigation.screens.composableLexicon
import com.pixelized.rplexicon.ui.navigation.screens.composableLexiconDetail import com.pixelized.rplexicon.ui.navigation.screens.composableLexiconDetail
import com.pixelized.rplexicon.ui.navigation.screens.composableLocationDetail import com.pixelized.rplexicon.ui.navigation.screens.composableLocationDetail
import com.pixelized.rplexicon.ui.navigation.screens.composableLocations
import com.pixelized.rplexicon.ui.navigation.screens.composableQuestDetail import com.pixelized.rplexicon.ui.navigation.screens.composableQuestDetail
import com.pixelized.rplexicon.ui.navigation.screens.composableQuests
import com.pixelized.rplexicon.ui.navigation.screens.composableSearch import com.pixelized.rplexicon.ui.navigation.screens.composableSearch
import com.pixelized.rplexicon.ui.navigation.screens.composableSpellDetail import com.pixelized.rplexicon.ui.navigation.screens.composableSpellDetail
import com.pixelized.rplexicon.ui.navigation.screens.composableSummary import com.pixelized.rplexicon.ui.navigation.screens.composableSummary

View file

@ -91,7 +91,7 @@ import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.Proficienc
import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.ProficiencyPreview import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.ProficiencyPreview
import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.ProficiencyViewModel import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.ProficiencyViewModel
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.lexiconShadow import com.pixelized.rplexicon.utilitary.extentions.modifier.lexiconShadow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.minimumInteractiveComponentSize import androidx.compose.material.minimumInteractiveComponentSize
import androidx.compose.material3.Icon import androidx.compose.material3.Icon

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.minimumInteractiveComponentSize
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text

View file

@ -17,7 +17,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.dashedBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.dashedBorder
@Composable @Composable
fun MasteryCircle( fun MasteryCircle(

View file

@ -25,7 +25,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.toLabel import com.pixelized.rplexicon.utilitary.extentions.toLabel
@Stable @Stable

View file

@ -12,8 +12,8 @@ import com.pixelized.rplexicon.ui.screens.character.composable.character.StatUio
import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.CharacterSheetUio import com.pixelized.rplexicon.ui.screens.character.pages.proficiency.CharacterSheetUio
import com.pixelized.rplexicon.utilitary.extentions.local.passivesBonus import com.pixelized.rplexicon.utilitary.extentions.local.passivesBonus
import com.pixelized.rplexicon.utilitary.extentions.local.sum import com.pixelized.rplexicon.utilitary.extentions.local.sum
import com.pixelized.rplexicon.utilitary.extentions.modifier
import com.pixelized.rplexicon.utilitary.extentions.masteryMultiplier import com.pixelized.rplexicon.utilitary.extentions.masteryMultiplier
import com.pixelized.rplexicon.utilitary.extentions.modifier
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.max import kotlin.math.max

View file

@ -34,8 +34,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class SkillDetailUio( data class SkillDetailUio(

View file

@ -10,10 +10,10 @@ import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.business.SpellBookUseCase import com.pixelized.rplexicon.business.SpellBookUseCase
import com.pixelized.rplexicon.data.model.AssignedSpell import com.pixelized.rplexicon.data.model.AssignedSpell
import com.pixelized.rplexicon.data.model.CharacterSheet import com.pixelized.rplexicon.data.model.CharacterSheet
import com.pixelized.rplexicon.data.network.CharacterSheetFire
import com.pixelized.rplexicon.data.model.DiceThrow import com.pixelized.rplexicon.data.model.DiceThrow
import com.pixelized.rplexicon.data.model.Property import com.pixelized.rplexicon.data.model.Property
import com.pixelized.rplexicon.data.model.Throw import com.pixelized.rplexicon.data.model.Throw
import com.pixelized.rplexicon.data.network.CharacterSheetFire
import com.pixelized.rplexicon.data.repository.authentication.FirebaseRepository import com.pixelized.rplexicon.data.repository.authentication.FirebaseRepository
import com.pixelized.rplexicon.data.repository.character.CharacterSheetRepository import com.pixelized.rplexicon.data.repository.character.CharacterSheetRepository
import com.pixelized.rplexicon.data.repository.character.SpellRepository import com.pixelized.rplexicon.data.repository.character.SpellRepository

View file

@ -34,8 +34,8 @@ import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateWithDropCap import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class AlterationDetailUio( data class AlterationDetailUio(

View file

@ -13,13 +13,10 @@ import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable import androidx.compose.runtime.Stable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import com.pixelized.rplexicon.ui.composable.CategoryHeader import com.pixelized.rplexicon.ui.composable.CategoryHeader
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItem import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItem

View file

@ -7,10 +7,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.layout.sizeIn
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
@ -57,7 +54,7 @@ import com.pixelized.rplexicon.ui.screens.character.composable.character.StatUio
import com.pixelized.rplexicon.ui.screens.character.composable.preview.rememberCharacterSheetStatePreview import com.pixelized.rplexicon.ui.screens.character.composable.preview.rememberCharacterSheetStatePreview
import com.pixelized.rplexicon.ui.screens.character.pages.actions.HandleSkillDetailDialog import com.pixelized.rplexicon.ui.screens.character.pages.actions.HandleSkillDetailDialog
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class CharacterSheetUio( data class CharacterSheetUio(

View file

@ -24,7 +24,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource

View file

@ -2,7 +2,15 @@ package com.pixelized.rplexicon.ui.screens.landing
import android.content.res.Configuration.UI_MODE_NIGHT_NO import android.content.res.Configuration.UI_MODE_NIGHT_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.Image
import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -14,6 +22,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
@ -22,7 +31,12 @@ import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.composed
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
@ -31,7 +45,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.composable.BackgroundImage import com.pixelized.rplexicon.ui.composable.rememberBackgroundGradient
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexicon import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexicon
@ -42,8 +56,7 @@ import com.pixelized.rplexicon.ui.navigation.screens.navigateToSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotateMajWithDropCap import com.pixelized.rplexicon.utilitary.annotateMajWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
import com.pixelized.rplexicon.utilitary.extentions.uri
@Composable @Composable
fun LandingScreen() { fun LandingScreen() {
@ -56,7 +69,7 @@ fun LandingScreen() {
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.navigationBarsPadding(), .navigationBarsPadding(),
padding = PaddingValues( paddings = PaddingValues(
start = 16.dp, start = 16.dp,
top = MaterialTheme.lexicon.dimens.detailPadding, top = MaterialTheme.lexicon.dimens.detailPadding,
end = 16.dp, end = 16.dp,
@ -82,8 +95,13 @@ fun LandingScreen() {
@Composable @Composable
private fun LandingContent( private fun LandingContent(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
padding: PaddingValues = PaddingValues(16.dp),
scrollState: ScrollState = rememberScrollState(), scrollState: ScrollState = rememberScrollState(),
paddings: PaddingValues = PaddingValues(
start = 16.dp,
top = MaterialTheme.lexicon.dimens.detailPadding,
end = 16.dp,
bottom = 16.dp,
),
sectionPadding: Dp = 32.dp, sectionPadding: Dp = 32.dp,
onCharacter: (String) -> Unit, onCharacter: (String) -> Unit,
onSearch: () -> Unit, onSearch: () -> Unit,
@ -95,19 +113,46 @@ private fun LandingContent(
Box( Box(
modifier = modifier.verticalScroll(scrollState), modifier = modifier.verticalScroll(scrollState),
) { ) {
BackgroundImage( Box(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.aspectRatio(1f) .aspectRatio(1f)
.scrollOffset(scrollState) { it / 2 }, .clip(RectangleShape),
contentScale = ContentScale.Crop, ) {
model = R.drawable.im_naderius.uri, Image(
) modifier = Modifier
.matchParentSize()
.scrollOffset(scrollState) { it / 2 },
painter = painterResource(id = R.drawable.im_naderius_background),
contentDescription = null,
)
Image(
modifier = Modifier
.matchParentSize()
.scrollOffset(scrollState) { it / 3 },
painter = painterResource(id = R.drawable.im_naderius_foreground),
contentDescription = null,
)
Image(
modifier = Modifier
.matchParentSize()
.offset(y = (-16).dp)
.scrollOffset(scrollState) { it / 3 }
.magic(),
painter = painterResource(id = R.drawable.im_naderius_dice),
contentDescription = null,
)
Box(
modifier = Modifier
.matchParentSize()
.background(brush = rememberBackgroundGradient()),
)
}
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(paddingValues = padding), .padding(paddingValues = paddings),
verticalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Text( Text(
@ -302,6 +347,42 @@ private fun LandingContent(
} }
} }
private fun Modifier.magic(): Modifier = composed {
val transition = rememberInfiniteTransition(
label = "Magic transition",
)
val rotation = transition.animateFloat(
initialValue = 0f,
targetValue = 360f,
animationSpec = infiniteRepeatable(
animation = tween(
durationMillis = 12000,
easing = LinearEasing,
),
),
label = "Magic rotation",
)
val translationY = transition.animateFloat(
initialValue = -10f,
targetValue = -40f,
animationSpec = infiniteRepeatable(
animation = tween(
durationMillis = 8000,
),
repeatMode = RepeatMode.Reverse,
),
label = "Magic translationY",
)
return@composed this.graphicsLayer {
this.transformOrigin = TransformOrigin(
pivotFractionX = 0.375f,
pivotFractionY = 0.625f,
)
this.rotationZ = rotation.value
this.translationY = translationY.value
}
}
@Composable @Composable
@Preview(uiMode = UI_MODE_NIGHT_NO) @Preview(uiMode = UI_MODE_NIGHT_NO)
@Preview(uiMode = UI_MODE_NIGHT_YES) @Preview(uiMode = UI_MODE_NIGHT_YES)

View file

@ -61,7 +61,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotate import com.pixelized.rplexicon.utilitary.annotate
import com.pixelized.rplexicon.utilitary.dropCapRegex import com.pixelized.rplexicon.utilitary.dropCapRegex
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
import com.pixelized.rplexicon.utilitary.highlightRegex import com.pixelized.rplexicon.utilitary.highlightRegex
import com.pixelized.rplexicon.utilitary.styleWith import com.pixelized.rplexicon.utilitary.styleWith

View file

@ -39,10 +39,9 @@ import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.LOS_FULL import com.pixelized.rplexicon.utilitary.LOS_FULL
import com.pixelized.rplexicon.utilitary.annotateMajWithDropCap
import com.pixelized.rplexicon.utilitary.annotateWithDropCap import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.placeholder import com.pixelized.rplexicon.utilitary.extentions.modifier.placeholder
@Stable @Stable
class LexiconGroupUio( class LexiconGroupUio(

View file

@ -45,10 +45,10 @@ class LexiconViewModel @Inject constructor(
init { init {
viewModelScope.launch { viewModelScope.launch {
launch { launch(Dispatchers.IO) {
orderRepository.data.combine(lexiconRepository.data) { _, lexicon -> lexicon } orderRepository.data.combine(lexiconRepository.data) { _, lexicon -> lexicon }
.collect { items -> .collect { items ->
_items.value = items val lexicons = items
.sortedBy { it.name } .sortedBy { it.name }
.groupBy( .groupBy(
keySelector = { keySelector = {
@ -74,6 +74,10 @@ class LexiconViewModel @Inject constructor(
) )
} }
.sortedBy { orderRepository.findLexiconOrder(quest = it.category) } .sortedBy { orderRepository.findLexiconOrder(quest = it.category) }
withContext(Dispatchers.Main) {
_items.value = lexicons
}
} }
} }
launch { launch {

View file

@ -89,7 +89,7 @@ import com.pixelized.rplexicon.utilitary.annotate
import com.pixelized.rplexicon.utilitary.annotateWithDropCap import com.pixelized.rplexicon.utilitary.annotateWithDropCap
import com.pixelized.rplexicon.utilitary.dropCapRegex import com.pixelized.rplexicon.utilitary.dropCapRegex
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
import com.pixelized.rplexicon.utilitary.highlightRegex import com.pixelized.rplexicon.utilitary.highlightRegex
import com.pixelized.rplexicon.utilitary.styleWith import com.pixelized.rplexicon.utilitary.styleWith

View file

@ -35,7 +35,7 @@ import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.LOS_FULL import com.pixelized.rplexicon.utilitary.LOS_FULL
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.placeholder import com.pixelized.rplexicon.utilitary.extentions.modifier.placeholder
@Stable @Stable
data class LocationGroupUio( data class LocationGroupUio(

View file

@ -67,7 +67,7 @@ import com.pixelized.rplexicon.utilitary.LOS_HOLLOW
import com.pixelized.rplexicon.utilitary.annotate import com.pixelized.rplexicon.utilitary.annotate
import com.pixelized.rplexicon.utilitary.dropCapRegex import com.pixelized.rplexicon.utilitary.dropCapRegex
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
import com.pixelized.rplexicon.utilitary.highlightRegex import com.pixelized.rplexicon.utilitary.highlightRegex
import com.pixelized.rplexicon.utilitary.styleWith import com.pixelized.rplexicon.utilitary.styleWith

View file

@ -36,7 +36,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.LOS_FULL import com.pixelized.rplexicon.utilitary.LOS_FULL
import com.pixelized.rplexicon.utilitary.LOS_HOLLOW import com.pixelized.rplexicon.utilitary.LOS_HOLLOW
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.placeholder import com.pixelized.rplexicon.utilitary.extentions.modifier.placeholder
@Stable @Stable
data class QuestGroupUio( data class QuestGroupUio(

View file

@ -46,6 +46,9 @@ import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.criticalShader
import com.pixelized.rplexicon.utilitary.extentions.modifier.rememberITimeState
@Stable @Stable
data class RollDiceUio( data class RollDiceUio(
@ -122,8 +125,19 @@ private fun Dice(
animationSpec = it.animationSpec, animationSpec = it.animationSpec,
label = "AnimatedRotation" label = "AnimatedRotation"
) )
val isCritical = animateFloatAsState(
targetValue = if (it.isCriticalSuccess) 1.0f else 0f,
label = "animatedCritical",
animationSpec = tween(1500),
)
Icon( Icon(
modifier = modifier.rotate(degrees = animatedRotation.value % 360), modifier = modifier
.rotate(degrees = animatedRotation.value % 360)
.criticalShader(
iDefault = MaterialTheme.colorScheme.primary,
isCritical = isCritical.value,
iTime = rememberITimeState().value,
),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
painter = painterResource(id = it.icon), painter = painterResource(id = it.icon),
contentDescription = null, contentDescription = null,

View file

@ -49,8 +49,8 @@ import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.screens.rolls.composable.ThrowsCardUio.Throw.Type import com.pixelized.rplexicon.ui.screens.rolls.composable.ThrowsCardUio.Throw.Type
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.annotatedSpan import com.pixelized.rplexicon.utilitary.extentions.annotatedSpan
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
import com.pixelized.rplexicon.utilitary.highlightRegex import com.pixelized.rplexicon.utilitary.highlightRegex
import java.util.UUID import java.util.UUID

View file

@ -45,7 +45,7 @@ import com.pixelized.rplexicon.ui.screens.search.item.SearchItemUio.SpellSearchI
import com.pixelized.rplexicon.ui.screens.search.item.SpellSearchItem import com.pixelized.rplexicon.ui.screens.search.item.SpellSearchItem
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.PUC_FULL import com.pixelized.rplexicon.utilitary.PUC_FULL
import com.pixelized.rplexicon.utilitary.extentions.lexiconShadow import com.pixelized.rplexicon.utilitary.extentions.modifier.lexiconShadow
@Stable @Stable
data class SearchFormUio( data class SearchFormUio(
@ -220,14 +220,14 @@ fun SearchScreenPreview() {
mutableStateOf( mutableStateOf(
listOf( listOf(
LocationSearchItemUio( LocationSearchItemUio(
id = "", id = "0",
category = AnnotatedString(text = "Cartes $PUC_FULL Région de Vallaki"), category = AnnotatedString(text = "Cartes $PUC_FULL Région de Vallaki"),
title = AnnotatedString(text = "Vallaki"), title = AnnotatedString(text = "Vallaki"),
description = null, description = null,
destination = null, destination = null,
), ),
LocationSearchItemUio( LocationSearchItemUio(
id = "", id = "1",
category = AnnotatedString(text = "Cartes $PUC_FULL Contré de la brume"), category = AnnotatedString(text = "Cartes $PUC_FULL Contré de la brume"),
title = AnnotatedString(text = "Barovie"), title = AnnotatedString(text = "Barovie"),
description = AnnotatedString(text = "Contré sombre et maudite somise au joug de Stradh von Zarovich"), description = AnnotatedString(text = "Contré sombre et maudite somise au joug de Stradh von Zarovich"),

View file

@ -29,9 +29,12 @@ import androidx.compose.runtime.Stable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontStyle
@ -47,7 +50,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.annotate import com.pixelized.rplexicon.utilitary.annotate
import com.pixelized.rplexicon.utilitary.dropCapRegex import com.pixelized.rplexicon.utilitary.dropCapRegex
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.scrollOffset import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
import com.pixelized.rplexicon.utilitary.highlightRegex import com.pixelized.rplexicon.utilitary.highlightRegex
import com.pixelized.rplexicon.utilitary.styleWith import com.pixelized.rplexicon.utilitary.styleWith
@ -100,6 +103,7 @@ private fun SpellDetailContent(
val typography = MaterialTheme.lexicon.typography val typography = MaterialTheme.lexicon.typography
val highlightRegex = remember(highlight) { highlightRegex(terms = highlight.searchCriterion()) } val highlightRegex = remember(highlight) { highlightRegex(terms = highlight.searchCriterion()) }
val dropCapRegex = remember { dropCapRegex() } val dropCapRegex = remember { dropCapRegex() }
val colorScheme = MaterialTheme.colorScheme
Scaffold( Scaffold(
modifier = modifier, modifier = modifier,
@ -131,7 +135,11 @@ private fun SpellDetailContent(
.fillMaxWidth() .fillMaxWidth()
.aspectRatio(ratio = 1f) .aspectRatio(ratio = 1f)
.scrollOffset(scrollState = state) { -it / 2 }, .scrollOffset(scrollState = state) { -it / 2 },
tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.2f), alignment = Alignment.Center,
contentScale = ContentScale.Fit,
colorFilter = remember {
ColorFilter.tint(colorScheme.onSurface.copy(alpha = 0.2f))
},
painter = painterResource(id = detail.icon), painter = painterResource(id = detail.icon),
) )
Column( Column(

View file

@ -8,7 +8,6 @@ import androidx.lifecycle.viewModelScope
import com.pixelized.rplexicon.data.repository.character.DescriptionRepository import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
import com.pixelized.rplexicon.data.repository.character.SpellRepository import com.pixelized.rplexicon.data.repository.character.SpellRepository
import com.pixelized.rplexicon.ui.composable.error.FetchErrorUio import com.pixelized.rplexicon.ui.composable.error.FetchErrorUio
import com.pixelized.rplexicon.ui.navigation.screens.lexiconDetailArgument
import com.pixelized.rplexicon.ui.navigation.screens.spellDetailArgument import com.pixelized.rplexicon.ui.navigation.screens.spellDetailArgument
import com.pixelized.rplexicon.utilitary.extentions.local.icon import com.pixelized.rplexicon.utilitary.extentions.local.icon
import com.pixelized.rplexicon.utilitary.extentions.local.label import com.pixelized.rplexicon.utilitary.extentions.local.label

View file

@ -25,7 +25,7 @@ import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRow
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberAttributesSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberAttributesSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class AttributesSummaryUio( data class AttributesSummaryUio(

View file

@ -26,7 +26,7 @@ import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRow
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberCharacteristicsSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberCharacteristicsSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class CharacteristicsSummaryUio( data class CharacteristicsSummaryUio(

View file

@ -25,7 +25,7 @@ import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRow
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberPassivesSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberPassivesSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class PassivesSummaryUio( data class PassivesSummaryUio(

View file

@ -25,7 +25,7 @@ import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRow
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberProficienciesSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberProficienciesSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class ProficiencySummaryUio( data class ProficiencySummaryUio(

View file

@ -25,7 +25,7 @@ import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRow
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberSavingThrowsSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberSavingThrowsSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class SavingThrowsSummaryUio( data class SavingThrowsSummaryUio(

View file

@ -26,7 +26,7 @@ import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRow
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberSpellsSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberSpellsSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
@Stable @Stable
data class SpellSummaryUio( data class SpellSummaryUio(

View file

@ -37,9 +37,9 @@ import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberStatusSummary import com.pixelized.rplexicon.ui.screens.summary.composable.preview.statistic.rememberStatusSummary
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.verticalDivider import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder
import com.pixelized.rplexicon.utilitary.extentions.modifier.verticalDivider
@Stable @Stable
data class StatusSummaryUio( data class StatusSummaryUio(

View file

@ -25,7 +25,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.extentions.verticalDivider import com.pixelized.rplexicon.utilitary.extentions.modifier.verticalDivider
@Stable @Stable
data class SummaryRowUio( data class SummaryRowUio(

View file

@ -7,7 +7,6 @@ import androidx.compose.runtime.remember
import com.pixelized.rplexicon.R import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.screens.summary.composable.ProficiencySummaryUio import com.pixelized.rplexicon.ui.screens.summary.composable.ProficiencySummaryUio
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryRowUio
import com.pixelized.rplexicon.ui.screens.summary.composable.common.SummaryCellUio
import com.pixelized.rplexicon.ui.screens.summary.composable.common.proficiency import com.pixelized.rplexicon.ui.screens.summary.composable.common.proficiency
@Composable @Composable

View file

@ -10,10 +10,8 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
@ -22,16 +20,13 @@ import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable import androidx.compose.runtime.Stable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.ui.screens.summary.composable.AttributesSummary import com.pixelized.rplexicon.ui.screens.summary.composable.AttributesSummary
import com.pixelized.rplexicon.ui.screens.summary.composable.AttributesSummaryUio import com.pixelized.rplexicon.ui.screens.summary.composable.AttributesSummaryUio

View file

@ -28,8 +28,8 @@ import com.pixelized.rplexicon.utilitary.extentions.local.highestSpellLevel
import com.pixelized.rplexicon.utilitary.extentions.local.passivesBonus import com.pixelized.rplexicon.utilitary.extentions.local.passivesBonus
import com.pixelized.rplexicon.utilitary.extentions.local.spell import com.pixelized.rplexicon.utilitary.extentions.local.spell
import com.pixelized.rplexicon.utilitary.extentions.local.sum import com.pixelized.rplexicon.utilitary.extentions.local.sum
import com.pixelized.rplexicon.utilitary.extentions.modifier
import com.pixelized.rplexicon.utilitary.extentions.masteryMultiplier import com.pixelized.rplexicon.utilitary.extentions.masteryMultiplier
import com.pixelized.rplexicon.utilitary.extentions.modifier
import com.pixelized.rplexicon.utilitary.extentions.toLabel import com.pixelized.rplexicon.utilitary.extentions.toLabel
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View file

@ -0,0 +1,73 @@
package com.pixelized.rplexicon.utilitary.extentions.modifier
import android.graphics.Color.valueOf
import android.graphics.RuntimeShader
import android.os.Build
import androidx.compose.animation.core.withInfiniteAnimationFrameMillis
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.produceState
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithCache
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.graphics.ShaderBrush
import androidx.compose.ui.graphics.graphicsLayer
import org.intellij.lang.annotations.Language
fun Modifier.criticalShader(
isCritical: Float,
iTime: Float,
iDefault: Color,
): Modifier = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
this
.graphicsLayer {
compositingStrategy = CompositingStrategy.Offscreen
}
.drawWithCache {
val shader = RuntimeShader(CRITICAL_SHADER)
val shaderBrush = ShaderBrush(shader)
shader.setFloatUniform("iResolution", size.width, size.height)
shader.setFloatUniform("isCritical", isCritical)
shader.setColorUniform("iDefault", valueOf(iDefault.red, iDefault.green, iDefault.blue))
onDrawWithContent {
drawContent()
shader.setFloatUniform("iTime", iTime)
drawRect(brush = shaderBrush, blendMode = BlendMode.SrcAtop)
}
}
} else {
this
}
@Composable
@Stable
fun rememberITimeState(speed: Float = 1f): State<Float> {
return produceState(0f) {
while (true) {
withInfiniteAnimationFrameMillis {
value = it / 1000f * speed
}
}
}
}
@Language("AGSL")
val CRITICAL_SHADER = """
uniform float2 iResolution;
uniform float iTime;
uniform float isCritical;
layout(color) uniform half4 iDefault;
half4 main(float2 fragCoord) {
// Normalized pixel coordinates (from 0 to 1)
float2 uv = fragCoord.xy / iResolution;
// Time varying pixel color
float2 color = 0.5 + 0.5 * cos(iTime + uv.xy * 2.0 + float2(0, 3.14));
// Output to screen
return mix(iDefault, float4(color, 1.0, 1.0), isCritical);
}
""".trimIndent()

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.pixelized.rplexicon.utilitary.extentions package com.pixelized.rplexicon.utilitary.extentions.modifier
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier

View file

@ -1,4 +1,4 @@
package com.pixelized.rplexicon.utilitary.extentions package com.pixelized.rplexicon.utilitary.extentions.modifier
import androidx.compose.animation.core.FiniteAnimationSpec import androidx.compose.animation.core.FiniteAnimationSpec
import androidx.compose.animation.core.Transition import androidx.compose.animation.core.Transition
@ -43,6 +43,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.accompanist.placeholder.PlaceholderHighlight import com.google.accompanist.placeholder.PlaceholderHighlight
import com.google.accompanist.placeholder.placeholder import com.google.accompanist.placeholder.placeholder
import com.pixelized.rplexicon.utilitary.extentions.lexicon
fun Modifier.placeholder( fun Modifier.placeholder(
color: Color = Color.Unspecified, color: Color = Color.Unspecified,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB