1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_BLINK_WEB_LAYER_IMPL_H_ 6 #define CC_BLINK_WEB_LAYER_IMPL_H_ 7 8 #include <string> 9 10 #include "base/memory/ref_counted.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "cc/blink/cc_blink_export.h" 13 #include "cc/layers/layer_client.h" 14 #include "third_party/WebKit/public/platform/WebCString.h" 15 #include "third_party/WebKit/public/platform/WebColor.h" 16 #include "third_party/WebKit/public/platform/WebCompositorAnimation.h" 17 #include "third_party/WebKit/public/platform/WebFloatPoint.h" 18 #include "third_party/WebKit/public/platform/WebLayer.h" 19 #include "third_party/WebKit/public/platform/WebPoint.h" 20 #include "third_party/WebKit/public/platform/WebRect.h" 21 #include "third_party/WebKit/public/platform/WebSize.h" 22 #include "third_party/WebKit/public/platform/WebString.h" 23 #include "third_party/WebKit/public/platform/WebVector.h" 24 #include "third_party/skia/include/utils/SkMatrix44.h" 25 26 namespace blink { 27 class WebFilterOperations; 28 class WebLayerClient; 29 struct WebFloatRect; 30 } 31 32 namespace base { 33 namespace debug { 34 class ConvertableToTraceFormat; 35 } 36 } 37 38 namespace cc { 39 class Layer; 40 } 41 42 namespace cc_blink { 43 44 class WebToCCAnimationDelegateAdapter; 45 46 class WebLayerImpl : public blink::WebLayer, public cc::LayerClient { 47 public: 48 CC_BLINK_EXPORT WebLayerImpl(); 49 CC_BLINK_EXPORT explicit WebLayerImpl(scoped_refptr<cc::Layer>); 50 virtual ~WebLayerImpl(); 51 52 static bool UsingPictureLayer(); 53 CC_BLINK_EXPORT static void SetImplSidePaintingEnabled(bool enabled); 54 55 CC_BLINK_EXPORT cc::Layer* layer() const; 56 57 // WebLayer implementation. 58 virtual int id() const; 59 virtual void invalidateRect(const blink::WebFloatRect&); 60 virtual void invalidate(); 61 virtual void addChild(blink::WebLayer* child); 62 virtual void insertChild(blink::WebLayer* child, size_t index); 63 virtual void replaceChild(blink::WebLayer* reference, 64 blink::WebLayer* new_layer); 65 virtual void removeFromParent(); 66 virtual void removeAllChildren(); 67 virtual void setBounds(const blink::WebSize& bounds); 68 virtual blink::WebSize bounds() const; 69 virtual void setMasksToBounds(bool masks_to_bounds); 70 virtual bool masksToBounds() const; 71 virtual void setMaskLayer(blink::WebLayer* mask); 72 virtual void setReplicaLayer(blink::WebLayer* replica); 73 virtual void setOpacity(float opacity); 74 virtual float opacity() const; 75 virtual void setBlendMode(blink::WebBlendMode blend_mode); 76 virtual blink::WebBlendMode blendMode() const; 77 virtual void setIsRootForIsolatedGroup(bool root); 78 virtual bool isRootForIsolatedGroup(); 79 virtual void setOpaque(bool opaque); 80 virtual bool opaque() const; 81 virtual void setPosition(const blink::WebFloatPoint& position); 82 virtual blink::WebFloatPoint position() const; 83 virtual void setTransform(const SkMatrix44& transform); 84 virtual void setTransformOrigin(const blink::WebFloatPoint3D& point); 85 virtual blink::WebFloatPoint3D transformOrigin() const; 86 virtual SkMatrix44 transform() const; 87 virtual void setDrawsContent(bool draws_content); 88 virtual bool drawsContent() const; 89 virtual void setShouldFlattenTransform(bool flatten); 90 virtual void setRenderingContext(int context); 91 virtual void setUseParentBackfaceVisibility(bool visible); 92 virtual void setBackgroundColor(blink::WebColor color); 93 virtual blink::WebColor backgroundColor() const; 94 virtual void setFilters(const blink::WebFilterOperations& filters); 95 virtual void setBackgroundFilters(const blink::WebFilterOperations& filters); 96 virtual void setAnimationDelegate( 97 blink::WebCompositorAnimationDelegate* delegate); 98 virtual bool addAnimation(blink::WebCompositorAnimation* animation); 99 virtual void removeAnimation(int animation_id); 100 virtual void removeAnimation(int animation_id, 101 blink::WebCompositorAnimation::TargetProperty); 102 virtual void pauseAnimation(int animation_id, double time_offset); 103 virtual bool hasActiveAnimation(); 104 virtual void setForceRenderSurface(bool force); 105 virtual void setScrollPosition(blink::WebPoint position); 106 virtual blink::WebPoint scrollPosition() const; 107 virtual void setScrollClipLayer(blink::WebLayer* clip_layer); 108 virtual bool scrollable() const; 109 virtual void setUserScrollable(bool horizontal, bool vertical); 110 virtual bool userScrollableHorizontal() const; 111 virtual bool userScrollableVertical() const; 112 virtual void setHaveWheelEventHandlers(bool have_wheel_event_handlers); 113 virtual bool haveWheelEventHandlers() const; 114 virtual void setHaveScrollEventHandlers(bool have_scroll_event_handlers); 115 virtual bool haveScrollEventHandlers() const; 116 virtual void setShouldScrollOnMainThread(bool scroll_on_main); 117 virtual bool shouldScrollOnMainThread() const; 118 virtual void setNonFastScrollableRegion( 119 const blink::WebVector<blink::WebRect>& region); 120 virtual blink::WebVector<blink::WebRect> nonFastScrollableRegion() const; 121 virtual void setTouchEventHandlerRegion( 122 const blink::WebVector<blink::WebRect>& region); 123 virtual blink::WebVector<blink::WebRect> touchEventHandlerRegion() const; 124 virtual void setIsContainerForFixedPositionLayers(bool is_container); 125 virtual bool isContainerForFixedPositionLayers() const; 126 virtual void setPositionConstraint( 127 const blink::WebLayerPositionConstraint& constraint); 128 virtual blink::WebLayerPositionConstraint positionConstraint() const; 129 virtual void setScrollClient(blink::WebLayerScrollClient* client); 130 virtual bool isOrphan() const; 131 virtual void setWebLayerClient(blink::WebLayerClient* client); 132 133 // LayerClient implementation. 134 virtual scoped_refptr<base::debug::ConvertableToTraceFormat> TakeDebugInfo() 135 OVERRIDE; 136 137 virtual void setScrollParent(blink::WebLayer* parent); 138 virtual void setClipParent(blink::WebLayer* parent); 139 140 protected: 141 scoped_refptr<cc::Layer> layer_; 142 blink::WebLayerClient* web_layer_client_; 143 144 private: 145 scoped_ptr<WebToCCAnimationDelegateAdapter> animation_delegate_adapter_; 146 147 DISALLOW_COPY_AND_ASSIGN(WebLayerImpl); 148 }; 149 150 } // namespace cc_blink 151 152 #endif // CC_BLINK_WEB_LAYER_IMPL_H_ 153