• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #ifndef WebImage_h
32 #define WebImage_h
33 
34 #include "WebCommon.h"
35 
36 #if WEBKIT_USING_SKIA
37 #include <SkBitmap.h>
38 #elif WEBKIT_USING_CG
39 typedef struct CGImage* CGImageRef;
40 #endif
41 
42 #if WEBKIT_IMPLEMENTATION
43 namespace WebCore { class Image; }
44 namespace WTF { template <typename T> class PassRefPtr; }
45 #endif
46 
47 namespace WebKit {
48 
49 class WebData;
50 struct WebSize;
51 
52 // A container for an ARGB bitmap.
53 class WebImage {
54 public:
~WebImage()55     ~WebImage() { reset(); }
56 
WebImage()57     WebImage() { init(); }
WebImage(const WebImage & image)58     WebImage(const WebImage& image)
59     {
60         init();
61         assign(image);
62     }
63 
64     WebImage& operator=(const WebImage& image)
65     {
66         assign(image);
67         return *this;
68     }
69 
70     // Decodes the given image data.  If the image has multiple frames,
71     // then the frame whose size is desiredSize is returned.  Otherwise,
72     // the first frame is returned.
73     WEBKIT_API static WebImage fromData(const WebData&, const WebSize& desiredSize);
74 
75     WEBKIT_API void reset();
76     WEBKIT_API void assign(const WebImage&);
77 
78     WEBKIT_API bool isNull() const;
79     WEBKIT_API WebSize size() const;
80 
81 #if WEBKIT_IMPLEMENTATION
82     WebImage(const WTF::PassRefPtr<WebCore::Image>&);
83     WebImage& operator=(const WTF::PassRefPtr<WebCore::Image>&);
84 #endif
85 
86 #if WEBKIT_USING_SKIA
WebImage(const SkBitmap & bitmap)87     WebImage(const SkBitmap& bitmap) : m_bitmap(bitmap) { }
88 
89     WebImage& operator=(const SkBitmap& bitmap)
90     {
91         m_bitmap = bitmap;
92         return *this;
93     }
94 
getSkBitmap()95     SkBitmap& getSkBitmap() { return m_bitmap; }
getSkBitmap()96     const SkBitmap& getSkBitmap() const { return m_bitmap; }
97 
98 private:
init()99     void init() { }
100     SkBitmap m_bitmap;
101 
102 #elif WEBKIT_USING_CG
WebImage(CGImageRef imageRef)103     WebImage(CGImageRef imageRef)
104     {
105         init();
106         assign(imageRef);
107     }
108 
109     WebImage& operator=(CGImageRef imageRef)
110     {
111         assign(imageRef);
112         return *this;
113     }
114 
getCGImageRef()115     CGImageRef getCGImageRef() const { return m_imageRef; }
116 
117 private:
init()118     void init() { m_imageRef = 0; }
119     void assign(CGImageRef);
120     CGImageRef m_imageRef;
121 #endif
122 };
123 
124 } // namespace WebKit
125 
126 #endif
127