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