// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_OUTPUT_COPY_OUTPUT_REQUEST_H_ #define CC_OUTPUT_COPY_OUTPUT_REQUEST_H_ #include "base/callback.h" #include "base/memory/scoped_ptr.h" #include "cc/base/cc_export.h" #include "cc/resources/single_release_callback.h" #include "cc/resources/texture_mailbox.h" #include "ui/gfx/rect.h" class SkBitmap; namespace cc { class CopyOutputResult; class CC_EXPORT CopyOutputRequest { public: typedef base::Callback<void(scoped_ptr<CopyOutputResult> result)> CopyOutputRequestCallback; static scoped_ptr<CopyOutputRequest> CreateEmptyRequest() { return make_scoped_ptr(new CopyOutputRequest); } static scoped_ptr<CopyOutputRequest> CreateRequest( const CopyOutputRequestCallback& result_callback) { return make_scoped_ptr(new CopyOutputRequest(false, result_callback)); } static scoped_ptr<CopyOutputRequest> CreateBitmapRequest( const CopyOutputRequestCallback& result_callback) { return make_scoped_ptr(new CopyOutputRequest(true, result_callback)); } static scoped_ptr<CopyOutputRequest> CreateRelayRequest( const CopyOutputRequest& original_request, const CopyOutputRequestCallback& result_callback); ~CopyOutputRequest(); bool IsEmpty() const { return result_callback_.is_null(); } bool force_bitmap_result() const { return force_bitmap_result_; } // By default copy requests copy the entire layer's subtree output. If an // area is given, then the intersection of this rect (in layer space) with // the layer's subtree output will be returned. void set_area(const gfx::Rect& area) { has_area_ = true; area_ = area; } bool has_area() const { return has_area_; } gfx::Rect area() const { return area_; } // By default copy requests create a new TextureMailbox to return contents // in. This allows a client to provide a TextureMailbox, and the compositor // will place the result inside the TextureMailbox. void SetTextureMailbox(const TextureMailbox& texture_mailbox); bool has_texture_mailbox() const { return has_texture_mailbox_; } const TextureMailbox& texture_mailbox() const { return texture_mailbox_; } void SendEmptyResult(); void SendBitmapResult(scoped_ptr<SkBitmap> bitmap); void SendTextureResult(const gfx::Size& size, const TextureMailbox& texture_mailbox, scoped_ptr<SingleReleaseCallback> release_callback); void SendResult(scoped_ptr<CopyOutputResult> result); private: CopyOutputRequest(); CopyOutputRequest(bool force_bitmap_result, const CopyOutputRequestCallback& result_callback); bool force_bitmap_result_; bool has_area_; bool has_texture_mailbox_; gfx::Rect area_; TextureMailbox texture_mailbox_; CopyOutputRequestCallback result_callback_; }; } // namespace cc #endif // CC_OUTPUT_COPY_OUTPUT_REQUEST_H_