- add sources.
[platform/framework/web/crosswalk.git] / src / cc / output / copy_output_request.h
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.
4
5 #ifndef CC_OUTPUT_COPY_OUTPUT_REQUEST_H_
6 #define CC_OUTPUT_COPY_OUTPUT_REQUEST_H_
7
8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "cc/base/cc_export.h"
11 #include "ui/gfx/rect.h"
12
13 class SkBitmap;
14
15 namespace cc {
16 class CopyOutputResult;
17 class SingleReleaseCallback;
18 class TextureMailbox;
19
20 class CC_EXPORT CopyOutputRequest {
21  public:
22   typedef base::Callback<void(scoped_ptr<CopyOutputResult> result)>
23       CopyOutputRequestCallback;
24
25   static scoped_ptr<CopyOutputRequest> CreateEmptyRequest() {
26     return make_scoped_ptr(new CopyOutputRequest);
27   }
28   static scoped_ptr<CopyOutputRequest> CreateRequest(
29       const CopyOutputRequestCallback& result_callback) {
30     return make_scoped_ptr(new CopyOutputRequest(false, result_callback));
31   }
32   static scoped_ptr<CopyOutputRequest> CreateBitmapRequest(
33       const CopyOutputRequestCallback& result_callback) {
34     return make_scoped_ptr(new CopyOutputRequest(true, result_callback));
35   }
36   static scoped_ptr<CopyOutputRequest> CreateRelayRequest(
37       const CopyOutputRequest& original_request,
38       const CopyOutputRequestCallback& result_callback) {
39     scoped_ptr<CopyOutputRequest> relay = CreateRequest(result_callback);
40     relay->force_bitmap_result_ = original_request.force_bitmap_result_;
41     relay->has_area_ = original_request.has_area_;
42     relay->area_ = original_request.area_;
43     return relay.Pass();
44   }
45
46   ~CopyOutputRequest();
47
48   bool IsEmpty() const { return result_callback_.is_null(); }
49
50   bool force_bitmap_result() const { return force_bitmap_result_; }
51
52   // By default copy requests copy the entire layer's subtree output. If an
53   // area is given, then the intersection of this rect (in layer space) with
54   // the layer's subtree output will be returned.
55   void set_area(gfx::Rect area) {
56     has_area_ = true;
57     area_ = area;
58   }
59   bool has_area() const { return has_area_; }
60   gfx::Rect area() const { return area_; }
61
62   void SendEmptyResult();
63   void SendBitmapResult(scoped_ptr<SkBitmap> bitmap);
64   void SendTextureResult(gfx::Size size,
65                          const TextureMailbox& texture_mailbox,
66                          scoped_ptr<SingleReleaseCallback> release_callback);
67
68   void SendResult(scoped_ptr<CopyOutputResult> result);
69
70   bool Equals(const CopyOutputRequest& other) const {
71     return result_callback_.Equals(other.result_callback_) &&
72         force_bitmap_result_ == other.force_bitmap_result_;
73   }
74
75  private:
76   CopyOutputRequest();
77   explicit CopyOutputRequest(bool force_bitmap_result,
78                              const CopyOutputRequestCallback& result_callback);
79
80   bool force_bitmap_result_;
81   bool has_area_;
82   gfx::Rect area_;
83   CopyOutputRequestCallback result_callback_;
84 };
85
86 }  // namespace cc
87
88 #endif  // CC_OUTPUT_COPY_OUTPUT_REQUEST_H_