Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Side by Side Diff: webkit/glue/image_decoder.cc

Issue 155010: Port WebImage to CG and rework the Skia version so that WebImage just has a... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/api/src/WebImageSkia.cpp ('k') | webkit/glue/webclipboard_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "webkit/glue/image_decoder.h" 6 #include "webkit/glue/image_decoder.h"
7 7
8 #include "base/compiler_specific.h" 8 #include "webkit/api/public/WebData.h"
9 #include "webkit/api/public/WebImage.h"
10 #include "webkit/api/public/WebSize.h"
9 #include "third_party/skia/include/core/SkBitmap.h" 11 #include "third_party/skia/include/core/SkBitmap.h"
10 12
11 MSVC_PUSH_WARNING_LEVEL(0); 13 #if WEBKIT_USING_CG
12 #if defined(OS_WIN) || defined(OS_LINUX)
13 #include "ImageSourceSkia.h"
14 #include "NativeImageSkia.h"
15 #elif defined(OS_MACOSX)
16 #include "ImageSource.h"
17 #include "RetainPtr.h"
18 #include "skia/ext/skia_utils_mac.h" 14 #include "skia/ext/skia_utils_mac.h"
19 #endif 15 #endif
20 #include "IntSize.h" 16
21 #include "RefPtr.h" 17 using WebKit::WebData;
22 #include "SharedBuffer.h" 18 using WebKit::WebImage;
23 MSVC_POP_WARNING();
24 19
25 namespace webkit_glue { 20 namespace webkit_glue {
26 21
27 ImageDecoder::ImageDecoder() : desired_icon_size_(0, 0) { 22 ImageDecoder::ImageDecoder() : desired_icon_size_(0, 0) {
28 } 23 }
29 24
30 ImageDecoder::ImageDecoder(const gfx::Size& desired_icon_size) 25 ImageDecoder::ImageDecoder(const gfx::Size& desired_icon_size)
31 : desired_icon_size_(desired_icon_size) { 26 : desired_icon_size_(desired_icon_size) {
32 } 27 }
33 28
34 ImageDecoder::~ImageDecoder() { 29 ImageDecoder::~ImageDecoder() {
35 } 30 }
36 31
37 SkBitmap ImageDecoder::Decode(const unsigned char* data, size_t size) const { 32 SkBitmap ImageDecoder::Decode(const unsigned char* data, size_t size) const {
38 33 const WebImage& image = WebImage::fromData(
39 // What's going on here? ImageDecoder is only used by ImageResourceFetcher, 34 WebData(reinterpret_cast<const char*>(data), size), desired_icon_size_);
40 // which is only used (but extensively) by WebViewImpl. On the Mac we're using 35 #if WEBKIT_USING_SKIA
41 // CoreGraphics, but right now WebViewImpl uses SkBitmaps everywhere. For now, 36 return image.getSkBitmap();
42 // this is a convenient bottleneck to convert from CGImageRefs to SkBitmaps, 37 #elif WEBKIT_USING_CG
43 // but in the future we will need to replumb to get CGImageRefs (or whatever 38 return gfx::CGImageToSkBitmap(image.getCGImageRef());
44 // the native type is) everywhere, directly.
45
46 #if defined(OS_WIN) || defined(OS_LINUX)
47 WebCore::ImageSourceSkia source;
48 #elif defined(OS_MACOSX)
49 WebCore::ImageSource source;
50 #endif
51 WTF::RefPtr<WebCore::SharedBuffer> buffer(WebCore::SharedBuffer::create(
52 data, static_cast<int>(size)));
53 #if defined(OS_WIN) || defined(OS_LINUX)
54 source.setData(buffer.get(), true,
55 WebCore::IntSize(desired_icon_size_.width(),
56 desired_icon_size_.height()));
57 #elif defined(OS_MACOSX)
58 source.setData(buffer.get(), true);
59 #endif
60
61 if (!source.isSizeAvailable())
62 return SkBitmap();
63
64 WebCore::NativeImagePtr frame0 = source.createFrameAtIndex(0);
65 if (!frame0)
66 return SkBitmap();
67
68 #if defined(OS_WIN) || defined(OS_LINUX)
69 SkBitmap retval = *reinterpret_cast<SkBitmap*>(frame0);
70 delete frame0;
71 return retval;
72 #elif defined(OS_MACOSX)
73 // TODO(port): should we delete frame0 like Linux/Windows do above?
74 // BitmapImage releases automatically, but we're bypassing it so we'll need
75 // to do the releasing.
76 RetainPtr<CGImageRef> image(AdoptCF, frame0);
77 return gfx::CGImageToSkBitmap(image.get());
78 #endif 39 #endif
79 } 40 }
80 41
81 } // namespace webkit_glue 42 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/api/src/WebImageSkia.cpp ('k') | webkit/glue/webclipboard_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698