Index: sky/engine/core/painting/LayerDrawLooperBuilder.cpp |
diff --git a/sky/engine/core/painting/LayerDrawLooperBuilder.cpp b/sky/engine/core/painting/LayerDrawLooperBuilder.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..13072f77979104a4eeb87a3fed41145e53da8804 |
--- /dev/null |
+++ b/sky/engine/core/painting/LayerDrawLooperBuilder.cpp |
@@ -0,0 +1,45 @@ |
+// 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/config.h" |
+#include "sky/engine/core/painting/LayerDrawLooperBuilder.h" |
+ |
+#include "sky/engine/core/painting/DrawLooper.h" |
+#include "sky/engine/core/painting/DrawLooperAddLayerCallback.h" |
+#include "sky/engine/core/painting/DrawLooperLayerInfo.h" |
+#include "sky/engine/core/painting/Paint.h" |
+#include "third_party/skia/include/core/SkColorFilter.h" |
+ |
+namespace blink { |
+ |
+LayerDrawLooperBuilder::LayerDrawLooperBuilder() { |
+} |
+ |
+LayerDrawLooperBuilder::~LayerDrawLooperBuilder() { |
+} |
+ |
+PassRefPtr<DrawLooper> LayerDrawLooperBuilder::build() { |
+ return DrawLooper::create(adoptRef(draw_looper_builder_.detachLooper())); |
+} |
+ |
+void LayerDrawLooperBuilder::addLayerOnTop( |
+ DrawLooperLayerInfo* layer_info, |
+ PassOwnPtr<DrawLooperAddLayerCallback> callback) { |
+ SkPaint* sk_paint = |
+ draw_looper_builder_.addLayerOnTop(layer_info->layer_info()); |
+ RefPtr<Paint> paint = Paint::create(); |
+ |
+ paint->setPaint(*sk_paint); |
+ callback->handleEvent(paint.get()); |
+ *sk_paint = paint->paint(); |
+ |
+ // TODO(mpcomplete): Remove this when we add color filter support to Paint's |
+ // API. |
+ SkColor skColor = sk_paint->getColor(); |
+ RefPtr<SkColorFilter> cf = adoptRef( |
+ SkColorFilter::CreateModeFilter(skColor, SkXfermode::kSrcIn_Mode)); |
+ sk_paint->setColorFilter(cf.get()); |
+} |
+ |
+} // namespace blink |