Index: cc/output/copy_output_request.h |
diff --git a/cc/output/copy_output_request.h b/cc/output/copy_output_request.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c2a737f88d7fa831aed3d249bc0db1e65fc50b8c |
--- /dev/null |
+++ b/cc/output/copy_output_request.h |
@@ -0,0 +1,85 @@ |
+// 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/resources/single_release_callback.h" |
+#include "cc/resources/texture_mailbox.h" |
+#include "ui/gfx/geometry/rect.h" |
+ |
+class SkBitmap; |
+ |
+namespace cc { |
+class CopyOutputResult; |
+ |
+class 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_ |