Commit 54e977e6 authored by Alex Ilin's avatar Alex Ilin Committed by Commit Bot

[ProfilePicker] Multiply avatar icon sizes by the device scale factor

Avatars displayed in webUI should have their size multiplied by the
device scale factor. Otherwise, the avatars look blurry when Chrome is
running with device scale factor > 1.

Fixed: 1128102
Change-Id: I9a3f5e38b5bf9e8c14889bbef619f2a6eae565b9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2413948
Commit-Queue: Alex Ilin <alexilin@chromium.org>
Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#807467}
parent 6ed8f7dc
......@@ -41,7 +41,7 @@
#include "ui/gfx/image/image.h"
namespace {
const size_t kAvatarIconSize = 74;
const size_t kProfileCardAvatarSize = 74;
const size_t kProfileCreationAvatarSize = 100;
constexpr int kDefaultThemeColorId = -1;
......@@ -98,7 +98,8 @@ base::Value GetAutogeneratedProfileThemeInfoValue(int color_id,
base::Optional<SkColor> color,
SkColor frame_color,
SkColor active_tab_color,
SkColor frame_text_color) {
SkColor frame_text_color,
int avatar_icon_size) {
base::Value dict(base::Value::Type::DICTIONARY);
dict.SetIntKey("colorId", color_id);
if (color.has_value())
......@@ -111,14 +112,13 @@ base::Value GetAutogeneratedProfileThemeInfoValue(int color_id,
color_utils::SkColorToRgbaString(frame_text_color));
gfx::Image icon = profiles::GetPlaceholderAvatarIconWithColors(
/*fill_color=*/frame_color,
/*stroke_color=*/GetAvatarStrokeColor(frame_color),
kProfileCreationAvatarSize);
/*stroke_color=*/GetAvatarStrokeColor(frame_color), avatar_icon_size);
dict.SetStringKey("themeGenericAvatar",
webui::GetBitmapDataUrl(icon.AsBitmap()));
return dict;
}
base::Value CreateDefaultProfileThemeInfo() {
base::Value CreateDefaultProfileThemeInfo(int avatar_icon_size) {
bool dark_mode =
ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors();
SkColor frame_color = ThemeProperties::GetDefaultColor(
......@@ -130,16 +130,19 @@ base::Value CreateDefaultProfileThemeInfo() {
/*incognito=*/false, dark_mode);
return GetAutogeneratedProfileThemeInfoValue(
kDefaultThemeColorId, base::nullopt, frame_color, active_tab_color,
frame_text_color);
frame_text_color, avatar_icon_size);
}
base::Value CreateAutogeneratedProfileThemeInfo(int color_id, SkColor color) {
base::Value CreateAutogeneratedProfileThemeInfo(int color_id,
SkColor color,
int avatar_icon_size) {
auto theme_colors = GetAutogeneratedThemeColors(color);
SkColor frame_color = theme_colors.frame_color;
SkColor active_tab_color = theme_colors.active_tab_color;
SkColor frame_text_color = theme_colors.frame_text_color;
return GetAutogeneratedProfileThemeInfoValue(
color_id, color, frame_color, active_tab_color, frame_text_color);
color_id, color, frame_color, active_tab_color, frame_text_color,
avatar_icon_size);
}
} // namespace
......@@ -275,8 +278,10 @@ void ProfilePickerHandler::HandleGetNewProfileSuggestedThemeInfo(
CHECK_EQ(1U, args->GetSize());
const base::Value& callback_id = args->GetList()[0];
chrome_colors::ColorInfo color_info = GenerateNewProfileColor();
base::Value dict =
CreateAutogeneratedProfileThemeInfo(color_info.id, color_info.color);
int avatar_icon_size =
kProfileCreationAvatarSize * web_ui()->GetDeviceScaleFactor();
base::Value dict = CreateAutogeneratedProfileThemeInfo(
color_info.id, color_info.color, avatar_icon_size);
ResolveJavascriptCallback(callback_id, std::move(dict));
}
......@@ -288,17 +293,20 @@ void ProfilePickerHandler::HandleGetProfileThemeInfo(
const base::Value& user_theme_choice = args->GetList()[1];
int color_id = user_theme_choice.FindIntKey("colorId").value();
base::Optional<SkColor> color = user_theme_choice.FindDoubleKey("color");
int avatar_icon_size =
kProfileCreationAvatarSize * web_ui()->GetDeviceScaleFactor();
base::Value dict;
switch (color_id) {
case kDefaultThemeColorId:
dict = CreateDefaultProfileThemeInfo();
dict = CreateDefaultProfileThemeInfo(avatar_icon_size);
break;
case kManuallyPickedColorId:
dict = CreateAutogeneratedProfileThemeInfo(color_id, *color);
dict = CreateAutogeneratedProfileThemeInfo(color_id, *color,
avatar_icon_size);
break;
default:
dict = CreateAutogeneratedProfileThemeInfo(
color_id, *GetChromeColorColorById(color_id));
color_id, *GetChromeColorColorById(color_id), avatar_icon_size);
break;
}
ResolveJavascriptCallback(callback_id, std::move(dict));
......@@ -514,6 +522,8 @@ base::Value ProfilePickerHandler::GetProfilesList() {
g_browser_process->profile_manager()
->GetProfileAttributesStorage()
.GetAllProfilesAttributesSortedByName();
const int avatar_icon_size =
kProfileCardAvatarSize * web_ui()->GetDeviceScaleFactor();
for (const ProfileAttributesEntry* entry : entries) {
auto profile_entry = std::make_unique<base::DictionaryValue>();
profile_entry->SetKey("profilePath",
......@@ -528,8 +538,9 @@ base::Value ProfilePickerHandler::GetProfilesList() {
profile_entry->SetString("userName", entry->GetUserName());
profile_entry->SetBoolPath("isManaged",
IsManaged(entry->GetHostedDomain()));
gfx::Image icon = profiles::GetSizedAvatarIcon(
entry->GetAvatarIcon(), true, kAvatarIconSize, kAvatarIconSize);
gfx::Image icon =
profiles::GetSizedAvatarIcon(entry->GetAvatarIcon(avatar_icon_size),
true, avatar_icon_size, avatar_icon_size);
std::string icon_url = webui::GetBitmapDataUrl(icon.AsBitmap());
profile_entry->SetString("avatarIcon", icon_url);
profiles_list.Append(std::move(profile_entry));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment