blob: ad2634b66bc9964b6064ea50984db196323bc076 [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 'dart:typed_data';
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 'common.dart';
void main() {
internalBootstrapBrowserTest(() => testMain);
}
void testMain() {
List<CkColorFilter> createColorFilters() {
return <CkColorFilter>[
const EngineColorFilter.mode(ui.Color(0x12345678), ui.BlendMode.srcOver) as CkColorFilter,
const EngineColorFilter.mode(ui.Color(0x12345678), ui.BlendMode.dstOver) as CkColorFilter,
const EngineColorFilter.mode(ui.Color(0x87654321), ui.BlendMode.dstOver) as CkColorFilter,
const EngineColorFilter.matrix(<double>[
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0,
]) as CkColorFilter,
EngineColorFilter.matrix(Float32List.fromList(<double>[
2, 0, 0, 0, 0,
0, 2, 0, 0, 0,
0, 0, 2, 0, 0,
0, 0, 0, 2, 0,
])) as CkColorFilter,
const EngineColorFilter.linearToSrgbGamma() as CkColorFilter,
const EngineColorFilter.srgbToLinearGamma() as CkColorFilter,
];
}
List<CkImageFilter> createImageFilters() {
return <CkImageFilter>[
CkImageFilter.blur(sigmaX: 5, sigmaY: 6, tileMode: ui.TileMode.clamp),
CkImageFilter.blur(sigmaX: 6, sigmaY: 5, tileMode: ui.TileMode.clamp),
CkImageFilter.blur(sigmaX: 6, sigmaY: 5, tileMode: ui.TileMode.decal),
for (final CkColorFilter colorFilter in createColorFilters()) CkImageFilter.color(colorFilter: colorFilter),
];
}
group('ImageFilters', () {
setUpCanvasKitTest();
test('can be constructed', () {
final CkImageFilter imageFilter = CkImageFilter.blur(sigmaX: 5, sigmaY: 10, tileMode: ui.TileMode.clamp);
expect(imageFilter, isA<CkImageFilter>());
expect(imageFilter.createDefault(), isNotNull);
expect(imageFilter.resurrect(), isNotNull);
});
test('== operator', () {
final List<ui.ImageFilter> filters1 = <ui.ImageFilter>[
...createImageFilters(),
...createColorFilters(),
];
final List<ui.ImageFilter> filters2 = <ui.ImageFilter>[
...createImageFilters(),
...createColorFilters(),
];
for (int index1 = 0; index1 < filters1.length; index1 += 1) {
final ui.ImageFilter imageFilter1 = filters1[index1];
expect(imageFilter1 == imageFilter1, isTrue);
for (int index2 = 0; index2 < filters2.length; index2 += 1) {
final ui.ImageFilter imageFilter2 = filters2[index2];
expect(imageFilter1 == imageFilter2, imageFilter2 == imageFilter1);
expect(imageFilter1 == imageFilter2, index1 == index2);
}
}
});
test('reuses the Skia filter', () {
final CkPaint paint = CkPaint();
paint.imageFilter = CkImageFilter.blur(sigmaX: 5, sigmaY: 10, tileMode: ui.TileMode.clamp);
final ManagedSkiaObject<Object> managedFilter = paint.imageFilter! as ManagedSkiaObject<Object>;
final Object skiaFilter = managedFilter.skiaObject;
paint.imageFilter = CkImageFilter.blur(sigmaX: 5, sigmaY: 10, tileMode: ui.TileMode.clamp);
expect((paint.imageFilter! as ManagedSkiaObject<Object>).skiaObject, same(skiaFilter));
});
// TODO: https://github.com/flutter/flutter/issues/60040
}, skip: isIosSafari);
group('MaskFilter', () {
setUpCanvasKitTest();
test('with 0 sigma can be set on a Paint', () {
final ui.Paint paint = ui.Paint();
const ui.MaskFilter filter = ui.MaskFilter.blur(ui.BlurStyle.normal, 0);
expect(() => paint.maskFilter = filter, isNot(throwsException));
});
// TODO: https://github.com/flutter/flutter/issues/60040
}, skip: isIosSafari);
}