diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-02 07:22:07 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-02 07:22:07 +0000 |
commit | 700f8aa8b828e539cf7897e079cb800a7670a9a1 (patch) | |
tree | 8b1d3dd4cb8d04cd92e4122dddf64ac400c6ecbc | |
parent | fa8acde7155603b9ddde3c610df8fd04b69339e3 (diff) | |
download | chromium_src-700f8aa8b828e539cf7897e079cb800a7670a9a1.zip chromium_src-700f8aa8b828e539cf7897e079cb800a7670a9a1.tar.gz chromium_src-700f8aa8b828e539cf7897e079cb800a7670a9a1.tar.bz2 |
views: Make sure menu checks and submenu arrows have high contrast even when selected.
BUG=298398
Review URL: https://codereview.chromium.org/25144002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226416 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ui/resources/ui_resources.grd | 2 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_views.cc | 6 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_image_util.cc | 56 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_image_util.h | 10 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view.cc | 18 |
5 files changed, 56 insertions, 36 deletions
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd index 06043de..d1b721a 100644 --- a/ui/resources/ui_resources.grd +++ b/ui/resources/ui_resources.grd @@ -240,6 +240,7 @@ </if> <if expr="pp_ifdef('toolkit_views')"> <structure type="chrome_scaled_image" name="IDR_MENU_HIERARCHY_ARROW" file="common/menu_hierarchy_arrow.png" /> + <structure type="chrome_scaled_image" name="IDR_MENU_HIERARCHY_ARROW_DARK_BACKGROUND" file="common/menu_hierarchy_arrow_white.png" /> </if> <if expr="is_macosx or is_ios"> <structure type="chrome_scaled_image" name="IDR_MENU_HIERARCHY_ARROW" file="mac/menu_hierarchy_arrow.png" /> @@ -247,6 +248,7 @@ <if expr="pp_ifdef('toolkit_views')"> <structure type="chrome_scaled_image" name="IDR_MENU_CHECK" file="cros/menu_check.png" /> <structure type="chrome_scaled_image" name="IDR_MENU_CHECK_CHECKED" file="common/menu_check.png" /> + <structure type="chrome_scaled_image" name="IDR_MENU_CHECK_CHECKED_DARK_BACKGROUND" file="common/menu_check_white.png" /> <structure type="chrome_scaled_image" name="IDR_MENU_RADIO_EMPTY" file="common/menu_radio_empty.png" /> <structure type="chrome_scaled_image" name="IDR_MENU_RADIO_SELECTED" file="common/menu_radio_selected.png" /> <structure type="chrome_scaled_image" name="IDR_SLIDER_ACTIVE_LEFT" file="slider_left_active.png" /> diff --git a/ui/views/controls/menu/menu_config_views.cc b/ui/views/controls/menu/menu_config_views.cc index baa5615..de2375c 100644 --- a/ui/views/controls/menu/menu_config_views.cc +++ b/ui/views/controls/menu/menu_config_views.cc @@ -32,12 +32,12 @@ void MenuConfig::InitAura(const ui::NativeTheme* theme) { text_color = theme->GetSystemColor( ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor); submenu_horizontal_inset = 1; - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); arrow_to_edge_padding = 20; + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); arrow_width = rb.GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia()->width(); - const gfx::ImageSkia* check = GetMenuCheckImage(); - check_height = check->height(); + gfx::ImageSkia check = GetMenuCheckImage(false); + check_height = check.height(); item_min_height = 29; separator_spacing_height = 7; separator_lower_height = 8; diff --git a/ui/views/controls/menu/menu_image_util.cc b/ui/views/controls/menu/menu_image_util.cc index 2a881da..2a585cb 100644 --- a/ui/views/controls/menu/menu_image_util.cc +++ b/ui/views/controls/menu/menu_image_util.cc @@ -105,15 +105,15 @@ gfx::ImageSkia* CreateRadioButtonImage(bool selected) { class SubmenuArrowImageSource : public gfx::CanvasImageSource { public: - SubmenuArrowImageSource() - : gfx::CanvasImageSource(GetSubmenuArrowSize(), false) { - } + SubmenuArrowImageSource(int image_id) + : gfx::CanvasImageSource(ui::ResourceBundle::GetSharedInstance(). + GetImageNamed(image_id).ToImageSkia()->size(), false), + image_id_(image_id) {} virtual ~SubmenuArrowImageSource() {} virtual void Draw(gfx::Canvas* canvas) OVERRIDE { ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - const gfx::ImageSkia* r = - rb.GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia(); + const gfx::ImageSkia* r = rb.GetImageNamed(image_id_).ToImageSkia(); canvas->Scale(-1, 1); canvas->DrawImageInt(*r, - r->width(), 0); } @@ -124,38 +124,52 @@ class SubmenuArrowImageSource : public gfx::CanvasImageSource { .GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia()->size(); } + int image_id_; + DISALLOW_COPY_AND_ASSIGN(SubmenuArrowImageSource); }; -gfx::ImageSkia* GetRtlSubmenuArrowImage() { +gfx::ImageSkia GetRtlSubmenuArrowImage(bool rtl, + bool dark_background) { + int image_id = dark_background ? IDR_MENU_HIERARCHY_ARROW_DARK_BACKGROUND : + IDR_MENU_HIERARCHY_ARROW; + + if (!rtl) { + return ui::ResourceBundle::GetSharedInstance().GetImageNamed(image_id). + AsImageSkia(); + } + static gfx::ImageSkia* kRtlArrow = NULL; - if (!kRtlArrow) { - SubmenuArrowImageSource* source = new SubmenuArrowImageSource(); - kRtlArrow = new gfx::ImageSkia(source, source->size()); + static gfx::ImageSkia* kRtlArrowDarkBg = NULL; + gfx::ImageSkia** image = dark_background ? &kRtlArrowDarkBg : &kRtlArrow; + + if (!*image) { + SubmenuArrowImageSource* source = new SubmenuArrowImageSource(image_id); + *image = new gfx::ImageSkia(source, source->size()); } - return kRtlArrow; + + return **image; } } // namespace namespace views { -const gfx::ImageSkia* GetMenuCheckImage() { - return ui::ResourceBundle::GetSharedInstance().GetImageNamed( - IDR_MENU_CHECK_CHECKED).ToImageSkia(); +gfx::ImageSkia GetMenuCheckImage(bool dark_background) { + int image_id = dark_background ? IDR_MENU_CHECK_CHECKED_DARK_BACKGROUND : + IDR_MENU_CHECK_CHECKED; + return ui::ResourceBundle::GetSharedInstance().GetImageNamed(image_id). + AsImageSkia(); } -const gfx::ImageSkia* GetRadioButtonImage(bool selected) { +gfx::ImageSkia GetRadioButtonImage(bool selected) { int image_id = selected ? IDR_MENU_RADIO_SELECTED : IDR_MENU_RADIO_EMPTY; - return ui::ResourceBundle::GetSharedInstance().GetImageNamed( - image_id).ToImageSkia(); + return ui::ResourceBundle::GetSharedInstance().GetImageNamed(image_id). + AsImageSkia(); } -const gfx::ImageSkia* GetSubmenuArrowImage() { - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - return base::i18n::IsRTL() - ? GetRtlSubmenuArrowImage() - : rb.GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia(); +gfx::ImageSkia GetSubmenuArrowImage(bool dark_background) { + return GetRtlSubmenuArrowImage(base::i18n::IsRTL(), dark_background); } } // namespace views diff --git a/ui/views/controls/menu/menu_image_util.h b/ui/views/controls/menu/menu_image_util.h index cf8c8db..93645c8 100644 --- a/ui/views/controls/menu/menu_image_util.h +++ b/ui/views/controls/menu/menu_image_util.h @@ -13,16 +13,20 @@ namespace views { // Returns the Menu Check box image (always checked). // The returned image is global object and should not be freed. -const gfx::ImageSkia* GetMenuCheckImage(); +// |dark_background| should be true if the check will be displayed on a +// dark background (such as a hovered menu item). +gfx::ImageSkia GetMenuCheckImage(bool dark_background); // Return the RadioButton image for given state. // It returns the "selected" image when |selected| is // true, or the "unselected" image if false. // The returned image is global object and should not be freed. -const gfx::ImageSkia* GetRadioButtonImage(bool selected); +gfx::ImageSkia GetRadioButtonImage(bool selected); // Returns the image for submenu arrow for current RTL setting. -const gfx::ImageSkia* GetSubmenuArrowImage(); +// |dark_background| should be true if the check will be displayed on a +// dark background (such as a hovered menu item). +gfx::ImageSkia GetSubmenuArrowImage(bool dark_background); } // namespace views diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc index 1e526f1..24dcb31 100644 --- a/ui/views/controls/menu/menu_item_view.cc +++ b/ui/views/controls/menu/menu_item_view.cc @@ -768,23 +768,23 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { // Render the check. if (type_ == CHECKBOX && delegate->IsItemChecked(GetCommand())) { - const gfx::ImageSkia* check = GetMenuCheckImage(); + gfx::ImageSkia check = GetMenuCheckImage(IsSelected()); // Don't use config.check_width here as it's padded // to force more padding (AURA). - gfx::Rect check_bounds(icon_x, icon_y, check->width(), icon_height); + gfx::Rect check_bounds(icon_x, icon_y, check.width(), icon_height); AdjustBoundsForRTLUI(&check_bounds); - canvas->DrawImageInt(*check, check_bounds.x(), check_bounds.y()); + canvas->DrawImageInt(check, check_bounds.x(), check_bounds.y()); } else if (type_ == RADIO) { - const gfx::ImageSkia* image = + gfx::ImageSkia image = GetRadioButtonImage(delegate->IsItemChecked(GetCommand())); gfx::Rect radio_bounds(icon_x, top_margin + (height() - top_margin - bottom_margin - - image->height()) / 2, - image->width(), - image->height()); + image.height()) / 2, + image.width(), + image.height()); AdjustBoundsForRTLUI(&radio_bounds); - canvas->DrawImageInt(*image, radio_bounds.x(), radio_bounds.y()); + canvas->DrawImageInt(image, radio_bounds.x(), radio_bounds.y()); } // Render the foreground. @@ -843,7 +843,7 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { config.arrow_width) / 2, config.arrow_width, height()); AdjustBoundsForRTLUI(&arrow_bounds); - canvas->DrawImageInt(*GetSubmenuArrowImage(), + canvas->DrawImageInt(GetSubmenuArrowImage(IsSelected()), arrow_bounds.x(), arrow_bounds.y()); } } |