@ComposablefunSnowDialogScreen(){varshowDialogbyremember{mutableStateOf(false)}Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){Image(painter=painterResource(id=R.drawable.christmas_night),contentDescription="Sample Image",contentScale=ContentScale.Crop,modifier=Modifier.fillMaxSize())if(!showDialog){Button(onClick={showDialog=true}){Text("Ho-ho-ho!")}}else{SnowedDialog{showDialog=false}}}}@ComposableprivatefunSnowedDialog(onDismiss:()->Unit){BasicAlertDialog(onDismissRequest={onDismiss()},properties=DialogProperties(usePlatformDefaultWidth=false)){Column(Modifier.padding(horizontal=16.dp).background(shape=MaterialTheme.shapes.large,color=MaterialTheme.colorScheme.surface).padding(16.dp),){Text("Merry Christmas!",style=MaterialTheme.typography.titleLarge)Spacer(modifier=Modifier.height(10.dp))Text("Happy New Year!")Spacer(modifier=Modifier.height(26.dp))Row(modifier=Modifier.fillMaxWidth(),horizontalArrangement=Arrangement.End){Text(modifier=Modifier.clickable{onDismiss()}.padding(5.dp),text="Close",style=MaterialTheme.typography.bodyMedium.copy(color=MaterialTheme.colorScheme.primary))}}}}
@ComposableprivatefunSnowedDialog(onDismiss:()->Unit){valsnowCapShader=remember{RuntimeShader(snowCapShader)}valflakesShaderForeground=remember{RuntimeShader(snowShader)}valflakesShaderBackground=remember{RuntimeShader(snowShader)}vartimebyremember{mutableStateOf(0f)}LaunchedEffect(null){while(true){delay(10)time+=0.01f}}flakesShaderForeground.setIntUniform("uLayers",5)flakesShaderForeground.setFloatUniform("uDepth",0.15f)flakesShaderForeground.setFloatUniform("uSpeed",1.0f)flakesShaderBackground.setIntUniform("uLayers",10)flakesShaderBackground.setFloatUniform("uDepth",1.5f)flakesShaderBackground.setFloatUniform("uSpeed",0.8f)BasicAlertDialog(onDismissRequest={onDismiss()},properties=DialogProperties(usePlatformDefaultWidth=false)){Box(modifier=Modifier.fillMaxSize().onSizeChanged{size->flakesShaderForeground.setFloatUniform("resolution",size.width.toFloat(),size.height.toFloat())}.graphicsLayer{flakesShaderForeground.setFloatUniform("time",time)this.renderEffect=RenderEffect.createRuntimeShaderEffect(flakesShaderForeground,"image").asComposeRenderEffect()}.padding(16.dp),contentAlignment=Alignment.Center){Box(modifier=Modifier.fillMaxSize().onSizeChanged{size->flakesShaderBackground.setFloatUniform("resolution",size.width.toFloat(),size.height.toFloat())}.graphicsLayer{flakesShaderBackground.setFloatUniform("time",time)this.renderEffect=RenderEffect.createRuntimeShaderEffect(flakesShaderBackground,"image").asComposeRenderEffect()}){Box(modifier=Modifier.fillMaxSize().background(color=Color.Black.copy(0.1f)))}Column(Modifier.padding(horizontal=16.dp).background(shape=MaterialTheme.shapes.large,color=MaterialTheme.colorScheme.surface).onSizeChanged{size->snowCapShader.setFloatUniform("resolution",size.width.toFloat(),size.height.toFloat())}.graphicsLayer{snowCapShader.setFloatUniform("time",time)this.renderEffect=RenderEffect.createRuntimeShaderEffect(snowCapShader,"image").asComposeRenderEffect()}.padding(16.dp),){Text("Merry Christmas!",style=MaterialTheme.typography.titleLarge)Spacer(modifier=Modifier.height(10.dp))Text("Happy New Year!")Spacer(modifier=Modifier.height(26.dp))Row(modifier=Modifier.fillMaxWidth(),horizontalArrangement=Arrangement.End){Text(modifier=Modifier.clickable{onDismiss()}.padding(5.dp),text="Close",style=MaterialTheme.typography.bodyMedium.copy(color=MaterialTheme.colorScheme.primary))}}}}}