15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/renderer/compositor_bindings/web_layer_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/bind.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string_util.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/region.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_position_constraint.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebCompositingReasons.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebFloatPoint.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebFloatRect.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebLayerPositionConstraint.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebLayerScrollClient.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebSize.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/utils/SkMatrix44.h" 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/renderer/compositor_bindings/web_animation_impl.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "webkit/renderer/compositor_bindings/web_filter_operations_impl.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "webkit/renderer/compositor_bindings/web_to_cc_animation_delegate_adapter.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using cc::Animation; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::Layer; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebLayer; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebFloatPoint; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebVector; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebRect; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebSize; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebColor; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebFilterOperations; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace webkit { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebLayerImpl::WebLayerImpl() : layer_(Layer::Create()) {} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebLayerImpl::WebLayerImpl(scoped_refptr<Layer> layer) : layer_(layer) {} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebLayerImpl::~WebLayerImpl() { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->ClearRenderSurface(); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->set_layer_animation_delegate(NULL); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebLayerImpl::id() const { return layer_->id(); } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::invalidateRect(const WebKit::WebFloatRect& rect) { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetNeedsDisplayRect(rect); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::invalidate() { layer_->SetNeedsDisplay(); } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::addChild(WebLayer* child) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->AddChild(static_cast<WebLayerImpl*>(child)->layer()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::insertChild(WebLayer* child, size_t index) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->InsertChild(static_cast<WebLayerImpl*>(child)->layer(), index); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::replaceChild(WebLayer* reference, WebLayer* new_layer) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->ReplaceChild(static_cast<WebLayerImpl*>(reference)->layer(), 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<WebLayerImpl*>(new_layer)->layer()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::removeFromParent() { layer_->RemoveFromParent(); } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::removeAllChildren() { layer_->RemoveAllChildren(); } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setAnchorPoint(const WebFloatPoint& anchor_point) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetAnchorPoint(anchor_point); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebFloatPoint WebLayerImpl::anchorPoint() const { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->anchor_point(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setAnchorPointZ(float anchor_point_z) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetAnchorPointZ(anchor_point_z); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float WebLayerImpl::anchorPointZ() const { return layer_->anchor_point_z(); } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setBounds(const WebSize& size) { layer_->SetBounds(size); } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize WebLayerImpl::bounds() const { return layer_->bounds(); } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setMasksToBounds(bool masks_to_bounds) { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetMasksToBounds(masks_to_bounds); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::masksToBounds() const { return layer_->masks_to_bounds(); } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setMaskLayer(WebLayer* maskLayer) { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetMaskLayer( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) maskLayer ? static_cast<WebLayerImpl*>(maskLayer)->layer() : 0); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setReplicaLayer(WebLayer* replica_layer) { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetReplicaLayer( 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) replica_layer ? static_cast<WebLayerImpl*>(replica_layer)->layer() : 0); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setOpacity(float opacity) { layer_->SetOpacity(opacity); } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float WebLayerImpl::opacity() const { return layer_->opacity(); } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setOpaque(bool opaque) { layer_->SetContentsOpaque(opaque); } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::opaque() const { return layer_->contents_opaque(); } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setPosition(const WebFloatPoint& position) { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetPosition(position); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebFloatPoint WebLayerImpl::position() const { return layer_->position(); } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setSublayerTransform(const SkMatrix44& matrix) { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform sub_layer_transform; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sub_layer_transform.matrix() = matrix; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetSublayerTransform(sub_layer_transform); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SkMatrix44 WebLayerImpl::sublayerTransform() const { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->sublayer_transform().matrix(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setTransform(const SkMatrix44& matrix) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform transform; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transform.matrix() = matrix; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetTransform(transform); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SkMatrix44 WebLayerImpl::transform() const { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->transform().matrix(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setDrawsContent(bool draws_content) { 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetIsDrawable(draws_content); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::drawsContent() const { return layer_->DrawsContent(); } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setPreserves3D(bool preserve3D) { 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetPreserves3d(preserve3D); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setUseParentBackfaceVisibility( 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_parent_backface_visibility) { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->set_use_parent_backface_visibility(use_parent_backface_visibility); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setBackgroundColor(WebColor color) { 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetBackgroundColor(color); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebColor WebLayerImpl::backgroundColor() const { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->background_color(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setFilters(const WebFilterOperations& filters) { 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebFilterOperationsImpl& filters_impl = 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<const WebFilterOperationsImpl&>(filters); 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layer_->SetFilters(filters_impl.AsFilterOperations()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setBackgroundFilters(const WebFilterOperations& filters) { 168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebFilterOperationsImpl& filters_impl = 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<const WebFilterOperationsImpl&>(filters); 170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layer_->SetBackgroundFilters(filters_impl.AsFilterOperations()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setFilter(SkImageFilter* filter) { 17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_->SetFilter(skia::SharePtr(filter)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setDebugName(WebKit::WebString name) { 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_->SetDebugName(UTF16ToASCII(name)); 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void WebLayerImpl::setCompositingReasons( 18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) WebKit::WebCompositingReasons reasons) { 18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_->SetCompositingReasons(reasons); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setAnimationDelegate( 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebAnimationDelegate* delegate) { 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch animation_delegate_adapter_.reset( 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new WebToCCAnimationDelegateAdapter(delegate)); 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layer_->set_layer_animation_delegate(animation_delegate_adapter_.get()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::addAnimation(WebKit::WebAnimation* animation) { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->AddAnimation( 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<WebAnimationImpl*>(animation)->CloneToAnimation()); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::removeAnimation(int animation_id) { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->RemoveAnimation(animation_id); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::removeAnimation( 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int animation_id, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebAnimation::TargetProperty target_property) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->layer_animation_controller()->RemoveAnimation( 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) animation_id, 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<Animation::TargetProperty>(target_property)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::pauseAnimation(int animation_id, double time_offset) { 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->PauseAnimation(animation_id, time_offset); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::suspendAnimations(double monotonic_time) { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SuspendAnimations(monotonic_time); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::resumeAnimations(double monotonic_time) { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->ResumeAnimations(monotonic_time); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::hasActiveAnimation() { return layer_->HasActiveAnimation(); } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setForceRenderSurface(bool force_render_surface) { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetForceRenderSurface(force_render_surface); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setScrollPosition(WebKit::WebPoint position) { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetScrollOffset(gfx::Point(position).OffsetFromOrigin()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebKit::WebPoint WebLayerImpl::scrollPosition() const { 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::PointAtOffsetFromOrigin(layer_->scroll_offset()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setMaxScrollPosition(WebSize max_scroll_position) { 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetMaxScrollOffset(max_scroll_position); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize WebLayerImpl::maxScrollPosition() const { 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->max_scroll_offset(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setScrollable(bool scrollable) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetScrollable(scrollable); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::scrollable() const { return layer_->scrollable(); } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setHaveWheelEventHandlers(bool have_wheel_event_handlers) { 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetHaveWheelEventHandlers(have_wheel_event_handlers); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::haveWheelEventHandlers() const { 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->have_wheel_event_handlers(); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setShouldScrollOnMainThread( 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool should_scroll_on_main_thread) { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetShouldScrollOnMainThread(should_scroll_on_main_thread); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::shouldScrollOnMainThread() const { 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_->should_scroll_on_main_thread(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setNonFastScrollableRegion(const WebVector<WebRect>& rects) { 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::Region region; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < rects.size(); ++i) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region.Union(rects[i]); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetNonFastScrollableRegion(region); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebVector<WebRect> WebLayerImpl::nonFastScrollableRegion() const { 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_rects = 0; 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (cc::Region::Iterator region_rects(layer_->non_fast_scrollable_region()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.has_rect(); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.next()) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++num_rects; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebVector<WebRect> result(num_rects); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t i = 0; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (cc::Region::Iterator region_rects(layer_->non_fast_scrollable_region()); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.has_rect(); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.next()) { 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result[i] = region_rects.rect(); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++i; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setTouchEventHandlerRegion(const WebVector<WebRect>& rects) { 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::Region region; 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < rects.size(); ++i) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region.Union(rects[i]); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetTouchEventHandlerRegion(region); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebVector<WebRect> WebLayerImpl::touchEventHandlerRegion() const { 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_rects = 0; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (cc::Region::Iterator region_rects(layer_->touch_event_handler_region()); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.has_rect(); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.next()) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++num_rects; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebVector<WebRect> result(num_rects); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t i = 0; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (cc::Region::Iterator region_rects(layer_->touch_event_handler_region()); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.has_rect(); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) region_rects.next()) { 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result[i] = region_rects.rect(); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++i; 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setIsContainerForFixedPositionLayers(bool enable) { 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_->SetIsContainerForFixedPositionLayers(enable); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::isContainerForFixedPositionLayers() const { 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return layer_->IsContainerForFixedPositionLayers(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static WebKit::WebLayerPositionConstraint ToWebLayerPositionConstraint( 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const cc::LayerPositionConstraint& constraint) { 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WebLayerPositionConstraint web_constraint; 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_constraint.isFixedPosition = constraint.is_fixed_position(); 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_constraint.isFixedToRightEdge = constraint.is_fixed_to_right_edge(); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_constraint.isFixedToBottomEdge = constraint.is_fixed_to_bottom_edge(); 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return web_constraint; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static cc::LayerPositionConstraint ToLayerPositionConstraint( 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebKit::WebLayerPositionConstraint& web_constraint) { 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::LayerPositionConstraint constraint; 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) constraint.set_is_fixed_position(web_constraint.isFixedPosition); 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) constraint.set_is_fixed_to_right_edge(web_constraint.isFixedToRightEdge); 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) constraint.set_is_fixed_to_bottom_edge(web_constraint.isFixedToBottomEdge); 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return constraint; 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebLayerImpl::setPositionConstraint( 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebKit::WebLayerPositionConstraint& constraint) { 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_->SetPositionConstraint(ToLayerPositionConstraint(constraint)); 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebKit::WebLayerPositionConstraint WebLayerImpl::positionConstraint() const { 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ToWebLayerPositionConstraint(layer_->position_constraint()); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebLayerImpl::setScrollClient( 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebLayerScrollClient* scroll_client) { 3547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (scroll_client) { 3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch layer_->set_did_scroll_callback( 3567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&WebKit::WebLayerScrollClient::didScroll, 3577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Unretained(scroll_client))); 3587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch layer_->set_did_scroll_callback(base::Closure()); 3607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebLayerImpl::isOrphan() const { return !layer_->layer_tree_host(); } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid WebLayerImpl::setWebLayerClient(WebKit::WebLayerClient* client) { 366bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch web_layer_client_ = client; 367bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 368bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Layer* WebLayerImpl::layer() const { return layer_.get(); } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace webkit 372