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

Unified Diff: ui/base/resource/resource_bundle.cc

Issue 24175004: Remove dependency on ui::ScaleFactor from ui/gfx (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix new usage of scale in FastShowPickler Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/resource/resource_bundle.h ('k') | ui/base/resource/resource_bundle_ios.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/resource/resource_bundle.cc
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc
index 31aed58d5bcedef99a2e4b67ddc097e188e64a7f..8d2815db437f6bba95bc60d82c83f444ae8d5ac1 100644
--- a/ui/base/resource/resource_bundle.cc
+++ b/ui/base/resource/resource_bundle.cc
@@ -40,6 +40,14 @@
#include "ui/gfx/platform_font_pango.h"
#endif
+#if defined(OS_WIN)
+#include "ui/gfx/win/dpi.h"
+#endif
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+#include "base/mac/mac_util.h"
+#endif
+
namespace ui {
namespace {
@@ -80,18 +88,19 @@ class ResourceBundle::ResourceBundleImageSource : public gfx::ImageSkiaSource {
virtual ~ResourceBundleImageSource() {}
// gfx::ImageSkiaSource overrides:
- virtual gfx::ImageSkiaRep GetImageForScale(
- ui::ScaleFactor scale_factor) OVERRIDE {
+ virtual gfx::ImageSkiaRep GetImageForScale(float scale) OVERRIDE {
SkBitmap image;
bool fell_back_to_1x = false;
+ ScaleFactor scale_factor = GetSupportedScaleFactor(scale);
bool found = rb_->LoadBitmap(resource_id_, &scale_factor,
&image, &fell_back_to_1x);
+ // Force to a supported scale.
+ scale = ui::GetImageScale(scale_factor);
if (!found)
return gfx::ImageSkiaRep();
if (fell_back_to_1x) {
// GRIT fell back to the 100% image, so rescale it to the correct size.
- float scale = GetScaleFactorScale(scale_factor);
image = skia::ImageOperations::Resize(
image,
skia::ImageOperations::RESIZE_LANCZOS3,
@@ -112,7 +121,7 @@ class ResourceBundle::ResourceBundleImageSource : public gfx::ImageSkiaSource {
}
}
- return gfx::ImageSkiaRep(image, scale_factor);
+ return gfx::ImageSkiaRep(image, scale);
}
private:
@@ -125,9 +134,7 @@ class ResourceBundle::ResourceBundleImageSource : public gfx::ImageSkiaSource {
// static
std::string ResourceBundle::InitSharedInstanceWithLocale(
const std::string& pref_locale, Delegate* delegate) {
- DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice";
- g_shared_instance_ = new ResourceBundle(delegate);
-
+ InitSharedInstance(delegate);
g_shared_instance_->LoadCommonResources();
std::string result = g_shared_instance_->LoadLocaleResources(pref_locale);
InitDefaultFont();
@@ -137,9 +144,7 @@ std::string ResourceBundle::InitSharedInstanceWithLocale(
// static
std::string ResourceBundle::InitSharedInstanceLocaleOnly(
const std::string& pref_locale, Delegate* delegate) {
- DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice";
- g_shared_instance_ = new ResourceBundle(delegate);
-
+ InitSharedInstance(delegate);
std::string result = g_shared_instance_->LoadLocaleResources(pref_locale);
InitDefaultFont();
return result;
@@ -148,9 +153,7 @@ std::string ResourceBundle::InitSharedInstanceLocaleOnly(
// static
void ResourceBundle::InitSharedInstanceWithPakFile(
base::PlatformFile pak_file, bool should_load_common_resources) {
- DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice";
- g_shared_instance_ = new ResourceBundle(NULL);
-
+ InitSharedInstance(NULL);
if (should_load_common_resources)
g_shared_instance_->LoadCommonResources();
@@ -166,9 +169,7 @@ void ResourceBundle::InitSharedInstanceWithPakFile(
// static
void ResourceBundle::InitSharedInstanceWithPakPath(const base::FilePath& path) {
- DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice";
- g_shared_instance_ = new ResourceBundle(NULL);
-
+ InitSharedInstance(NULL);
g_shared_instance_->LoadTestResources(path, path);
InitDefaultFont();
@@ -341,18 +342,20 @@ gfx::Image& ResourceBundle::GetImageNamed(int resource_id) {
DCHECK(!data_packs_.empty()) <<
"Missing call to SetResourcesDataDLL?";
+#if defined(OS_CHROMEOS)
+ ui::ScaleFactor scale_factor_to_load = GetMaxScaleFactor();
+#else
+ ui::ScaleFactor scale_factor_to_load = ui::SCALE_FACTOR_100P;
+#endif
+
+ float scale = GetImageScale(scale_factor_to_load);
// TODO(oshima): Consider reading the image size from png IHDR chunk and
// skip decoding here and remove #ifdef below.
// ResourceBundle::GetSharedInstance() is destroyed after the
// BrowserMainLoop has finished running. |image_skia| is guaranteed to be
// destroyed before the resource bundle is destroyed.
-#if defined(OS_CHROMEOS)
- ui::ScaleFactor scale_factor_to_load = ui::GetMaxScaleFactor();
-#else
- ui::ScaleFactor scale_factor_to_load = ui::SCALE_FACTOR_100P;
-#endif
gfx::ImageSkia image_skia(new ResourceBundleImageSource(this, resource_id),
- scale_factor_to_load);
+ scale);
if (image_skia.isNull()) {
LOG(WARNING) << "Unable to load image with id " << resource_id;
NOTREACHED(); // Want to assert in debug mode.
@@ -510,6 +513,14 @@ void ResourceBundle::ReloadFonts() {
LoadFontsIfNecessary();
}
+ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
+#if defined(OS_CHROMEOS)
+ return max_scale_factor_;
+#else
+ return GetSupportedScaleFactors().back();
+#endif
+}
+
ResourceBundle::ResourceBundle(Delegate* delegate)
: delegate_(delegate),
images_and_fonts_lock_(new base::Lock),
@@ -522,6 +533,49 @@ ResourceBundle::~ResourceBundle() {
UnloadLocaleResources();
}
+// static
+void ResourceBundle::InitSharedInstance(Delegate* delegate) {
+ DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice";
+ g_shared_instance_ = new ResourceBundle(delegate);
+ static std::vector<ScaleFactor> supported_scale_factors;
+#if !defined(OS_IOS)
+ // On platforms other than iOS, 100P is always a supported scale factor.
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+#endif
+
+#if defined(OS_ANDROID)
+ const gfx::Display display =
+ gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
+ const float display_density = display.device_scale_factor();
+ const ScaleFactor closest = FindClosestScaleFactorUnsafe(display_density);
+ if (closest != SCALE_FACTOR_100P)
+ supported_scale_factors.push_back(closest);
+#elif defined(OS_IOS)
+ gfx::Display display = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
+ if (display.device_scale_factor() > 1.0) {
+ DCHECK_EQ(2.0, display.device_scale_factor());
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+ } else {
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+ }
+#elif defined(OS_MACOSX)
+ if (base::mac::IsOSLionOrLater())
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+#elif defined(OS_WIN)
+ // Have high-DPI resources for 140% and 180% scaling on Windows based on
+ // default scaling for Metro mode. Round to nearest supported scale in
+ // all cases.
+ if (gfx::IsInHighDPIMode()) {
+ supported_scale_factors.push_back(SCALE_FACTOR_140P);
+ supported_scale_factors.push_back(SCALE_FACTOR_180P);
+ }
+#elif defined(OS_CHROMEOS)
+ // TODO(oshima): Include 200P only if the device support 200P
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+#endif
+ ui::SetSupportedScaleFactors(supported_scale_factors);
+}
+
void ResourceBundle::FreeImages() {
images_.clear();
}
@@ -554,8 +608,8 @@ void ResourceBundle::AddDataPackFromPathInternal(const base::FilePath& path,
void ResourceBundle::AddDataPack(DataPack* data_pack) {
data_packs_.push_back(data_pack);
- if (GetScaleFactorScale(data_pack->GetScaleFactor()) >
- GetScaleFactorScale(max_scale_factor_))
+ if (GetImageScale(data_pack->GetScaleFactor()) >
+ GetImageScale(max_scale_factor_))
max_scale_factor_ = data_pack->GetScaleFactor();
}
« no previous file with comments | « ui/base/resource/resource_bundle.h ('k') | ui/base/resource/resource_bundle_ios.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698