73 lines
5.3 KiB
Dart
73 lines
5.3 KiB
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
import 'package:google_fonts/google_fonts.dart';
|
||
|
|
import 'dart:math' as math;
|
||
|
|
import '../core/app_colors.dart'; // Import aggiornato
|
||
|
|
|
||
|
|
TextStyle getSharedTextStyle(AppThemeType themeType, TextStyle baseStyle) {
|
||
|
|
if (themeType == AppThemeType.doodle) {
|
||
|
|
return GoogleFonts.permanentMarker(textStyle: baseStyle);
|
||
|
|
} else if (themeType == AppThemeType.arcade) {
|
||
|
|
return GoogleFonts.pressStart2p(textStyle: baseStyle.copyWith(fontSize: baseStyle.fontSize != null ? baseStyle.fontSize! * 0.75 : null, letterSpacing: 0.5));
|
||
|
|
} else if (themeType == AppThemeType.grimorio) {
|
||
|
|
return GoogleFonts.cinzelDecorative(textStyle: baseStyle.copyWith(fontWeight: FontWeight.bold));
|
||
|
|
} else if (themeType == AppThemeType.music) {
|
||
|
|
return GoogleFonts.audiowide(textStyle: baseStyle.copyWith(letterSpacing: 1.5));
|
||
|
|
}
|
||
|
|
return baseStyle;
|
||
|
|
}
|
||
|
|
|
||
|
|
class DoodleBackgroundPainter extends CustomPainter {
|
||
|
|
final Color fillColor; final Color strokeColor; final int seed; final bool isCircle;
|
||
|
|
DoodleBackgroundPainter({required this.fillColor, required this.strokeColor, required this.seed, this.isCircle = false});
|
||
|
|
|
||
|
|
@override
|
||
|
|
void paint(Canvas canvas, Size size) {
|
||
|
|
final math.Random random = math.Random(seed);
|
||
|
|
double wobble() => random.nextDouble() * 6 - 3;
|
||
|
|
final Paint fillPaint = Paint()..color = fillColor..style = PaintingStyle.fill;
|
||
|
|
final Paint strokePaint = Paint()..color = strokeColor..strokeWidth = 2.5..style = PaintingStyle.stroke..strokeCap = StrokeCap.round..strokeJoin = StrokeJoin.round;
|
||
|
|
|
||
|
|
if (isCircle) {
|
||
|
|
final Rect rect = Rect.fromLTWH(wobble(), wobble(), size.width + wobble(), size.height + wobble());
|
||
|
|
canvas.save(); canvas.translate(wobble(), wobble()); canvas.drawOval(rect, fillPaint); canvas.restore();
|
||
|
|
canvas.drawOval(rect, strokePaint);
|
||
|
|
canvas.save(); canvas.translate(random.nextDouble() * 4 - 2, random.nextDouble() * 4 - 2); canvas.drawOval(rect, strokePaint..strokeWidth = 1.0..color = strokeColor.withOpacity(0.6)); canvas.restore();
|
||
|
|
} else {
|
||
|
|
final Path path = Path()..moveTo(wobble(), wobble())..lineTo(size.width + wobble(), wobble())..lineTo(size.width + wobble(), size.height + wobble())..lineTo(wobble(), size.height + wobble())..close();
|
||
|
|
final Path fillPath = Path()..moveTo(wobble() * 1.5, wobble() * 1.5)..lineTo(size.width + wobble() * 1.5, wobble() * 1.5)..lineTo(size.width + wobble() * 1.5, size.height + wobble() * 1.5)..lineTo(wobble() * 1.5, size.height + wobble() * 1.5)..close();
|
||
|
|
canvas.drawPath(fillPath, fillPaint);
|
||
|
|
canvas.drawPath(path, strokePaint);
|
||
|
|
canvas.save(); canvas.translate(random.nextDouble() * 3 - 1.5, random.nextDouble() * 3 - 1.5); canvas.drawPath(path, strokePaint..strokeWidth = 1.0..color = strokeColor.withOpacity(0.6)); canvas.restore();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
@override bool shouldRepaint(covariant DoodleBackgroundPainter oldDelegate) => oldDelegate.fillColor != fillColor || oldDelegate.strokeColor != strokeColor;
|
||
|
|
}
|
||
|
|
|
||
|
|
class AudioCablesPainter extends CustomPainter {
|
||
|
|
@override
|
||
|
|
void paint(Canvas canvas, Size size) {
|
||
|
|
final paint = Paint()..color = const Color(0xFF151515)..style = PaintingStyle.stroke..strokeWidth = 8.0..strokeCap = StrokeCap.round;
|
||
|
|
final highlight = Paint()..color = const Color(0xFF3A3A3A)..style = PaintingStyle.stroke..strokeWidth = 2.0..strokeCap = StrokeCap.round;
|
||
|
|
void drawCable(Path path) { canvas.drawPath(path, paint); canvas.drawPath(path, highlight); }
|
||
|
|
|
||
|
|
Path c1 = Path()..moveTo(-20, size.height * 0.2)..quadraticBezierTo(100, size.height * 0.25, 50, size.height * 0.4)..quadraticBezierTo(0, size.height * 0.5, -20, size.height * 0.55); drawCable(c1);
|
||
|
|
Path c2 = Path()..moveTo(size.width + 20, size.height * 0.4)..quadraticBezierTo(size.width - 100, size.height * 0.5, size.width - 50, size.height * 0.7)..quadraticBezierTo(size.width, size.height * 0.8, size.width + 20, size.height * 0.85); drawCable(c2);
|
||
|
|
Path c3 = Path()..moveTo(size.width * 0.2, size.height + 20)..quadraticBezierTo(size.width * 0.3, size.height - 80, size.width * 0.5, size.height - 60)..quadraticBezierTo(size.width * 0.7, size.height - 40, size.width * 0.8, size.height + 20); drawCable(c3);
|
||
|
|
|
||
|
|
_drawJack(canvas, Offset(80, size.height * 0.38), -0.5);
|
||
|
|
_drawJack(canvas, Offset(size.width - 60, size.height * 0.68), 0.8);
|
||
|
|
}
|
||
|
|
|
||
|
|
void _drawJack(Canvas canvas, Offset pos, double angle) {
|
||
|
|
canvas.save(); canvas.translate(pos.dx, pos.dy); canvas.rotate(angle);
|
||
|
|
canvas.drawRect(const Rect.fromLTWH(-15, -4, 15, 8), Paint()..color = const Color(0xFF151515));
|
||
|
|
canvas.drawRRect(RRect.fromRectAndRadius(const Rect.fromLTWH(0, -6, 25, 12), const Radius.circular(2)), Paint()..color = const Color(0xFF222222));
|
||
|
|
canvas.drawRRect(RRect.fromRectAndRadius(const Rect.fromLTWH(2, -4, 21, 8), const Radius.circular(2)), Paint()..color = const Color(0xFF444444));
|
||
|
|
canvas.drawRect(const Rect.fromLTWH(25, -2, 15, 4), Paint()..color = const Color(0xFFCCCCCC));
|
||
|
|
canvas.drawRect(const Rect.fromLTWH(40, -1.5, 5, 3), Paint()..color = const Color(0xFFAAAAAA));
|
||
|
|
canvas.drawLine(const Offset(30, -2), const Offset(30, 2), Paint()..color = Colors.black..strokeWidth = 1.5);
|
||
|
|
canvas.drawLine(const Offset(35, -2), const Offset(35, 2), Paint()..color = Colors.black..strokeWidth = 1.5);
|
||
|
|
canvas.restore();
|
||
|
|
}
|
||
|
|
@override bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
|
||
|
|
}
|