fixed topbar shape

This commit is contained in:
Vadim 2022-10-24 23:24:52 +03:00
parent c70fd29cfc
commit 50bc17214d

View file

@ -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);
}