Home | History | Annotate | Download | only in proxy
      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 
     31   const CompositorLayerData& data() const { return data_; }
     32   const ReleaseCallback& release_callback() const {
     33     return release_callback_;
     34   }
     35   void ResetReleaseCallback() { release_callback_.Reset(); }
     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 SetTexture0_1(
     57       PP_Resource context,
     58       uint32_t texture,
     59       const PP_Size* size,
     60       const scoped_refptr<ppapi::TrackedCallback>& callback) OVERRIDE;
     61   virtual int32_t SetTexture(
     62       PP_Resource context,
     63       uint32_t target,
     64       uint32_t texture,
     65       const PP_Size* size,
     66       const scoped_refptr<TrackedCallback>& callback) OVERRIDE;
     67   virtual int32_t SetImage(
     68       PP_Resource image_data,
     69       const PP_Size* size,
     70       const scoped_refptr<TrackedCallback>& callback) OVERRIDE;
     71   virtual int32_t SetClipRect(const PP_Rect* rect) OVERRIDE;
     72   virtual int32_t SetTransform(const float matrix[16]) OVERRIDE;
     73   virtual int32_t SetOpacity(float opacity) OVERRIDE;
     74   virtual int32_t SetBlendMode(PP_BlendMode mode) OVERRIDE;
     75   virtual int32_t SetSourceRect(const PP_FloatRect* rect) OVERRIDE;
     76   virtual int32_t SetPremultipliedAlpha(PP_Bool premult) OVERRIDE;
     77 
     78   bool SetType(LayerType type);
     79   int32_t CheckForSetTextureAndImage(
     80       LayerType type,
     81       const scoped_refptr<TrackedCallback>& release_callback);
     82 
     83   // The CompositorResource which own the layer. The layer is invalidated if
     84   // compositor_ is NULL.
     85   const CompositorResource* compositor_;
     86 
     87   // Release callback for uncommitted texture or image. When CommitLayers() on
     88   // the compositor_ is called, the callback will be copied into a map in the
     89   // compositor_, and it will be reset to NULL.
     90   ReleaseCallback release_callback_;
     91 
     92   // Size of texture or image. It is used to verify the rect arg of
     93   // SetSourceRect().
     94   PP_FloatSize source_size_;
     95 
     96   // Layer data.
     97   CompositorLayerData data_;
     98 
     99   DISALLOW_COPY_AND_ASSIGN(CompositorLayerResource);
    100 };
    101 
    102 }  // namespace proxy
    103 }  // namespace ppapi
    104 
    105 #endif  // PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_
    106