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
26namespace blink {
27class WebFilterOperations;
28class WebLayerClient;
29struct WebFloatRect;
30}
31
32namespace base {
33namespace debug {
34class ConvertableToTraceFormat;
35}
36}
37
38namespace cc {
39class Layer;
40}
41
42namespace cc_blink {
43
44class WebToCCAnimationDelegateAdapter;
45
46class 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