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

Side by Side Diff: ui/gfx/icon_util.cc

Issue 361643002: setConfig is deprecated, use setInfo or allocPixels instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: don't call allocPixels+rowbytes yet (skia bug) Created 6 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 | « ui/gfx/color_utils.cc ('k') | ui/gfx/icon_util_unittest.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/gfx/icon_util.h" 5 #include "ui/gfx/icon_util.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/important_file_writer.h" 8 #include "base/files/important_file_writer.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 } 70 }
71 71
72 if (best->Size() == size) { 72 if (best->Size() == size) {
73 resized_image_family->Add(*best); 73 resized_image_family->Add(*best);
74 } else { 74 } else {
75 // There is no |dimension|x|dimension| source image. 75 // There is no |dimension|x|dimension| source image.
76 // Resize this one to the desired size, and insert it. 76 // Resize this one to the desired size, and insert it.
77 SkBitmap best_bitmap = best->AsBitmap(); 77 SkBitmap best_bitmap = best->AsBitmap();
78 // Only kARGB_8888 images are supported. 78 // Only kARGB_8888 images are supported.
79 // This will also filter out images with no pixels. 79 // This will also filter out images with no pixels.
80 if (best_bitmap.colorType() != kPMColor_SkColorType) 80 if (best_bitmap.colorType() != kN32_SkColorType)
81 return false; 81 return false;
82 SkBitmap resized_bitmap = skia::ImageOperations::Resize( 82 SkBitmap resized_bitmap = skia::ImageOperations::Resize(
83 best_bitmap, skia::ImageOperations::RESIZE_LANCZOS3, 83 best_bitmap, skia::ImageOperations::RESIZE_LANCZOS3,
84 dimension, dimension); 84 dimension, dimension);
85 resized_image_family->Add(gfx::Image::CreateFrom1xBitmap(resized_bitmap)); 85 resized_image_family->Add(gfx::Image::CreateFrom1xBitmap(resized_bitmap));
86 } 86 }
87 } 87 }
88 return true; 88 return true;
89 } 89 }
90 90
(...skipping 21 matching lines...) Expand all
112 DCHECK_GT(image.Width(), 0); 112 DCHECK_GT(image.Width(), 0);
113 DCHECK_LE(image.Width(), IconUtil::kLargeIconSize); 113 DCHECK_LE(image.Width(), IconUtil::kLargeIconSize);
114 DCHECK_GT(image.Height(), 0); 114 DCHECK_GT(image.Height(), 0);
115 DCHECK_LE(image.Height(), IconUtil::kLargeIconSize); 115 DCHECK_LE(image.Height(), IconUtil::kLargeIconSize);
116 116
117 SkBitmap bitmap = image.AsBitmap(); 117 SkBitmap bitmap = image.AsBitmap();
118 118
119 // Only 32 bit ARGB bitmaps are supported. We also make sure the bitmap has 119 // Only 32 bit ARGB bitmaps are supported. We also make sure the bitmap has
120 // been properly initialized. 120 // been properly initialized.
121 SkAutoLockPixels bitmap_lock(bitmap); 121 SkAutoLockPixels bitmap_lock(bitmap);
122 if ((bitmap.colorType() != kPMColor_SkColorType) || 122 if ((bitmap.colorType() != kN32_SkColorType) ||
123 (bitmap.getPixels() == NULL)) { 123 (bitmap.getPixels() == NULL)) {
124 return false; 124 return false;
125 } 125 }
126 126
127 // Special case: Icons exactly 256x256 are stored in PNG format. 127 // Special case: Icons exactly 256x256 are stored in PNG format.
128 if (image.Width() == IconUtil::kLargeIconSize && 128 if (image.Width() == IconUtil::kLargeIconSize &&
129 image.Height() == IconUtil::kLargeIconSize) { 129 image.Height() == IconUtil::kLargeIconSize) {
130 *png_bytes = image.As1xPNGBytes(); 130 *png_bytes = image.As1xPNGBytes();
131 } else { 131 } else {
132 bitmaps->push_back(bitmap); 132 bitmaps->push_back(bitmap);
(...skipping 26 matching lines...) Expand all
159 256 // Used by Vista onwards for large icons. 159 256 // Used by Vista onwards for large icons.
160 }; 160 };
161 161
162 const size_t IconUtil::kNumIconDimensions = arraysize(kIconDimensions); 162 const size_t IconUtil::kNumIconDimensions = arraysize(kIconDimensions);
163 const size_t IconUtil::kNumIconDimensionsUpToMediumSize = 9; 163 const size_t IconUtil::kNumIconDimensionsUpToMediumSize = 9;
164 164
165 HICON IconUtil::CreateHICONFromSkBitmap(const SkBitmap& bitmap) { 165 HICON IconUtil::CreateHICONFromSkBitmap(const SkBitmap& bitmap) {
166 // Only 32 bit ARGB bitmaps are supported. We also try to perform as many 166 // Only 32 bit ARGB bitmaps are supported. We also try to perform as many
167 // validations as we can on the bitmap. 167 // validations as we can on the bitmap.
168 SkAutoLockPixels bitmap_lock(bitmap); 168 SkAutoLockPixels bitmap_lock(bitmap);
169 if ((bitmap.colorType() != kPMColor_SkColorType) || 169 if ((bitmap.colorType() != kN32_SkColorType) ||
170 (bitmap.width() <= 0) || (bitmap.height() <= 0) || 170 (bitmap.width() <= 0) || (bitmap.height() <= 0) ||
171 (bitmap.getPixels() == NULL)) 171 (bitmap.getPixels() == NULL))
172 return NULL; 172 return NULL;
173 173
174 // We start by creating a DIB which we'll use later on in order to create 174 // We start by creating a DIB which we'll use later on in order to create
175 // the HICON. We use BITMAPV5HEADER since the bitmap we are about to convert 175 // the HICON. We use BITMAPV5HEADER since the bitmap we are about to convert
176 // may contain an alpha channel and the V5 header allows us to specify the 176 // may contain an alpha channel and the V5 header allows us to specify the
177 // alpha mask for the DIB. 177 // alpha mask for the DIB.
178 BITMAPV5HEADER bitmap_header; 178 BITMAPV5HEADER bitmap_header;
179 InitializeBitmapHeader(&bitmap_header, bitmap.width(), bitmap.height()); 179 InitializeBitmapHeader(&bitmap_header, bitmap.width(), bitmap.height());
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 // Once we compute the size for a singe AND mask scan line, we multiply that 681 // Once we compute the size for a singe AND mask scan line, we multiply that
682 // number by the image height in order to get the total number of bytes for 682 // number by the image height in order to get the total number of bytes for
683 // the AND mask. Thus, for a 15X15 image, we need 15 * 4 which is 60 bytes 683 // the AND mask. Thus, for a 15X15 image, we need 15 * 4 which is 60 bytes
684 // for the monochrome bitmap representing the AND mask. 684 // for the monochrome bitmap representing the AND mask.
685 size_t and_line_length = (bitmap.width() + 7) >> 3; 685 size_t and_line_length = (bitmap.width() + 7) >> 3;
686 and_line_length = (and_line_length + 3) & ~3; 686 and_line_length = (and_line_length + 3) & ~3;
687 size_t and_mask_size = and_line_length * bitmap.height(); 687 size_t and_mask_size = and_line_length * bitmap.height();
688 size_t masks_size = *xor_mask_size + and_mask_size; 688 size_t masks_size = *xor_mask_size + and_mask_size;
689 *bytes_in_resource = masks_size + sizeof(BITMAPINFOHEADER); 689 *bytes_in_resource = masks_size + sizeof(BITMAPINFOHEADER);
690 } 690 }
OLDNEW
« no previous file with comments | « ui/gfx/color_utils.cc ('k') | ui/gfx/icon_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698