OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/ui/app_list/fast_show_pickler.h" | 5 #include "chrome/browser/ui/app_list/fast_show_pickler.h" |
6 | 6 |
7 #include "third_party/skia/include/core/SkBitmap.h" | 7 #include "third_party/skia/include/core/SkBitmap.h" |
8 #include "ui/app_list/app_list_item_model.h" | 8 #include "ui/app_list/app_list_item_model.h" |
9 #include "ui/base/layout.h" | |
10 #include "ui/gfx/image/image_skia_rep.h" | 9 #include "ui/gfx/image/image_skia_rep.h" |
11 | 10 |
12 namespace { | 11 namespace { |
13 | 12 |
14 using app_list::AppListItemModel; | 13 using app_list::AppListItemModel; |
15 using app_list::AppListModel; | 14 using app_list::AppListModel; |
16 | 15 |
17 // These have the same meaning as SkBitmap::Config. Reproduced here to insure | 16 // These have the same meaning as SkBitmap::Config. Reproduced here to insure |
18 // against their value changing in Skia. If the order of these changes kVersion | 17 // against their value changing in Skia. If the order of these changes kVersion |
19 // should be incremented. | 18 // should be incremented. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 default: return false; | 80 default: return false; |
82 } | 81 } |
83 return true; | 82 return true; |
84 } | 83 } |
85 | 84 |
86 bool PickleImage(Pickle* pickle, const gfx::ImageSkia& image) { | 85 bool PickleImage(Pickle* pickle, const gfx::ImageSkia& image) { |
87 std::vector<gfx::ImageSkiaRep> reps(image.image_reps()); | 86 std::vector<gfx::ImageSkiaRep> reps(image.image_reps()); |
88 pickle->WriteInt(static_cast<int>(reps.size())); | 87 pickle->WriteInt(static_cast<int>(reps.size())); |
89 for (std::vector<gfx::ImageSkiaRep>::const_iterator it = reps.begin(); | 88 for (std::vector<gfx::ImageSkiaRep>::const_iterator it = reps.begin(); |
90 it != reps.end(); ++it) { | 89 it != reps.end(); ++it) { |
91 pickle->WriteInt(static_cast<int>(ui::GetSupportedScaleFactor(it->scale())))
; | 90 pickle->WriteFloat(it->scale()); |
92 pickle->WriteInt(it->pixel_width()); | 91 pickle->WriteInt(it->pixel_width()); |
93 pickle->WriteInt(it->pixel_height()); | 92 pickle->WriteInt(it->pixel_height()); |
94 ImageFormat format = NONE; | 93 ImageFormat format = NONE; |
95 if (!ConfigToFormat(it->sk_bitmap().getConfig(), &format)) | 94 if (!ConfigToFormat(it->sk_bitmap().getConfig(), &format)) |
96 return false; | 95 return false; |
97 pickle->WriteInt(static_cast<int>(format)); | 96 pickle->WriteInt(static_cast<int>(format)); |
98 int size = static_cast<int>(it->sk_bitmap().getSafeSize()); | 97 int size = static_cast<int>(it->sk_bitmap().getSafeSize()); |
99 pickle->WriteInt(size); | 98 pickle->WriteInt(size); |
100 SkBitmap bitmap = it->sk_bitmap(); | 99 SkBitmap bitmap = it->sk_bitmap(); |
101 SkAutoLockPixels lock(bitmap); | 100 SkAutoLockPixels lock(bitmap); |
102 pickle->WriteBytes(bitmap.getPixels(), size); | 101 pickle->WriteBytes(bitmap.getPixels(), size); |
103 } | 102 } |
104 return true; | 103 return true; |
105 } | 104 } |
106 | 105 |
107 bool UnpickleImage(PickleIterator* it, gfx::ImageSkia* out) { | 106 bool UnpickleImage(PickleIterator* it, gfx::ImageSkia* out) { |
108 int rep_count = 0; | 107 int rep_count = 0; |
109 if (!it->ReadInt(&rep_count)) | 108 if (!it->ReadInt(&rep_count)) |
110 return false; | 109 return false; |
111 | 110 |
112 gfx::ImageSkia result; | 111 gfx::ImageSkia result; |
113 for (int i = 0; i < rep_count; ++i) { | 112 for (int i = 0; i < rep_count; ++i) { |
114 int scale_factor = 0; | 113 float scale = 0.0f; |
115 if (!it->ReadInt(&scale_factor)) | 114 if (!it->ReadFloat(&scale)) |
116 return false; | 115 return false; |
117 | 116 |
118 int width = 0; | 117 int width = 0; |
119 if (!it->ReadInt(&width)) | 118 if (!it->ReadInt(&width)) |
120 return false; | 119 return false; |
121 | 120 |
122 int height = 0; | 121 int height = 0; |
123 if (!it->ReadInt(&height)) | 122 if (!it->ReadInt(&height)) |
124 return false; | 123 return false; |
125 | 124 |
(...skipping 14 matching lines...) Expand all Loading... |
140 return false; | 139 return false; |
141 | 140 |
142 SkBitmap bitmap; | 141 SkBitmap bitmap; |
143 bitmap.setConfig(static_cast<SkBitmap::Config>(config), width, height); | 142 bitmap.setConfig(static_cast<SkBitmap::Config>(config), width, height); |
144 if (!bitmap.allocPixels()) | 143 if (!bitmap.allocPixels()) |
145 return false; | 144 return false; |
146 { | 145 { |
147 SkAutoLockPixels lock(bitmap); | 146 SkAutoLockPixels lock(bitmap); |
148 memcpy(bitmap.getPixels(), pixels, bitmap.getSize()); | 147 memcpy(bitmap.getPixels(), pixels, bitmap.getSize()); |
149 } | 148 } |
150 float scale = ui::GetImageScale(static_cast<ui::ScaleFactor>(scale_factor)); | |
151 result.AddRepresentation(gfx::ImageSkiaRep(bitmap, scale)); | 149 result.AddRepresentation(gfx::ImageSkiaRep(bitmap, scale)); |
152 } | 150 } |
153 | 151 |
154 *out = result; | 152 *out = result; |
155 return true; | 153 return true; |
156 } | 154 } |
157 | 155 |
158 scoped_ptr<AppListItemModel> UnpickleAppListItemModel(PickleIterator* it) { | 156 scoped_ptr<AppListItemModel> UnpickleAppListItemModel(PickleIterator* it) { |
159 scoped_ptr<AppListItemModel> result(new AppListItemModel); | 157 scoped_ptr<AppListItemModel> result(new AppListItemModel); |
160 std::string id; | 158 std::string id; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 model->SetSignedIn(signed_in); | 248 model->SetSignedIn(signed_in); |
251 for (int i = 0; i < app_count; ++i) { | 249 for (int i = 0; i < app_count; ++i) { |
252 scoped_ptr<AppListItemModel> item(UnpickleAppListItemModel(&it).Pass()); | 250 scoped_ptr<AppListItemModel> item(UnpickleAppListItemModel(&it).Pass()); |
253 if (!item) | 251 if (!item) |
254 return scoped_ptr<AppListModel>(); | 252 return scoped_ptr<AppListModel>(); |
255 model->apps()->Add(item.release()); | 253 model->apps()->Add(item.release()); |
256 } | 254 } |
257 | 255 |
258 return model.Pass(); | 256 return model.Pass(); |
259 } | 257 } |
OLD | NEW |