Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/web_ui/dev/goldens_lock.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
repository: https://github.com/flutter/goldens.git
revision: ac75f12c6e93461369e1391da6cc20bf8cb08829
revision: c808c28c81b6c3143ae969e8c49bed4a6d49aabb
5 changes: 3 additions & 2 deletions lib/web_ui/lib/src/engine/canvaskit/shader.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class CkGradientSweep extends CkShader implements ui.Gradient {

@override
SkShader createDefault() {
const double toDegrees = 180.0 / math.pi;
return canvasKit.Shader.MakeSweepGradient(
center.dx,
center.dy,
Expand All @@ -43,8 +44,8 @@ class CkGradientSweep extends CkShader implements ui.Gradient {
toSkTileMode(tileMode),
matrix4 != null ? toSkMatrixFromFloat32(matrix4!) : null,
0,
startAngle,
endAngle,
toDegrees * startAngle,
toDegrees * endAngle,
);
}

Expand Down
75 changes: 75 additions & 0 deletions lib/web_ui/test/canvaskit/sweep_gradient_golden_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// @dart = 2.12
import 'dart:math' as math;

import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart' as ui;

import 'package:web_engine_tester/golden_tester.dart';

import 'common.dart';

void main() {
internalBootstrapBrowserTest(() => testMain);
}

const ui.Rect region = const ui.Rect.fromLTRB(0, 0, 500, 250);

Future<void> matchPictureGolden(String goldenFile, CkPicture picture,
{bool write = false}) async {
final EnginePlatformDispatcher dispatcher =
ui.window.platformDispatcher as EnginePlatformDispatcher;
final LayerSceneBuilder sb = LayerSceneBuilder();
sb.pushOffset(0, 0);
sb.addPicture(ui.Offset.zero, picture);
dispatcher.rasterizer!.draw(sb.build().layerTree);
await matchGoldenFile(goldenFile, region: region, write: write);
}

void testMain() {
group('SweepGradient', () {
setUpCanvasKitTest();

test('is correctly rendered', () async {
final CkPictureRecorder recorder = CkPictureRecorder();
final CkCanvas canvas = recorder.beginRecording(region);

final CkGradientSweep gradient = CkGradientSweep(
ui.Offset(250, 125),
<ui.Color>[
ui.Color(0xFF4285F4),
ui.Color(0xFF34A853),
ui.Color(0xFFFBBC05),
ui.Color(0xFFEA4335),
ui.Color(0xFF4285F4),
],
<double>[
0.0,
0.25,
0.5,
0.75,
1.0,
],
ui.TileMode.clamp,
-(math.pi / 2),
math.pi * 2 - (math.pi / 2),
null);

final CkPaint paint = CkPaint()..shader = gradient;

canvas.drawRect(region, paint);

await matchPictureGolden(
'canvaskit_sweep_gradient.png',
recorder.endRecording(),
);
});
// TODO: https://github.com/flutter/flutter/issues/60040
// TODO: https://github.com/flutter/flutter/issues/71520
}, skip: isIosSafari || isFirefox);
}