Rebrand as TPSchedule and refine clear liquid glass dock
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// The original APP.svg gradient, expressed in its view-box coordinates.
|
||||
const tpBrandGradient = LinearGradient(
|
||||
begin: Alignment(2 * 324.09 / 2008.27 - 1, 2 * 1572.05 / 2009.62 - 1),
|
||||
end: Alignment(2 * 1871.99 / 2008.27 - 1, 2 * 280.93 / 2009.62 - 1),
|
||||
colors: [Color(0xFF3FD1FF), Color(0xFF38B3FF), Color(0xFF2A6CFF)],
|
||||
stops: [0, 0.28, 1],
|
||||
);
|
||||
|
||||
/// Vector rendering of assets/branding/APP.svg; no raster scaling or redesign.
|
||||
class TpLogo extends StatelessWidget {
|
||||
const TpLogo({super.key, this.size = 128, this.background = true});
|
||||
|
||||
final double size;
|
||||
final bool background;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Semantics(
|
||||
label: 'TPSchedule 标志',
|
||||
image: true,
|
||||
child: SizedBox.square(
|
||||
dimension: size,
|
||||
child: CustomPaint(painter: _TpLogoPainter(background: background)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
class _TpLogoPainter extends CustomPainter {
|
||||
const _TpLogoPainter({required this.background});
|
||||
final bool background;
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
canvas.save();
|
||||
canvas.scale(size.width / 2008.27, size.height / 2009.62);
|
||||
if (background) {
|
||||
const bounds = Rect.fromLTWH(0.5, 0.5, 2007.27, 2008.62);
|
||||
canvas.drawRect(
|
||||
bounds,
|
||||
Paint()
|
||||
..shader = tpBrandGradient.createShader(
|
||||
const Rect.fromLTWH(0, 0, 2008.27, 2009.62),
|
||||
),
|
||||
);
|
||||
canvas.drawRect(
|
||||
bounds,
|
||||
Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 1
|
||||
..color = Colors.black,
|
||||
);
|
||||
}
|
||||
final stroke = Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeJoin = StrokeJoin.miter
|
||||
..strokeMiterLimit = 10
|
||||
..strokeCap = StrokeCap.butt;
|
||||
canvas.drawRRect(
|
||||
RRect.fromRectAndRadius(
|
||||
const Rect.fromLTWH(405.1, 514.64, 1198.08, 1071.89),
|
||||
const Radius.circular(20),
|
||||
),
|
||||
stroke
|
||||
..color = const Color(0xFFFFD22A)
|
||||
..strokeWidth = 217,
|
||||
);
|
||||
stroke
|
||||
..color = Colors.white
|
||||
..strokeWidth = 150;
|
||||
for (final x in [704.07, 1249.91]) {
|
||||
canvas.drawRRect(
|
||||
RRect.fromRectAndRadius(
|
||||
Rect.fromLTWH(x, 339.92, 64.51, 349.44),
|
||||
const Radius.circular(27.65),
|
||||
),
|
||||
stroke,
|
||||
);
|
||||
}
|
||||
canvas.drawPath(
|
||||
Path()
|
||||
..moveTo(729.01, 1004.81)
|
||||
..relativeCubicTo(70.21, 112.08, 200.6, 174.7, 327.98, 152.69)
|
||||
..relativeCubicTo(122.48, -18.51, 206.2, -123.19, 222.28, -152.69),
|
||||
stroke..strokeWidth = 185,
|
||||
);
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(_TpLogoPainter oldDelegate) =>
|
||||
background != oldDelegate.background;
|
||||
}
|
||||
Reference in New Issue
Block a user