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 15namespace ppapi { 16namespace proxy { 17 18class CompositorResource; 19 20class 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 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