blob: 2d2b34535dc619a8b58c8c54fc8c79706c4aca57 [file] [log] [blame]
// 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.
import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart';
import 'paragraph/helper.dart';
import 'screenshot.dart';
void main() {
internalBootstrapBrowserTest(() => testMain);
}
Future<void> testMain() async {
setUpStableTestFonts();
/// Regression test for https://github.com/flutter/flutter/issues/64734.
test('Clips using difference', () async {
const Offset shift = Offset(8, 8);
const Rect region = Rect.fromLTRB(0, 0, 400, 300);
final RecordingCanvas canvas = RecordingCanvas(region);
final Rect titleRect = const Rect.fromLTWH(20, 0, 50, 20).shift(shift);
final SurfacePaint paint = SurfacePaint()
..style = PaintingStyle.stroke
..color = const Color(0xff000000)
..strokeWidth = 1;
canvas.save();
try {
final Rect borderRect = Rect.fromLTRB(0, 10, region.width, region.height).shift(shift);
canvas.clipRect(titleRect, ClipOp.difference);
canvas.drawRect(borderRect, paint);
} finally {
canvas.restore();
}
canvas.drawRect(titleRect, paint);
await canvasScreenshot(canvas, 'clip_op_difference',
region: const Rect.fromLTRB(0, 0, 420, 360));
});
/// Regression test for https://github.com/flutter/flutter/issues/86345
test('Clips with zero width or height', () async {
const Rect region = Rect.fromLTRB(0, 0, 400, 300);
final RecordingCanvas canvas = RecordingCanvas(region);
final SurfacePaint paint = SurfacePaint()
..style = PaintingStyle.fill
..color = const Color(0xff00ff00);
final SurfacePaint borderPaint = SurfacePaint()
..style = PaintingStyle.stroke
..color = const Color(0xffff0000)
..strokeWidth = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
final double x = 10 + i * 70;
final double y = 10 + j * 70;
canvas.save();
// Clip.
canvas.clipRect(
Rect.fromLTWH(x, y, i * 25, j * 25),
ClipOp.intersect,
);
// Draw the blue (clipped) rect.
canvas.drawRect(
Rect.fromLTWH(x, y, 50, 50),
paint,
);
final Paragraph p = plain(
EngineParagraphStyle(fontFamily: 'Roboto', fontSize: 34),
'23',
textStyle: EngineTextStyle.only(color: const Color(0xff0000ff)),
);
p.layout(const ParagraphConstraints(width: double.infinity));
canvas.drawParagraph(p, Offset(x, y));
canvas.restore();
// Draw the red border.
canvas.drawRect(
Rect.fromLTWH(x, y, 50, 50),
borderPaint,
);
}
}
await canvasScreenshot(canvas, 'clip_zero_width_height', region: region);
});
}