146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_ 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/c/ppb_compositor_layer.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/proxy/plugin_resource.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/proxy/ppapi_proxy_export.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/shared_impl/compositor_layer_data.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/shared_impl/scoped_pp_resource.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/thunk/ppb_compositor_layer_api.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace ppapi { 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace proxy { 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class CompositorResource; 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class PPAPI_PROXY_EXPORT CompositorLayerResource 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : public PluginResource, 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public thunk::PPB_CompositorLayer_API { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Release callback for texture or image layer. 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) typedef base::Callback<void(int32_t, uint32_t, bool)> ReleaseCallback; 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CompositorLayerResource(Connection connection, 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Instance instance, 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CompositorResource* compositor); 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CompositorLayerData& data() const { return data_; } 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const ReleaseCallback& release_callback() const { 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return release_callback_; 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void ResetReleaseCallback() { release_callback_.Reset(); } 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Invalidate() { compositor_ = NULL; } 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) enum LayerType { 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TYPE_COLOR, 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TYPE_TEXTURE, 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TYPE_IMAGE, 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~CompositorLayerResource(); 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Resource overrides: 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual thunk::PPB_CompositorLayer_API* AsPPB_CompositorLayer_API() OVERRIDE; 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // thunk::PPB_Compositor_API overrides: 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetColor(float red, 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) float green, 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) float blue, 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) float alpha, 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const PP_Size* size) OVERRIDE; 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual int32_t SetTexture0_1( 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PP_Resource context, 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) uint32_t texture, 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const PP_Size* size, 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const scoped_refptr<ppapi::TrackedCallback>& callback) OVERRIDE; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetTexture( 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PP_Resource context, 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) uint32_t target, 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) uint32_t texture, 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const PP_Size* size, 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const scoped_refptr<TrackedCallback>& callback) OVERRIDE; 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetImage( 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PP_Resource image_data, 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const PP_Size* size, 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const scoped_refptr<TrackedCallback>& callback) OVERRIDE; 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetClipRect(const PP_Rect* rect) OVERRIDE; 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetTransform(const float matrix[16]) OVERRIDE; 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetOpacity(float opacity) OVERRIDE; 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetBlendMode(PP_BlendMode mode) OVERRIDE; 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetSourceRect(const PP_FloatRect* rect) OVERRIDE; 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int32_t SetPremultipliedAlpha(PP_Bool premult) OVERRIDE; 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool SetType(LayerType type); 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int32_t CheckForSetTextureAndImage( 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LayerType type, 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const scoped_refptr<TrackedCallback>& release_callback); 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The CompositorResource which own the layer. The layer is invalidated if 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // compositor_ is NULL. 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CompositorResource* compositor_; 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Release callback for uncommitted texture or image. When CommitLayers() on 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the compositor_ is called, the callback will be copied into a map in the 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // compositor_, and it will be reset to NULL. 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ReleaseCallback release_callback_; 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Size of texture or image. It is used to verify the rect arg of 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // SetSourceRect(). 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_FloatSize source_size_; 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Layer data. 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CompositorLayerData data_; 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CompositorLayerResource); 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace proxy 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace ppapi 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // PPAPI_PROXY_COMPOSITOR_LAYER_RESOURCE_H_ 106