Index: ui/gfx/image/image_skia.cc |
diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cae5e36ce8cd555cedd5e5f35169a9c7696a61e9 |
--- /dev/null |
+++ b/ui/gfx/image/image_skia.cc |
@@ -0,0 +1,57 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/gfx/image/image_skia.h" |
+ |
+#include <limits.h> |
+#include <math.h> |
+ |
+#include "base/logging.h" |
+#include "base/stl_util.h" |
+ |
+namespace gfx { |
+ |
+ImageSkia::ImageSkia(const SkBitmap* bitmap) |
+ : size_(bitmap->width(), bitmap->height()) { |
+ DCHECK(bitmap); |
+ DCHECK(!bitmap->isNull()); |
+ bitmaps_.push_back(bitmap); |
+} |
+ |
+ImageSkia::ImageSkia(const std::vector<const SkBitmap*>& bitmaps) |
+ : bitmaps_(bitmaps) { |
+ // Assume that the smallest bitmap represents 1x scale factor. |
+ for (size_t i = 0; i < bitmaps_.size(); ++i) { |
+ DCHECK(!bitmaps[i]->isNull()); |
+ gfx::Size bitmap_size(bitmaps_[i]->width(), bitmaps_[i]->height()); |
+ if (size_.IsEmpty() || bitmap_size.GetArea() < size_.GetArea()) |
+ size_ = bitmap_size; |
+ } |
+} |
+ |
+ImageSkia::~ImageSkia() { |
+ STLDeleteElements(&bitmaps_); |
+} |
+ |
+const SkBitmap* ImageSkia::GetBitmapForScaleFactor( |
+ float device_scale_factor) const { |
+ // Get the desired bitmap width and height given |device_scale_factor| and |
+ // |size_| at 1x density. |
+ float desired_width = size_.width() * device_scale_factor; |
+ float desired_height = size_.height() * device_scale_factor; |
+ |
+ size_t closest_index; |
+ float smallest_diff = FLT_MAX; |
Robert Sesek
2012/04/16 16:06:01
std::numeric_limits
|
+ for (size_t i = 0; i < bitmaps_.size(); ++i) { |
+ float diff = fabs(bitmaps_[i]->width() - desired_width) + |
Robert Sesek
2012/04/16 16:06:01
std::abs
|
+ fabs(bitmaps_[i]->height() - desired_height); |
+ if (diff < smallest_diff) { |
+ closest_index = i; |
+ smallest_diff = diff; |
+ } |
+ } |
+ return bitmaps_[closest_index]; |
+} |
+ |
+} // namespace gfx |