diff options
author | rosca@adobe.com <rosca@adobe.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-04 00:44:32 +0000 |
---|---|---|
committer | rosca@adobe.com <rosca@adobe.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-04 00:44:32 +0000 |
commit | 678dcbd4df160bd46d056c729ce8a5fa2cfa4b3e (patch) | |
tree | 24a972afcc4e26276ce73b70322f6fc5bbf1768d | |
parent | a1f31e0245332abadd6e6a4ae92545097dfebeb7 (diff) | |
download | chromium_src-678dcbd4df160bd46d056c729ce8a5fa2cfa4b3e.zip chromium_src-678dcbd4df160bd46d056c729ce8a5fa2cfa4b3e.tar.gz chromium_src-678dcbd4df160bd46d056c729ce8a5fa2cfa4b3e.tar.bz2 |
Renderer-compositor bindings for mix-blend-mode
This patch will link the blink implementation for mix-blend-mode with
the compositor implementation.
Blink: https://codereview.chromium.org/23511004/
Cc: https://codereview.chromium.org/23455060/
BUG=243223
Review URL: https://codereview.chromium.org/66263003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238498 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 131 insertions, 0 deletions
diff --git a/webkit/renderer/compositor_bindings/web_blend_mode.h b/webkit/renderer/compositor_bindings/web_blend_mode.h new file mode 100644 index 0000000..24236ff --- /dev/null +++ b/webkit/renderer/compositor_bindings/web_blend_mode.h @@ -0,0 +1,106 @@ +// Copyright 2013 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. + +#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_BLEND_MODE_H_ +#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_BLEND_MODE_H_ + +#include "third_party/WebKit/public/platform/WebBlendMode.h" + +namespace webkit { + +inline SkXfermode::Mode BlendModeToSkia(blink::WebBlendMode blend_mode) { + switch (blend_mode) { + case blink::WebBlendModeNormal: + return SkXfermode::kSrcOver_Mode; + case blink::WebBlendModeMultiply: + return SkXfermode::kMultiply_Mode; + case blink::WebBlendModeScreen: + return SkXfermode::kScreen_Mode; + case blink::WebBlendModeOverlay: + return SkXfermode::kOverlay_Mode; + case blink::WebBlendModeDarken: + return SkXfermode::kDarken_Mode; + case blink::WebBlendModeLighten: + return SkXfermode::kLighten_Mode; + case blink::WebBlendModeColorDodge: + return SkXfermode::kColorDodge_Mode; + case blink::WebBlendModeColorBurn: + return SkXfermode::kColorBurn_Mode; + case blink::WebBlendModeHardLight: + return SkXfermode::kHardLight_Mode; + case blink::WebBlendModeSoftLight: + return SkXfermode::kSoftLight_Mode; + case blink::WebBlendModeDifference: + return SkXfermode::kDifference_Mode; + case blink::WebBlendModeExclusion: + return SkXfermode::kExclusion_Mode; + case blink::WebBlendModeHue: + return SkXfermode::kHue_Mode; + case blink::WebBlendModeSaturation: + return SkXfermode::kSaturation_Mode; + case blink::WebBlendModeColor: + return SkXfermode::kColor_Mode; + case blink::WebBlendModeLuminosity: + return SkXfermode::kLuminosity_Mode; + } + return SkXfermode::kSrcOver_Mode; +} + +inline blink::WebBlendMode BlendModeFromSkia(SkXfermode::Mode blend_mode) { + switch (blend_mode) { + case SkXfermode::kSrcOver_Mode: + return blink::WebBlendModeNormal; + case SkXfermode::kMultiply_Mode: + return blink::WebBlendModeMultiply; + case SkXfermode::kScreen_Mode: + return blink::WebBlendModeScreen; + case SkXfermode::kOverlay_Mode: + return blink::WebBlendModeOverlay; + case SkXfermode::kDarken_Mode: + return blink::WebBlendModeDarken; + case SkXfermode::kLighten_Mode: + return blink::WebBlendModeLighten; + case SkXfermode::kColorDodge_Mode: + return blink::WebBlendModeColorDodge; + case SkXfermode::kColorBurn_Mode: + return blink::WebBlendModeColorBurn; + case SkXfermode::kHardLight_Mode: + return blink::WebBlendModeHardLight; + case SkXfermode::kSoftLight_Mode: + return blink::WebBlendModeSoftLight; + case SkXfermode::kDifference_Mode: + return blink::WebBlendModeDifference; + case SkXfermode::kExclusion_Mode: + return blink::WebBlendModeExclusion; + case SkXfermode::kHue_Mode: + return blink::WebBlendModeHue; + case SkXfermode::kSaturation_Mode: + return blink::WebBlendModeSaturation; + case SkXfermode::kColor_Mode: + return blink::WebBlendModeColor; + case SkXfermode::kLuminosity_Mode: + return blink::WebBlendModeLuminosity; + + // these value are SkXfermodes, but no blend modes. + case SkXfermode::kClear_Mode: + case SkXfermode::kSrc_Mode: + case SkXfermode::kDst_Mode: + case SkXfermode::kDstOver_Mode: + case SkXfermode::kSrcIn_Mode: + case SkXfermode::kDstIn_Mode: + case SkXfermode::kSrcOut_Mode: + case SkXfermode::kDstOut_Mode: + case SkXfermode::kSrcATop_Mode: + case SkXfermode::kDstATop_Mode: + case SkXfermode::kXor_Mode: + case SkXfermode::kPlus_Mode: + case SkXfermode::kModulate_Mode: + NOTREACHED(); + } + return blink::WebBlendModeNormal; +} + +} // namespace webkit + +#endif // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_BLEND_MODE_H_ diff --git a/webkit/renderer/compositor_bindings/web_compositing_reasons.cc b/webkit/renderer/compositor_bindings/web_compositing_reasons.cc index ae9d604..ace216b 100644 --- a/webkit/renderer/compositor_bindings/web_compositing_reasons.cc +++ b/webkit/renderer/compositor_bindings/web_compositing_reasons.cc @@ -145,3 +145,7 @@ COMPILE_ASSERT_MATCHING_UINT64( COMPILE_ASSERT_MATCHING_UINT64( cc::kCompositingReasonOutOfFlowClipping, blink::CompositingReasonOutOfFlowClipping); + +COMPILE_ASSERT_MATCHING_UINT64( + cc::kCompositingReasonIsolateCompositedDescendants, + blink::CompositingReasonIsolateCompositedDescendants); diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.cc b/webkit/renderer/compositor_bindings/web_layer_impl.cc index fdf719e..22a5485 100644 --- a/webkit/renderer/compositor_bindings/web_layer_impl.cc +++ b/webkit/renderer/compositor_bindings/web_layer_impl.cc @@ -22,6 +22,7 @@ #include "third_party/WebKit/public/platform/WebSize.h" #include "third_party/skia/include/utils/SkMatrix44.h" #include "webkit/renderer/compositor_bindings/web_animation_impl.h" +#include "webkit/renderer/compositor_bindings/web_blend_mode.h" #include "webkit/renderer/compositor_bindings/web_filter_operations_impl.h" #include "webkit/renderer/compositor_bindings/web_to_cc_animation_delegate_adapter.h" @@ -116,6 +117,22 @@ void WebLayerImpl::setOpacity(float opacity) { layer_->SetOpacity(opacity); } float WebLayerImpl::opacity() const { return layer_->opacity(); } +void WebLayerImpl::setBlendMode(blink::WebBlendMode blend_mode) { + layer_->SetBlendMode(BlendModeToSkia(blend_mode)); +} + +blink::WebBlendMode WebLayerImpl::blendMode() const { + return BlendModeFromSkia(layer_->blend_mode()); +} + +void WebLayerImpl::setIsRootForIsolatedGroup(bool isolate) { + layer_->SetIsRootForIsolatedGroup(isolate); +} + +bool WebLayerImpl::isRootForIsolatedGroup() { + return layer_->is_root_for_isolated_group(); +} + void WebLayerImpl::setOpaque(bool opaque) { layer_->SetContentsOpaque(opaque); } bool WebLayerImpl::opaque() const { return layer_->contents_opaque(); } diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.h b/webkit/renderer/compositor_bindings/web_layer_impl.h index e189a70..011ec49 100644 --- a/webkit/renderer/compositor_bindings/web_layer_impl.h +++ b/webkit/renderer/compositor_bindings/web_layer_impl.h @@ -76,6 +76,10 @@ class WebLayerImpl : public blink::WebLayer, public cc::LayerClient { virtual void setReplicaLayer(blink::WebLayer* replica); virtual void setOpacity(float opacity); virtual float opacity() const; + virtual void setBlendMode(blink::WebBlendMode blend_mode); + virtual blink::WebBlendMode blendMode() const; + virtual void setIsRootForIsolatedGroup(bool root); + virtual bool isRootForIsolatedGroup(); virtual void setOpaque(bool opaque); virtual bool opaque() const; virtual void setPosition(const blink::WebFloatPoint& position); |