OLD | NEW |
| (Empty) |
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 #include "cc/resources/ui_resource_bitmap.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/memory/scoped_ptr.h" | |
9 #include "third_party/skia/include/core/SkBitmap.h" | |
10 #include "third_party/skia/include/core/SkMallocPixelRef.h" | |
11 #include "third_party/skia/include/core/SkPixelRef.h" | |
12 | |
13 namespace cc { | |
14 namespace { | |
15 | |
16 UIResourceBitmap::UIResourceFormat SkColorTypeToUIResourceFormat( | |
17 SkColorType sk_type) { | |
18 UIResourceBitmap::UIResourceFormat format = UIResourceBitmap::RGBA8; | |
19 switch (sk_type) { | |
20 case kN32_SkColorType: | |
21 format = UIResourceBitmap::RGBA8; | |
22 break; | |
23 case kAlpha_8_SkColorType: | |
24 format = UIResourceBitmap::ALPHA_8; | |
25 break; | |
26 default: | |
27 NOTREACHED() << "Invalid SkColorType for UIResourceBitmap: " << sk_type; | |
28 break; | |
29 } | |
30 return format; | |
31 } | |
32 | |
33 } // namespace | |
34 | |
35 void UIResourceBitmap::Create(const skia::RefPtr<SkPixelRef>& pixel_ref, | |
36 const gfx::Size& size, | |
37 UIResourceFormat format) { | |
38 DCHECK(size.width()); | |
39 DCHECK(size.height()); | |
40 DCHECK(pixel_ref); | |
41 DCHECK(pixel_ref->isImmutable()); | |
42 format_ = format; | |
43 size_ = size; | |
44 pixel_ref_ = pixel_ref; | |
45 | |
46 // Default values for secondary parameters. | |
47 wrap_mode_ = CLAMP_TO_EDGE; | |
48 opaque_ = (format == ETC1); | |
49 } | |
50 | |
51 UIResourceBitmap::UIResourceBitmap(const SkBitmap& skbitmap) { | |
52 DCHECK_EQ(skbitmap.width(), skbitmap.rowBytesAsPixels()); | |
53 DCHECK(skbitmap.isImmutable()); | |
54 | |
55 skia::RefPtr<SkPixelRef> pixel_ref = skia::SharePtr(skbitmap.pixelRef()); | |
56 const SkImageInfo& info = pixel_ref->info(); | |
57 Create(pixel_ref, | |
58 gfx::Size(info.fWidth, info.fHeight), | |
59 SkColorTypeToUIResourceFormat(skbitmap.colorType())); | |
60 | |
61 SetOpaque(skbitmap.isOpaque()); | |
62 } | |
63 | |
64 UIResourceBitmap::UIResourceBitmap(const gfx::Size& size, bool is_opaque) { | |
65 SkAlphaType alphaType = is_opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; | |
66 SkImageInfo info = | |
67 SkImageInfo::MakeN32(size.width(), size.height(), alphaType); | |
68 skia::RefPtr<SkPixelRef> pixel_ref = skia::AdoptRef( | |
69 SkMallocPixelRef::NewAllocate(info, info.minRowBytes(), NULL)); | |
70 pixel_ref->setImmutable(); | |
71 Create(pixel_ref, size, UIResourceBitmap::RGBA8); | |
72 SetOpaque(is_opaque); | |
73 } | |
74 | |
75 UIResourceBitmap::UIResourceBitmap(const skia::RefPtr<SkPixelRef>& pixel_ref, | |
76 const gfx::Size& size) { | |
77 Create(pixel_ref, size, UIResourceBitmap::ETC1); | |
78 } | |
79 | |
80 UIResourceBitmap::~UIResourceBitmap() {} | |
81 | |
82 AutoLockUIResourceBitmap::AutoLockUIResourceBitmap( | |
83 const UIResourceBitmap& bitmap) : bitmap_(bitmap) { | |
84 bitmap_.pixel_ref_->lockPixels(); | |
85 } | |
86 | |
87 AutoLockUIResourceBitmap::~AutoLockUIResourceBitmap() { | |
88 bitmap_.pixel_ref_->unlockPixels(); | |
89 } | |
90 | |
91 const uint8_t* AutoLockUIResourceBitmap::GetPixels() const { | |
92 return static_cast<const uint8_t*>(bitmap_.pixel_ref_->pixels()); | |
93 } | |
94 | |
95 } // namespace cc | |
OLD | NEW |