• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_
6 #define PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_
7 
8 #include "ppapi/c/ppb_compositor_layer.h"
9 #include "ppapi/proxy/plugin_resource.h"
10 #include "ppapi/proxy/ppapi_proxy_export.h"
11 #include "ppapi/shared_impl/compositor_layer_data.h"
12 #include "ppapi/shared_impl/scoped_pp_resource.h"
13 #include "ppapi/thunk/ppb_compositor_layer_api.h"
14 
15 namespace ppapi {
16 namespace proxy {
17 
18 class CompositorResource;
19 
20 class PPAPI_PROXY_EXPORT CompositorLayerResource
21     : public PluginResource,
22       public thunk::PPB_CompositorLayer_API {
23  public:
24   // Release callback for texture or image layer.
25   typedef base::Callback<void(int32_t, uint32_t, bool)> ReleaseCallback;
26 
27   CompositorLayerResource(Connection connection,
28                           PP_Instance instance,
29                           const CompositorResource* compositor);
30 
data()31   const CompositorLayerData& data() const { return data_; }
release_callback()32   const ReleaseCallback& release_callback() const {
33     return release_callback_;
34   }
ResetReleaseCallback()35   void ResetReleaseCallback() { release_callback_.Reset(); }
Invalidate()36   void Invalidate() { compositor_ = NULL; }
37 
38  private:
39   enum LayerType {
40     TYPE_COLOR,
41     TYPE_TEXTURE,
42     TYPE_IMAGE,
43   };
44 
45   virtual ~CompositorLayerResource();
46 
47   // Resource overrides:
48   virtual thunk::PPB_CompositorLayer_API* AsPPB_CompositorLayer_API() OVERRIDE;
49 
50   // thunk::PPB_Compositor_API overrides:
51   virtual int32_t SetColor(float red,
52                            float green,
53                            float blue,
54                            float alpha,
55                            const PP_Size* size) OVERRIDE;
56   virtual int32_t SetTexture(
57       PP_Resource context,
58       uint32_t texture,
59       const PP_Size* size,
60       const scoped_refptr<TrackedCallback>& callback) OVERRIDE;
61   virtual int32_t SetImage(
62       PP_Resource image_data,
63       const PP_Size* size,
64       const scoped_refptr<TrackedCallback>& callback) OVERRIDE;
65   virtual int32_t SetClipRect(const PP_Rect* rect) OVERRIDE;
66   virtual int32_t SetTransform(const float matrix[16]) OVERRIDE;
67   virtual int32_t SetOpacity(float opacity) OVERRIDE;
68   virtual int32_t SetBlendMode(PP_BlendMode mode) OVERRIDE;
69   virtual int32_t SetSourceRect(const PP_FloatRect* rect) OVERRIDE;
70   virtual int32_t SetPremultipliedAlpha(PP_Bool premult) OVERRIDE;
71 
72   bool SetType(LayerType type);
73   int32_t CheckForSetTextureAndImage(
74       LayerType type,
75       const scoped_refptr<TrackedCallback>& release_callback);
76 
77   // The CompositorResource which own the layer. The layer is invalidated if
78   // compositor_ is NULL.
79   const CompositorResource* compositor_;
80 
81   // Release callback for uncommitted texture or image. When CommitLayers() on
82   // the compositor_ is called, the callback will be copied into a map in the
83   // compositor_, and it will be reset to NULL.
84   ReleaseCallback release_callback_;
85 
86   // Size of texture or image. It is used to verify the rect arg of
87   // SetSourceRect().
88   PP_FloatSize source_size_;
89 
90   // Layer data.
91   CompositorLayerData data_;
92 
93   DISALLOW_COPY_AND_ASSIGN(CompositorLayerResource);
94 };
95 
96 }  // namespace proxy
97 }  // namespace ppapi
98 
99 #endif  // PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_
100