diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-25 17:43:31 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-25 17:43:31 +0000 |
commit | b1a99303c1c3f4117ab6d754ed8895375471e9fa (patch) | |
tree | 55e1534ddd7c71af70b79207344d788f128ddb48 /ui/base/layout.cc | |
parent | bc9331f46efadce419fabb15850c1a9eaf8a0932 (diff) | |
download | chromium_src-b1a99303c1c3f4117ab6d754ed8895375471e9fa.zip chromium_src-b1a99303c1c3f4117ab6d754ed8895375471e9fa.tar.gz chromium_src-b1a99303c1c3f4117ab6d754ed8895375471e9fa.tar.bz2 |
This CL adds a new object: ImageSkiaRep
The object represents an SkBitmap and the scale factor that it is painted at.
The CL also changes the ImageSkia API to use ui::ScaleFactor instead of floats.
In Chromium, having this object is useful because it makes extracting an SkBitmap from an ImageSkia object and packing it back into an ImageSkia object easier.
In particular, this makes:
float scale_factor;
SkBitmap bitmap = input_image->GetBitmapForScale(1.0f, &scale_factor);
// do some work with the bitmap
gfx::ImageSkia output_image(bitmap, scale_factor);
into
gfx::ImageSkiaRep image_rep = input_image->GetRepresentation(ui::SCALE_FACTOR_100P);
// do some work with the image_rep
gfx::ImageSkia output_image(image_rep);
R=sky
TBR=sadrul for chrome/browser/chromeos/status
Review URL: https://chromiumcodereview.appspot.com/10448070
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143940 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/layout.cc')
-rw-r--r-- | ui/base/layout.cc | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/ui/base/layout.cc b/ui/base/layout.cc index 451e9ac..ac4ee55 100644 --- a/ui/base/layout.cc +++ b/ui/base/layout.cc @@ -4,6 +4,9 @@ #include "ui/base/layout.h" +#include <cmath> +#include <limits> + #include "base/basictypes.h" #include "base/command_line.h" #include "base/logging.h" @@ -68,8 +71,21 @@ bool UseTouchOptimizedUI() { } const float kScaleFactorScales[] = {1.0, 2.0}; - +const size_t kScaleFactorScalesLength = arraysize(kScaleFactorScales); + +#if defined(OS_MACOSX) +std::vector<ui::ScaleFactor>& GetSupportedScaleFactorsInternal() { + static std::vector<ui::ScaleFactor>* supported_scale_factors = + new std::vector<ui::ScaleFactor>(); + if (supported_scale_factors->empty()) { + supported_scale_factors->push_back(ui::SCALE_FACTOR_100P); + supported_scale_factors->push_back(ui::SCALE_FACTOR_200P); + } + return *supported_scale_factors; } +#endif // OS_MACOSX + +} // namespace namespace ui { @@ -90,8 +106,42 @@ DisplayLayout GetDisplayLayout() { #endif } +ScaleFactor GetScaleFactorFromScale(float scale) { + size_t closest_match = 0; + float smallest_diff = std::numeric_limits<float>::max(); + for (size_t i = 0; i < kScaleFactorScalesLength; ++i) { + float diff = std::abs(kScaleFactorScales[i] - scale); + if (diff < smallest_diff) { + closest_match = i; + smallest_diff = diff; + } + } + return static_cast<ui::ScaleFactor>(closest_match); +} + float GetScaleFactorScale(ScaleFactor scale_factor) { return kScaleFactorScales[scale_factor]; } +#if defined(OS_MACOSX) +std::vector<ScaleFactor> GetSupportedScaleFactors() { + return GetSupportedScaleFactorsInternal(); +} + +namespace test { + +void SetSupportedScaleFactors( + const std::vector<ui::ScaleFactor>& scale_factors) { + std::vector<ui::ScaleFactor>& supported_scale_factors = + GetSupportedScaleFactorsInternal(); + supported_scale_factors.clear(); + + for (size_t i = 0; i < scale_factors.size(); ++i) + supported_scale_factors.push_back(scale_factors[i]); +} + +} // namespace test + +#endif // OS_MACOSX + } // namespace ui |