aves/lib/widgets/common/identity/aves_logo.dart
Thibault Deckers 67363ae258 changed logo
2024-04-28 23:48:29 +02:00

148 lines
6.4 KiB
Dart

import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/fx/borders.dart';
import 'package:aves/widgets/common/fx/colors.dart';
import 'package:aves_model/aves_model.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class AvesLogo extends StatelessWidget {
final double size;
const AvesLogo({
super.key,
required this.size,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
Widget child = CustomPaint(
size: Size(size / 1.4, size / 1.4),
painter: AvesLogoPainter(),
);
if (context.select<Settings, bool>((v) => v.themeColorMode == AvesThemeColorMode.monochrome)) {
final tint = Color.lerp(theme.colorScheme.primary, Colors.white, .5)!;
child = ColorFiltered(
colorFilter: ColorFilter.mode(tint, BlendMode.modulate),
child: ColorFiltered(
colorFilter: MatrixColorFilters.greyscale,
child: child,
),
);
}
return CircleAvatar(
backgroundColor: theme.dividerColor,
radius: size / 2,
child: CircleAvatar(
backgroundColor: Colors.white,
radius: size / 2 - AvesBorder.curvedBorderWidth(context),
child: child,
),
);
}
}
class AvesLogoPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final dim = size.width / 100;
final strokePaint = Paint()
..style = PaintingStyle.stroke
..color = Colors.black
..strokeWidth = dim * 3.050970
..strokeCap = StrokeCap.round
..strokeJoin = StrokeJoin.round;
final path0 = Path();
path0.moveTo(31.784 * dim, 63.612 * dim);
path0.lineTo(48.252 * dim, 80.08 * dim);
final radius = Radius.elliptical(2.911 * dim, 2.911 * dim);
path0.arcToPoint(Offset(48.252 * dim, 84.196 * dim), radius: radius, rotation: 0, largeArc: false, clockwise: true);
path0.lineTo(40.379000000000005 * dim, 92.069 * dim);
path0.arcToPoint(Offset(19.072000000000006 * dim, 92.069 * dim), radius: Radius.elliptical(15.067 * dim, 15.067 * dim), rotation: 0, largeArc: false, clockwise: true);
path0.lineTo(11.2 * dim, 84.197 * dim);
path0.arcToPoint(Offset(11.2 * dim, 80.08 * dim), radius: radius, rotation: 0, largeArc: false, clockwise: true);
path0.lineTo(27.668 * dim, 63.611999999999995 * dim);
path0.arcToPoint(Offset(31.785 * dim, 63.611999999999995 * dim), radius: radius, rotation: 0, largeArc: false, clockwise: true);
path0.close();
final path1 = Path();
path1.moveTo(56.368 * dim, 39.026 * dim);
path1.lineTo(72.837 * dim, 55.494 * dim);
final radius2 = Radius.elliptical(2.904 * dim, 2.904 * dim);
path1.arcToPoint(Offset(72.837 * dim, 59.611 * dim), radius: radius2, rotation: 0, largeArc: false, clockwise: true);
path1.lineTo(56.367000000000004 * dim, 76.079 * dim);
path1.arcToPoint(Offset(52.252 * dim, 76.079 * dim), radius: radius2, rotation: 0, largeArc: false, clockwise: true);
path1.lineTo(35.784 * dim, 59.611 * dim);
path1.arcToPoint(Offset(35.784 * dim, 55.495 * dim), radius: radius2, rotation: 0, largeArc: false, clockwise: true);
path1.lineTo(52.251999999999995 * dim, 39.027 * dim);
path1.arcToPoint(Offset(56.367999999999995 * dim, 39.027 * dim), radius: radius2, rotation: 0, largeArc: false, clockwise: true);
path1.close();
final path2 = Path();
path2.moveTo(60.37 * dim, 30.908 * dim);
final radius4 = Radius.elliptical(2.91 * dim, 2.91 * dim);
path2.arcToPoint(Offset(60.37 * dim, 35.025 * dim), radius: radius4, rotation: 0, largeArc: false, clockwise: false);
path2.lineTo(76.838 * dim, 51.492 * dim);
path2.arcToPoint(Offset(80.954 * dim, 51.492 * dim), radius: radius4, rotation: 0, largeArc: false, clockwise: false);
path2.lineTo(97.422 * dim, 35.025 * dim);
path2.arcToPoint(Offset(97.422 * dim, 30.907999999999998 * dim), radius: radius4, rotation: 0, largeArc: false, clockwise: false);
path2.lineTo(89.24799999999999 * dim, 22.733999999999998 * dim);
path2.arcToPoint(Offset(68.54399999999998 * dim, 22.733999999999998 * dim), radius: Radius.elliptical(14.64 * dim, 14.64 * dim), rotation: 0, largeArc: false, clockwise: false);
path2.close();
path2.moveTo(76.624 * dim, 30.695 * dim);
final radius5 = Radius.elliptical(3.213 * dim, 3.213 * dim);
path2.arcToPoint(Offset(81.167 * dim, 30.695 * dim), radius: radius5, rotation: 0, largeArc: false, clockwise: true);
path2.arcToPoint(Offset(81.167 * dim, 35.237 * dim), radius: radius5, rotation: 0, largeArc: false, clockwise: true);
path2.arcToPoint(Offset(76.624 * dim, 35.237 * dim), radius: radius5, rotation: 0, largeArc: false, clockwise: true);
path2.arcToPoint(Offset(76.624 * dim, 30.694000000000003 * dim), radius: radius5, rotation: 0, largeArc: false, clockwise: true);
path2.close();
final path3 = Path();
path3.moveTo(24.305 * dim, 6.96 * dim);
path3.lineTo(48.35 * dim, 31.004 * dim);
path3.arcToPoint(Offset(48.35 * dim, 35.121 * dim), radius: radius, rotation: 0, largeArc: false, clockwise: true);
path3.lineTo(31.882 * dim, 51.588 * dim);
path3.arcToPoint(Offset(27.765 * dim, 51.588 * dim), radius: radius, rotation: 0, largeArc: false, clockwise: true);
path3.lineTo(17.084 * dim, 40.907 * dim);
path3.arcToPoint(Offset(17.084 * dim, 8.75 * dim), radius: Radius.elliptical(22.738 * dim, 22.738 * dim), rotation: 0, largeArc: false, clockwise: true);
path3.lineTo(18.874 * dim, 6.96 * dim);
path3.arcToPoint(Offset(24.305 * dim, 6.96 * dim), radius: Radius.elliptical(3.84 * dim, 3.84 * dim), rotation: 0, largeArc: false, clockwise: true);
path3.close();
canvas.drawPath(
path0,
Paint()
..style = PaintingStyle.fill
..color = const Color(0xffef435a));
canvas.drawPath(
path1,
Paint()
..style = PaintingStyle.fill
..color = const Color(0xffe0e0e0));
canvas.drawPath(
path2,
Paint()
..style = PaintingStyle.fill
..color = const Color(0xffffc11f));
canvas.drawPath(
path3,
Paint()
..style = PaintingStyle.fill
..color = const Color(0xff1cc8eb));
// stroke should be painted over fill
canvas.drawPath(path0, strokePaint);
canvas.drawPath(path1, strokePaint);
canvas.drawPath(path2, strokePaint);
canvas.drawPath(path3, strokePaint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
}