mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-24 00:10:47 +00:00
fixed topbar shape
This commit is contained in:
parent
c70fd29cfc
commit
50bc17214d
1 changed files with 40 additions and 27 deletions
|
@ -1,45 +1,58 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:lightmeter/res/dimens.dart';
|
||||
|
||||
class TopBarShape extends CustomPainter {
|
||||
final Color color;
|
||||
final Size appendixSize;
|
||||
final double radius;
|
||||
|
||||
TopBarShape({
|
||||
required this.color,
|
||||
required this.appendixSize,
|
||||
required this.radius,
|
||||
});
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final paint = Paint()..color = color;
|
||||
final path = Path();
|
||||
final circularRadius = Radius.circular(radius);
|
||||
path.moveTo(size.width, 0);
|
||||
path.lineTo(size.width, size.height - radius);
|
||||
path.arcToPoint(
|
||||
Offset(size.width - radius, size.height),
|
||||
radius: circularRadius,
|
||||
);
|
||||
path.lineTo(size.width - appendixSize.width + radius, size.height);
|
||||
path.arcToPoint(
|
||||
Offset(size.width - appendixSize.width, size.height - radius),
|
||||
radius: circularRadius,
|
||||
);
|
||||
path.lineTo(size.width - appendixSize.width, size.height - appendixSize.height + radius);
|
||||
path.arcToPoint(
|
||||
Offset(size.width - appendixSize.width - radius, size.height - appendixSize.height),
|
||||
radius: circularRadius,
|
||||
clockwise: false,
|
||||
);
|
||||
path.lineTo(radius, size.height - appendixSize.height);
|
||||
path.arcToPoint(
|
||||
Offset(0, size.height - appendixSize.height - radius),
|
||||
radius: circularRadius,
|
||||
);
|
||||
path.lineTo(0, 0);
|
||||
path.close();
|
||||
const circularRadius = Radius.circular(Dimens.borderRadiusL);
|
||||
if (appendixSize.shortestSide == 0) {
|
||||
path.addRRect(
|
||||
RRect.fromLTRBAndCorners(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bottomLeft: circularRadius,
|
||||
bottomRight: circularRadius,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
path.moveTo(size.width, 0);
|
||||
path.lineTo(size.width, size.height - Dimens.borderRadiusL);
|
||||
path.arcToPoint(
|
||||
Offset(size.width - Dimens.borderRadiusL, size.height),
|
||||
radius: circularRadius,
|
||||
);
|
||||
path.lineTo(size.width - appendixSize.width + Dimens.borderRadiusL, size.height);
|
||||
path.arcToPoint(
|
||||
Offset(size.width - appendixSize.width, size.height - Dimens.borderRadiusL),
|
||||
radius: circularRadius,
|
||||
);
|
||||
path.lineTo(size.width - appendixSize.width, size.height - appendixSize.height + Dimens.borderRadiusM);
|
||||
path.arcToPoint(
|
||||
Offset(size.width - appendixSize.width - Dimens.borderRadiusM, size.height - appendixSize.height),
|
||||
radius: circularRadius,
|
||||
clockwise: false,
|
||||
);
|
||||
path.lineTo(Dimens.borderRadiusL, size.height - appendixSize.height);
|
||||
|
||||
path.arcToPoint(
|
||||
Offset(0, size.height - appendixSize.height - Dimens.borderRadiusL),
|
||||
radius: circularRadius,
|
||||
);
|
||||
path.lineTo(0, 0);
|
||||
path.close();
|
||||
}
|
||||
canvas.drawPath(path, paint);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue