mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
feat: render los elevation via svg
This commit is contained in:
parent
aaf79c90c9
commit
9bcb8b9ca6
4 changed files with 67 additions and 76 deletions
|
|
@ -1,6 +1,5 @@
|
|||
import 'dart:math' as math;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class LosIcon extends StatelessWidget {
|
||||
final double size;
|
||||
|
|
@ -15,66 +14,11 @@ class LosIcon extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final iconColor = color ?? IconTheme.of(context).color ?? Colors.black;
|
||||
final canvasSize = size;
|
||||
|
||||
return SizedBox(
|
||||
width: canvasSize,
|
||||
height: canvasSize,
|
||||
child: CustomPaint(
|
||||
painter: _LosIconPainter(iconColor),
|
||||
),
|
||||
return SvgPicture.asset(
|
||||
'assets/icons/los_elevation.svg',
|
||||
width: size,
|
||||
height: size,
|
||||
colorFilter: ColorFilter.mode(iconColor, BlendMode.srcIn),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _LosIconPainter extends CustomPainter {
|
||||
final Color color;
|
||||
|
||||
_LosIconPainter(this.color);
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final paint = Paint()
|
||||
..color = color
|
||||
..style = PaintingStyle.fill;
|
||||
|
||||
final path = Path()
|
||||
..moveTo(82, -120)
|
||||
..relativeLineTo(258, -360)
|
||||
..relativeLineTo(202, 0)
|
||||
..relativeLineTo(298, -348)
|
||||
..relativeLineTo(0, 708)
|
||||
..lineTo(82, -120)
|
||||
..close()
|
||||
..moveTo(152, -353)
|
||||
..relativeLineTo(-64, -46)
|
||||
..relativeLineTo(172, -241)
|
||||
..relativeLineTo(202, 0)
|
||||
..relativeLineTo(188, -219)
|
||||
..relativeLineTo(60, 52)
|
||||
..relativeLineTo(-212, 247)
|
||||
..lineTo(300, -560)
|
||||
..lineTo(152, -353)
|
||||
..close()
|
||||
..moveTo(238, -200)
|
||||
..relativeLineTo(522, 0)
|
||||
..relativeLineTo(0, -412)
|
||||
..lineTo(578, -400)
|
||||
..lineTo(380, -400)
|
||||
..lineTo(238, -200)
|
||||
..close();
|
||||
|
||||
final scale = math.min(size.width, size.height) / 960;
|
||||
|
||||
canvas.save();
|
||||
canvas.translate(0, 960);
|
||||
canvas.scale(scale, scale);
|
||||
canvas.drawPath(path, paint);
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant _LosIconPainter oldDelegate) {
|
||||
return oldDelegate.color != color;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue