// 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. #include "sky/engine/core/painting/Paint.h" #include "sky/engine/core/painting/CanvasColor.h" #include "sky/engine/core/painting/ColorFilter.h" #include "sky/engine/core/painting/DrawLooper.h" #include "sky/engine/core/painting/FilterQuality.h" #include "sky/engine/core/painting/MaskFilter.h" #include "sky/engine/core/painting/PaintingStyle.h" #include "sky/engine/core/painting/Shader.h" #include "sky/engine/core/painting/TransferMode.h" #include "sky/engine/core/script/dom_dart_state.h" #include "sky/engine/wtf/text/StringBuilder.h" #include "third_party/skia/include/core/SkColorFilter.h" #include "third_party/skia/include/core/SkMaskFilter.h" #include "third_party/skia/include/core/SkShader.h" #include "third_party/skia/include/core/SkString.h" #include namespace blink { namespace { enum PaintFields { kStrokeWidth, kIsAntiAlias, kColor, kColorFilter, kDrawLooper, kFilterQuality, kMaskFilter, kShader, kStyle, kTransferMode, // kNumberOfPaintFields must be last. kNumberOfPaintFields, }; } Paint DartConverter::FromDart(Dart_Handle dart_paint) { Paint result; result.is_null = true; if (Dart_IsNull(dart_paint)) return result; Dart_Handle value_handle = DOMDartState::Current()->value_handle(); Dart_Handle data = Dart_GetField(dart_paint, value_handle); DCHECK(Dart_IsList(data)); intptr_t length; Dart_ListLength(data, &length); CHECK_EQ(length, kNumberOfPaintFields); Dart_Handle values[kNumberOfPaintFields]; for (int i = 0; i < kNumberOfPaintFields; ++i) values[i] = Dart_ListGetAt(data, i); SkPaint& paint = result.sk_paint; if (!Dart_IsNull(values[kStrokeWidth])) paint.setStrokeWidth(DartConverter::FromDart(values[kStrokeWidth])); if (!Dart_IsNull(values[kIsAntiAlias])) paint.setAntiAlias(DartConverter::FromDart(values[kIsAntiAlias])); if (!Dart_IsNull(values[kColor])) paint.setColor(DartConverter::FromDart(values[kColor])); if (!Dart_IsNull(values[kColorFilter])) paint.setColorFilter(DartConverter::FromDart(values[kColorFilter])->filter()); if (!Dart_IsNull(values[kDrawLooper])) paint.setLooper(DartConverter::FromDart(values[kDrawLooper])->looper()); if (!Dart_IsNull(values[kFilterQuality])) paint.setFilterQuality(DartConverter::FromDart(values[kFilterQuality])); if (!Dart_IsNull(values[kMaskFilter])) paint.setMaskFilter(DartConverter::FromDart(values[kMaskFilter])->filter()); if (!Dart_IsNull(values[kShader])) paint.setShader(DartConverter::FromDart(values[kShader])->shader()); if (!Dart_IsNull(values[kStyle])) paint.setStyle(DartConverter::FromDart(values[kStyle])); if (!Dart_IsNull(values[kTransferMode])) paint.setXfermodeMode(DartConverter::FromDart(values[kTransferMode])); result.is_null = false; return result; } Paint DartConverter::FromArgumentsWithNullCheck(Dart_NativeArguments args, int index, Dart_Handle& exception) { Dart_Handle dart_rect = Dart_GetNativeArgument(args, index); DCHECK(!LogIfError(dart_rect)); return FromDart(dart_rect); } } // namespace blink