package com.santamarta.chamado_gestao import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Paint import androidx.compose.foundation.Canvas as ComposeCanvas import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.asAndroidPath import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.dp @Composable fun SignaturePadDialog( onDismiss: () -> Unit, onSave: (nome: String, documento: String, observacao: String, bitmap: Bitmap) -> Unit ) { var nome by remember { mutableStateOf("") } var documento by remember { mutableStateOf("") } var observacao by remember { mutableStateOf("") } val points = remember { mutableStateListOf() } Column( modifier = Modifier .fillMaxWidth() .padding(16.dp), verticalArrangement = Arrangement.spacedBy(10.dp) ) { Text("Ciência local", style = MaterialTheme.typography.titleMedium) OutlinedTextField( value = nome, onValueChange = { nome = it }, label = { Text("Nome do assinante") }, modifier = Modifier.fillMaxWidth() ) OutlinedTextField( value = documento, onValueChange = { documento = it }, label = { Text("Documento / matrícula") }, modifier = Modifier.fillMaxWidth() ) OutlinedTextField( value = observacao, onValueChange = { observacao = it }, label = { Text("Observação") }, modifier = Modifier.fillMaxWidth() ) Box( modifier = Modifier .fillMaxWidth() .height(220.dp) .background(Color.White, RoundedCornerShape(12.dp)) .border(1.dp, Color.Gray, RoundedCornerShape(12.dp)) .pointerInput(Unit) { detectDragGestures( onDragStart = { offset -> points.add(offset) }, onDrag = { change, _ -> points.add(change.position) } ) } ) { ComposeCanvas(modifier = Modifier.fillMaxWidth().height(220.dp)) { val path = Path() points.forEachIndexed { index, offset -> if (index == 0) path.moveTo(offset.x, offset.y) else path.lineTo(offset.x, offset.y) } drawPath(path = path, color = Color.Black, style = androidx.compose.ui.graphics.drawscope.Stroke(width = 4f, cap = StrokeCap.Round)) } } Row(horizontalArrangement = Arrangement.spacedBy(10.dp)) { OutlinedButton(onClick = { points.clear() }) { Text("Limpar") } OutlinedButton(onClick = onDismiss) { Text("Cancelar") } Button( onClick = { if (nome.isBlank() || points.size < 2) return@Button val bitmap = Bitmap.createBitmap(1000, 420, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) canvas.drawColor(android.graphics.Color.WHITE) val paint = Paint().apply { color = android.graphics.Color.BLACK strokeWidth = 6f style = Paint.Style.STROKE isAntiAlias = true } val androidPath = Path().apply { points.forEachIndexed { index, offset -> if (index == 0) moveTo(offset.x * 2f, offset.y * 2f) else lineTo(offset.x * 2f, offset.y * 2f) } }.asAndroidPath() canvas.drawPath(androidPath, paint) onSave(nome.trim(), documento.trim(), observacao.trim(), bitmap) } ) { Text("Salvar assinatura") } } } }