diff --git a/sky/engine/bindings/dart_ui.cc b/sky/engine/bindings/dart_ui.cc index 7387929cd29..52ea49372dc 100644 --- a/sky/engine/bindings/dart_ui.cc +++ b/sky/engine/bindings/dart_ui.cc @@ -8,6 +8,8 @@ #include "sky/engine/bindings/dart_runtime_hooks.h" #include "sky/engine/core/compositing/Scene.h" #include "sky/engine/core/compositing/SceneBuilder.h" +#include "sky/engine/core/painting/ColorFilter.h" +#include "sky/engine/core/painting/MaskFilter.h" #include "sky/engine/core/painting/DrawLooperLayerInfo.h" #include "sky/engine/core/painting/LayerDrawLooperBuilder.h" #include "sky/engine/core/painting/painting.h" @@ -46,6 +48,8 @@ void DartUI::InitForIsolate() { DartRuntimeHooks::RegisterNatives(g_natives); DrawLooperLayerInfo::RegisterNatives(g_natives); LayerDrawLooperBuilder::RegisterNatives(g_natives); + ColorFilter::RegisterNatives(g_natives); + MaskFilter::RegisterNatives(g_natives); Painting::RegisterNatives(g_natives); Paragraph::RegisterNatives(g_natives); ParagraphBuilder::RegisterNatives(g_natives); diff --git a/sky/engine/core/core.gni b/sky/engine/core/core.gni index 6eb3e383a0d..f8b6c340996 100644 --- a/sky/engine/core/core.gni +++ b/sky/engine/core/core.gni @@ -235,11 +235,9 @@ sky_core_files = [ core_idl_files = get_path_info([ "painting/Canvas.idl", - "painting/ColorFilter.idl", "painting/Gradient.idl", "painting/Image.idl", "painting/ImageShader.idl", - "painting/MaskFilter.idl", "painting/Path.idl", "painting/Picture.idl", "painting/PictureRecorder.idl", @@ -257,11 +255,9 @@ core_dart_files = get_path_info([ "dart/text.dart", "dart/window.dart", "painting/Color.dart", - "painting/ColorFilter.dart", "painting/FilterQuality.dart", "painting/Gradient.dart", "painting/ImageShader.dart", - "painting/MaskFilter.dart", "painting/Offset.dart", "painting/OffsetBase.dart", "painting/Paint.dart", diff --git a/sky/engine/core/dart/painting.dart b/sky/engine/core/dart/painting.dart index f2e8d7dc341..12e4c53f1a2 100644 --- a/sky/engine/core/dart/painting.dart +++ b/sky/engine/core/dart/painting.dart @@ -50,3 +50,36 @@ class LayerDrawLooperBuilder extends NativeFieldWrapperClass2 { DrawLooper build() native "LayerDrawLooperBuilder_build"; void addLayerOnTop(DrawLooperLayerInfo info, Paint paint) native "LayerDrawLooperBuilder_addLayerOnTop"; } + +/// Blur styles. These mirror SkBlurStyle and must be kept in sync. +enum BlurStyle { + normal, /// Fuzzy inside and outside. + solid, /// Solid inside, fuzzy outside. + outer, /// Nothing inside, fuzzy outside. + inner, /// Fuzzy inside, nothing outside. +} + +// Convert constructor parameters to the SkBlurMaskFilter::BlurFlags type. +int _makeBlurFlags(bool ignoreTransform, bool highQuality) { + int flags = 0; + if (ignoreTransform) + flags |= 0x01; + if (highQuality) + flags |= 0x02; + return flags; +} + +class MaskFilter extends NativeFieldWrapperClass2 { + void _constructor(int style, double sigma, int flags) native "MaskFilter_constructor"; + MaskFilter.blur(BlurStyle style, double sigma, + {bool ignoreTransform: false, bool highQuality: false}) { + _constructor(style.index, sigma, _makeBlurFlags(ignoreTransform, highQuality)); + } +} + +class ColorFilter extends NativeFieldWrapperClass2 { + void _constructor(Color color, TransferMode transferMode) native "ColorFilter_constructor"; + ColorFilter.mode(Color color, TransferMode transferMode) { + _constructor(color, transferMode); + } +} diff --git a/sky/engine/core/painting/ColorFilter.cpp b/sky/engine/core/painting/ColorFilter.cpp index 66dbb03189b..f26cd860830 100644 --- a/sky/engine/core/painting/ColorFilter.cpp +++ b/sky/engine/core/painting/ColorFilter.cpp @@ -4,11 +4,27 @@ #include "sky/engine/core/painting/ColorFilter.h" +#include "sky/engine/tonic/dart_args.h" +#include "sky/engine/tonic/dart_binding_macros.h" +#include "sky/engine/tonic/dart_converter.h" +#include "sky/engine/tonic/dart_library_natives.h" + namespace blink { -// static -PassRefPtr ColorFilter::create(SkColor color, - SkXfermode::Mode transfer_mode) { +static void ColorFilter_constructor(Dart_NativeArguments args) { + DartCallConstructor(&ColorFilter::create, args); +} + +IMPLEMENT_WRAPPERTYPEINFO(ColorFilter); + +void ColorFilter::RegisterNatives(DartLibraryNatives* natives) { + natives->Register({ + { "ColorFilter_constructor", ColorFilter_constructor, 3, true }, + }); +} + +PassRefPtr ColorFilter::create(CanvasColor color, + TransferMode transfer_mode) { return adoptRef(new ColorFilter( adoptRef(SkColorFilter::CreateModeFilter(color, transfer_mode)))); } diff --git a/sky/engine/core/painting/ColorFilter.dart b/sky/engine/core/painting/ColorFilter.dart deleted file mode 100644 index 6b98199bc63..00000000000 --- a/sky/engine/core/painting/ColorFilter.dart +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -part of dart_ui; - -/// Extends the generated _ColorFilter interface via the PrivateDart attribute. -class ColorFilter extends _ColorFilter { - // This is the only ColorFilter type we need, but use a named constructor so - // we can add more in the future. - ColorFilter.mode(Color color, TransferMode transferMode) - : super(color, transferMode); -} diff --git a/sky/engine/core/painting/ColorFilter.h b/sky/engine/core/painting/ColorFilter.h index eab966388ef..c48f60480ac 100644 --- a/sky/engine/core/painting/ColorFilter.h +++ b/sky/engine/core/painting/ColorFilter.h @@ -13,16 +13,19 @@ #include "third_party/skia/include/core/SkColorFilter.h" namespace blink { +class DartLibraryNatives; class ColorFilter : public RefCounted, public DartWrappable { DEFINE_WRAPPERTYPEINFO(); public: ~ColorFilter() override; - static PassRefPtr create(SkColor color, - SkXfermode::Mode transfer_mode); + static PassRefPtr create(CanvasColor color, + TransferMode transfer_mode); SkColorFilter* filter() { return filter_.get(); } + static void RegisterNatives(DartLibraryNatives* natives); + private: ColorFilter(PassRefPtr filter); diff --git a/sky/engine/core/painting/ColorFilter.idl b/sky/engine/core/painting/ColorFilter.idl deleted file mode 100644 index 0d57a504ce7..00000000000 --- a/sky/engine/core/painting/ColorFilter.idl +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -[ - PrivateDart, - Constructor(Color color, TransferMode transferMode), -] interface ColorFilter { -}; diff --git a/sky/engine/core/painting/MaskFilter.cpp b/sky/engine/core/painting/MaskFilter.cpp index bbfc6ad4d6d..1da2242e3d9 100644 --- a/sky/engine/core/painting/MaskFilter.cpp +++ b/sky/engine/core/painting/MaskFilter.cpp @@ -5,10 +5,25 @@ #include "sky/engine/core/painting/MaskFilter.h" #include "third_party/skia/include/effects/SkBlurMaskFilter.h" +#include "sky/engine/tonic/dart_args.h" +#include "sky/engine/tonic/dart_binding_macros.h" +#include "sky/engine/tonic/dart_converter.h" +#include "sky/engine/tonic/dart_library_natives.h" namespace blink { -// static +static void MaskFilter_constructor(Dart_NativeArguments args) { + DartCallConstructor(&MaskFilter::create, args); +} + +IMPLEMENT_WRAPPERTYPEINFO(MaskFilter); + +void MaskFilter::RegisterNatives(DartLibraryNatives* natives) { + natives->Register({ + { "MaskFilter_constructor", MaskFilter_constructor, 4, true }, + }); +} + PassRefPtr MaskFilter::create( unsigned style, double sigma, unsigned flags) { return adoptRef(new MaskFilter(adoptRef(SkBlurMaskFilter::Create( diff --git a/sky/engine/core/painting/MaskFilter.dart b/sky/engine/core/painting/MaskFilter.dart deleted file mode 100644 index b9ec2dc7e86..00000000000 --- a/sky/engine/core/painting/MaskFilter.dart +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -part of dart_ui; - -/// Blur styles. These mirror SkBlurStyle and must be kept in sync. -enum BlurStyle { - normal, /// Fuzzy inside and outside. - solid, /// Solid inside, fuzzy outside. - outer, /// Nothing inside, fuzzy outside. - inner, /// Fuzzy inside, nothing outside. -} - -// Extends the generated _MaskFilter interface via the PrivateDart attribute. -class MaskFilter extends _MaskFilter { - MaskFilter.blur(BlurStyle style, double sigma, - {bool ignoreTransform: false, bool highQuality: false}) - : super(style.index, sigma, _makeBlurFlags(ignoreTransform, highQuality)); - - // Convert constructor parameters to the SkBlurMaskFilter::BlurFlags type. - static int _makeBlurFlags(bool ignoreTransform, bool highQuality) { - int flags = 0; - if (ignoreTransform) flags |= 0x01; - if (highQuality) flags |= 0x02; - return flags; - } -} diff --git a/sky/engine/core/painting/MaskFilter.h b/sky/engine/core/painting/MaskFilter.h index e962397ac6c..f6633bb4875 100644 --- a/sky/engine/core/painting/MaskFilter.h +++ b/sky/engine/core/painting/MaskFilter.h @@ -12,6 +12,7 @@ class SkMaskFilter; namespace blink { +class DartLibraryNatives; class MaskFilter : public RefCounted, public DartWrappable { DEFINE_WRAPPERTYPEINFO(); @@ -22,6 +23,8 @@ class MaskFilter : public RefCounted, public DartWrappable { SkMaskFilter* filter() { return filter_.get(); } + static void RegisterNatives(DartLibraryNatives* natives); + private: MaskFilter(PassRefPtr filter); diff --git a/sky/engine/core/painting/MaskFilter.idl b/sky/engine/core/painting/MaskFilter.idl deleted file mode 100644 index 6bb2387e90d..00000000000 --- a/sky/engine/core/painting/MaskFilter.idl +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -[ - PrivateDart, - Constructor(unsigned long style, double sigma, unsigned long flags) -] interface MaskFilter { -};