Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / cc / output / copy_output_result.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_RESULT_H_
6 #define CC_OUTPUT_COPY_OUTPUT_RESULT_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/resources/texture_mailbox.h"
11 #include "ui/gfx/size.h"
12
13 class SkBitmap;
14
15 namespace cc {
16 class SingleReleaseCallback;
17 class TextureMailbox;
18
19 class CC_EXPORT CopyOutputResult {
20  public:
21   static scoped_ptr<CopyOutputResult> CreateEmptyResult() {
22     return make_scoped_ptr(new CopyOutputResult);
23   }
24   static scoped_ptr<CopyOutputResult> CreateBitmapResult(
25       scoped_ptr<SkBitmap> bitmap) {
26     return make_scoped_ptr(new CopyOutputResult(bitmap.Pass()));
27   }
28   static scoped_ptr<CopyOutputResult> CreateTextureResult(
29       const gfx::Size& size,
30       const TextureMailbox& texture_mailbox,
31       scoped_ptr<SingleReleaseCallback> release_callback) {
32     return make_scoped_ptr(
33         new CopyOutputResult(size, texture_mailbox, release_callback.Pass()));
34   }
35
36   ~CopyOutputResult();
37
38   bool IsEmpty() const { return !HasBitmap() && !HasTexture(); }
39   bool HasBitmap() const { return !!bitmap_; }
40   bool HasTexture() const { return texture_mailbox_.IsValid(); }
41
42   gfx::Size size() const { return size_; }
43   scoped_ptr<SkBitmap> TakeBitmap();
44   void TakeTexture(TextureMailbox* texture_mailbox,
45                    scoped_ptr<SingleReleaseCallback>* release_callback);
46
47  private:
48   CopyOutputResult();
49   explicit CopyOutputResult(scoped_ptr<SkBitmap> bitmap);
50   explicit CopyOutputResult(const gfx::Size& size,
51                             const TextureMailbox& texture_mailbox,
52                             scoped_ptr<SingleReleaseCallback> release_callback);
53
54   gfx::Size size_;
55   scoped_ptr<SkBitmap> bitmap_;
56   TextureMailbox texture_mailbox_;
57   scoped_ptr<SingleReleaseCallback> release_callback_;
58 };
59
60 }  // namespace cc
61
62 #endif  // CC_OUTPUT_COPY_OUTPUT_RESULT_H_