Explicitly add python-numpy dependency to install-build-deps.
[chromium-blink-merge.git] / cc / output / copy_output_request.h
blob58aa790d24280aed5992626d5576a54e8a51bd15
1 // Copyright 2013 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.
5 #ifndef CC_OUTPUT_COPY_OUTPUT_REQUEST_H_
6 #define CC_OUTPUT_COPY_OUTPUT_REQUEST_H_
8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "cc/base/cc_export.h"
11 #include "cc/resources/single_release_callback.h"
12 #include "cc/resources/texture_mailbox.h"
13 #include "ui/gfx/geometry/rect.h"
15 class SkBitmap;
17 namespace cc {
18 class CopyOutputResult;
20 class CC_EXPORT CopyOutputRequest {
21 public:
22 typedef base::Callback<void(scoped_ptr<CopyOutputResult> result)>
23 CopyOutputRequestCallback;
25 static scoped_ptr<CopyOutputRequest> CreateEmptyRequest() {
26 return make_scoped_ptr(new CopyOutputRequest);
28 static scoped_ptr<CopyOutputRequest> CreateRequest(
29 const CopyOutputRequestCallback& result_callback) {
30 return make_scoped_ptr(new CopyOutputRequest(false, result_callback));
32 static scoped_ptr<CopyOutputRequest> CreateBitmapRequest(
33 const CopyOutputRequestCallback& result_callback) {
34 return make_scoped_ptr(new CopyOutputRequest(true, result_callback));
36 static scoped_ptr<CopyOutputRequest> CreateRelayRequest(
37 const CopyOutputRequest& original_request,
38 const CopyOutputRequestCallback& result_callback);
40 ~CopyOutputRequest();
42 bool IsEmpty() const { return result_callback_.is_null(); }
44 bool force_bitmap_result() const { return force_bitmap_result_; }
46 // By default copy requests copy the entire layer's subtree output. If an
47 // area is given, then the intersection of this rect (in layer space) with
48 // the layer's subtree output will be returned.
49 void set_area(const gfx::Rect& area) {
50 has_area_ = true;
51 area_ = area;
53 bool has_area() const { return has_area_; }
54 gfx::Rect area() const { return area_; }
56 // By default copy requests create a new TextureMailbox to return contents
57 // in. This allows a client to provide a TextureMailbox, and the compositor
58 // will place the result inside the TextureMailbox.
59 void SetTextureMailbox(const TextureMailbox& texture_mailbox);
60 bool has_texture_mailbox() const { return has_texture_mailbox_; }
61 const TextureMailbox& texture_mailbox() const { return texture_mailbox_; }
63 void SendEmptyResult();
64 void SendBitmapResult(scoped_ptr<SkBitmap> bitmap);
65 void SendTextureResult(const gfx::Size& size,
66 const TextureMailbox& texture_mailbox,
67 scoped_ptr<SingleReleaseCallback> release_callback);
69 void SendResult(scoped_ptr<CopyOutputResult> result);
71 private:
72 CopyOutputRequest();
73 CopyOutputRequest(bool force_bitmap_result,
74 const CopyOutputRequestCallback& result_callback);
76 bool force_bitmap_result_;
77 bool has_area_;
78 bool has_texture_mailbox_;
79 gfx::Rect area_;
80 TextureMailbox texture_mailbox_;
81 CopyOutputRequestCallback result_callback_;
84 } // namespace cc
86 #endif // CC_OUTPUT_COPY_OUTPUT_REQUEST_H_