Commit 678dcbd4 authored by rosca@adobe.com's avatar rosca@adobe.com

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
parent a1f31e02
// 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_
...@@ -145,3 +145,7 @@ COMPILE_ASSERT_MATCHING_UINT64( ...@@ -145,3 +145,7 @@ COMPILE_ASSERT_MATCHING_UINT64(
COMPILE_ASSERT_MATCHING_UINT64( COMPILE_ASSERT_MATCHING_UINT64(
cc::kCompositingReasonOutOfFlowClipping, cc::kCompositingReasonOutOfFlowClipping,
blink::CompositingReasonOutOfFlowClipping); blink::CompositingReasonOutOfFlowClipping);
COMPILE_ASSERT_MATCHING_UINT64(
cc::kCompositingReasonIsolateCompositedDescendants,
blink::CompositingReasonIsolateCompositedDescendants);
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "third_party/WebKit/public/platform/WebSize.h" #include "third_party/WebKit/public/platform/WebSize.h"
#include "third_party/skia/include/utils/SkMatrix44.h" #include "third_party/skia/include/utils/SkMatrix44.h"
#include "webkit/renderer/compositor_bindings/web_animation_impl.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_filter_operations_impl.h"
#include "webkit/renderer/compositor_bindings/web_to_cc_animation_delegate_adapter.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); } ...@@ -116,6 +117,22 @@ void WebLayerImpl::setOpacity(float opacity) { layer_->SetOpacity(opacity); }
float WebLayerImpl::opacity() const { return layer_->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); } void WebLayerImpl::setOpaque(bool opaque) { layer_->SetContentsOpaque(opaque); }
bool WebLayerImpl::opaque() const { return layer_->contents_opaque(); } bool WebLayerImpl::opaque() const { return layer_->contents_opaque(); }
......
...@@ -76,6 +76,10 @@ class WebLayerImpl : public blink::WebLayer, public cc::LayerClient { ...@@ -76,6 +76,10 @@ class WebLayerImpl : public blink::WebLayer, public cc::LayerClient {
virtual void setReplicaLayer(blink::WebLayer* replica); virtual void setReplicaLayer(blink::WebLayer* replica);
virtual void setOpacity(float opacity); virtual void setOpacity(float opacity);
virtual float opacity() const; 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 void setOpaque(bool opaque);
virtual bool opaque() const; virtual bool opaque() const;
virtual void setPosition(const blink::WebFloatPoint& position); virtual void setPosition(const blink::WebFloatPoint& position);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment