widget: use system defined corner radius

This commit is contained in:
Thibault Deckers 2024-07-05 22:26:40 +02:00
parent f8525db84e
commit fdb34edf13
4 changed files with 13 additions and 4 deletions

View file

@ -104,7 +104,11 @@ class HomeWidgetProvider : AppWidgetProvider() {
"drawEntryImage" to drawEntryImage,
"reuseEntry" to reuseEntry,
"isSystemThemeDark" to isNightModeOn,
), object : MethodChannel.Result {
).apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
put("cornerRadiusPx", context.resources.getDimension(android.R.dimen.system_app_widget_background_radius))
}
}, object : MethodChannel.Result {
override fun success(result: Any?) {
cont.resume(result)
}

View file

@ -3,11 +3,13 @@ import 'package:aves_model/aves_model.dart';
import 'package:flutter/painting.dart';
extension ExtraWidgetShape on WidgetShape {
Path path(Size widgetSize, double devicePixelRatio) {
static const double _defaultCornerRadius = 24;
Path path(Size widgetSize, double devicePixelRatio, {double? cornerRadiusPx}) {
final rect = Offset.zero & widgetSize;
switch (this) {
case WidgetShape.rrect:
return Path()..addRRect(BorderRadius.circular(24 * devicePixelRatio).toRRect(rect));
return Path()..addRRect(BorderRadius.circular(cornerRadiusPx ?? (_defaultCornerRadius * devicePixelRatio)).toRRect(rect));
case WidgetShape.circle:
return Path()
..addOval(Rect.fromCircle(

View file

@ -40,6 +40,7 @@ Future<Map<String, dynamic>> _drawWidget(dynamic args) async {
final widgetId = args['widgetId'] as int;
final widthPx = args['widthPx'] as int;
final heightPx = args['heightPx'] as int;
final cornerRadiusPx = args['cornerRadiusPx'] as double?;
final devicePixelRatio = args['devicePixelRatio'] as double;
final drawEntryImage = args['drawEntryImage'] as bool;
final reuseEntry = args['reuseEntry'] as bool;
@ -56,6 +57,7 @@ Future<Map<String, dynamic>> _drawWidget(dynamic args) async {
final bytes = await painter.drawWidget(
widthPx: widthPx,
heightPx: heightPx,
cornerRadiusPx: cornerRadiusPx,
outline: outline,
shape: settings.getWidgetShape(widgetId),
);

View file

@ -29,6 +29,7 @@ class HomeWidgetPainter {
Future<Uint8List> drawWidget({
required int widthPx,
required int heightPx,
required double? cornerRadiusPx,
required Color? outline,
required WidgetShape shape,
ui.ImageByteFormat format = ui.ImageByteFormat.rawRgba,
@ -45,7 +46,7 @@ class HomeWidgetPainter {
final recorder = ui.PictureRecorder();
final rect = Offset.zero & widgetSizePx;
final canvas = Canvas(recorder, rect);
final path = shape.path(widgetSizePx, devicePixelRatio);
final path = shape.path(widgetSizePx, devicePixelRatio, cornerRadiusPx: cornerRadiusPx);
canvas.clipPath(path);
if (entryImage != null) {
canvas.drawImage(entryImage, Offset(widgetSizePx.width - entryImage.width, widgetSizePx.height - entryImage.height) / 2, Paint());