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

Side by Side Diff: chrome/browser/ui/views/toolbar/app_menu.cc

Issue 1661673004: Enables hot-tracking for overflow extension buttons in the app menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restores hot-tracking of extension buttons in app menu with MD (tests) Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/toolbar/app_menu.h" 5 #include "chrome/browser/ui/views/toolbar/app_menu.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 28 matching lines...) Expand all
39 #include "content/public/browser/notification_source.h" 39 #include "content/public/browser/notification_source.h"
40 #include "content/public/browser/notification_types.h" 40 #include "content/public/browser/notification_types.h"
41 #include "content/public/browser/user_metrics.h" 41 #include "content/public/browser/user_metrics.h"
42 #include "content/public/browser/web_contents.h" 42 #include "content/public/browser/web_contents.h"
43 #include "extensions/common/feature_switch.h" 43 #include "extensions/common/feature_switch.h"
44 #include "grit/theme_resources.h" 44 #include "grit/theme_resources.h"
45 #include "third_party/skia/include/core/SkCanvas.h" 45 #include "third_party/skia/include/core/SkCanvas.h"
46 #include "third_party/skia/include/core/SkPaint.h" 46 #include "third_party/skia/include/core/SkPaint.h"
47 #include "ui/base/l10n/l10n_util.h" 47 #include "ui/base/l10n/l10n_util.h"
48 #include "ui/base/layout.h" 48 #include "ui/base/layout.h"
49 #include "ui/base/material_design/material_design_controller.h"
49 #include "ui/base/resource/resource_bundle.h" 50 #include "ui/base/resource/resource_bundle.h"
50 #include "ui/gfx/canvas.h" 51 #include "ui/gfx/canvas.h"
51 #include "ui/gfx/font_list.h" 52 #include "ui/gfx/font_list.h"
52 #include "ui/gfx/image/image.h" 53 #include "ui/gfx/image/image.h"
53 #include "ui/gfx/image/image_skia_source.h" 54 #include "ui/gfx/image/image_skia_source.h"
54 #include "ui/gfx/skia_util.h" 55 #include "ui/gfx/skia_util.h"
55 #include "ui/gfx/text_utils.h" 56 #include "ui/gfx/text_utils.h"
56 #include "ui/views/background.h" 57 #include "ui/views/background.h"
57 #include "ui/views/controls/button/image_button.h" 58 #include "ui/views/controls/button/image_button.h"
58 #include "ui/views/controls/button/label_button.h" 59 #include "ui/views/controls/button/label_button.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // Overridden from views::Background. 157 // Overridden from views::Background.
157 void Paint(gfx::Canvas* canvas, View* view) const override { 158 void Paint(gfx::Canvas* canvas, View* view) const override {
158 CustomButton* button = CustomButton::AsCustomButton(view); 159 CustomButton* button = CustomButton::AsCustomButton(view);
159 views::Button::ButtonState state = 160 views::Button::ButtonState state =
160 button ? button->state() : views::Button::STATE_NORMAL; 161 button ? button->state() : views::Button::STATE_NORMAL;
161 int h = view->height(); 162 int h = view->height();
162 163
163 // Normal buttons get a border drawn on the right side and the rest gets 164 // Normal buttons get a border drawn on the right side and the rest gets
164 // filled in. The left button however does not get a line to combine 165 // filled in. The left button however does not get a line to combine
165 // buttons. 166 // buttons.
167 gfx::Rect bounds(view->GetLocalBounds());
166 if (type_ != RIGHT_BUTTON) { 168 if (type_ != RIGHT_BUTTON) {
167 canvas->FillRect(gfx::Rect(0, 0, 1, h), 169 canvas->FillRect(gfx::Rect(0, 0, 1, h),
168 BorderColor(view, views::Button::STATE_NORMAL)); 170 BorderColor(view, views::Button::STATE_NORMAL));
171 bounds.Inset(gfx::Insets(0, 1, 0, 0));
169 } 172 }
170 173
171 gfx::Rect bounds(view->GetLocalBounds());
172 bounds.set_x(view->GetMirroredXForRect(bounds)); 174 bounds.set_x(view->GetMirroredXForRect(bounds));
173 DrawBackground(canvas, view, bounds, state); 175 DrawBackground(canvas, view, bounds, state);
174 } 176 }
175 177
176 private: 178 private:
177 static SkColor BorderColor(View* view, views::Button::ButtonState state) { 179 static SkColor BorderColor(View* view, views::Button::ButtonState state) {
178 ui::NativeTheme* theme = view->GetNativeTheme(); 180 ui::NativeTheme* theme = view->GetNativeTheme();
179 switch (state) { 181 switch (state) {
180 case views::Button::STATE_HOVERED: 182 case views::Button::STATE_HOVERED:
181 return theme->GetSystemColor( 183 return theme->GetSystemColor(
(...skipping 24 matching lines...) Expand all
206 ui::NativeTheme::kColorId_MenuBackgroundColor); 208 ui::NativeTheme::kColorId_MenuBackgroundColor);
207 } 209 }
208 } 210 }
209 211
210 void DrawBackground(gfx::Canvas* canvas, 212 void DrawBackground(gfx::Canvas* canvas,
211 const views::View* view, 213 const views::View* view,
212 const gfx::Rect& bounds, 214 const gfx::Rect& bounds,
213 views::Button::ButtonState state) const { 215 views::Button::ButtonState state) const {
214 if (state == views::Button::STATE_HOVERED || 216 if (state == views::Button::STATE_HOVERED ||
215 state == views::Button::STATE_PRESSED) { 217 state == views::Button::STATE_PRESSED) {
218 ui::NativeTheme::ExtraParams params;
219 if (ui::MaterialDesignController::IsModeMaterial() &&
220 view->GetClassName() == views::MenuButton::kViewClassName) {
sky 2016/02/23 20:11:13 I'm not a fan of using the class name as a replace
varkha 2016/02/23 21:01:39 I will look if this is possible.
varkha 2016/02/24 01:42:21 Done.
221 // Consistent with a hover corner radius (kInkDropSmallCornerRadius).
222 const int kBackgroundCornerRadius = 2;
223 params.menu_item.corner_radius = kBackgroundCornerRadius;
224 }
216 view->GetNativeTheme()->Paint(canvas->sk_canvas(), 225 view->GetNativeTheme()->Paint(canvas->sk_canvas(),
217 ui::NativeTheme::kMenuItemBackground, 226 ui::NativeTheme::kMenuItemBackground,
218 ui::NativeTheme::kHovered, 227 ui::NativeTheme::kHovered, bounds, params);
219 bounds,
220 ui::NativeTheme::ExtraParams());
221 } 228 }
222 } 229 }
223 230
224 ButtonType TypeAdjustedForRTL() const { 231 ButtonType TypeAdjustedForRTL() const {
225 if (!base::i18n::IsRTL()) 232 if (!base::i18n::IsRTL())
226 return type_; 233 return type_;
227 234
228 switch (type_) { 235 switch (type_) {
229 case LEFT_BUTTON: return RIGHT_BUTTON; 236 case LEFT_BUTTON: return RIGHT_BUTTON;
230 case RIGHT_BUTTON: return LEFT_BUTTON; 237 case RIGHT_BUTTON: return LEFT_BUTTON;
(...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 item->SetMargins(top_margin, bottom_margin); 1137 item->SetMargins(top_margin, bottom_margin);
1131 } 1138 }
1132 1139
1133 if (model->GetTypeAt(i) == MenuModel::TYPE_SUBMENU) 1140 if (model->GetTypeAt(i) == MenuModel::TYPE_SUBMENU)
1134 PopulateMenu(item, model->GetSubmenuModelAt(i)); 1141 PopulateMenu(item, model->GetSubmenuModelAt(i));
1135 1142
1136 switch (model->GetCommandIdAt(i)) { 1143 switch (model->GetCommandIdAt(i)) {
1137 case IDC_EXTENSIONS_OVERFLOW_MENU: { 1144 case IDC_EXTENSIONS_OVERFLOW_MENU: {
1138 scoped_ptr<ExtensionToolbarMenuView> extension_toolbar( 1145 scoped_ptr<ExtensionToolbarMenuView> extension_toolbar(
1139 new ExtensionToolbarMenuView(browser_, this)); 1146 new ExtensionToolbarMenuView(browser_, this));
1147 if (!extension_toolbar->ShouldShow()) {
1148 item->SetVisible(false);
1149 extension_toolbar_ = nullptr;
1150 break;
1151 }
1152 if (ui::MaterialDesignController::IsModeMaterial()) {
1153 for (int i = 0; i < extension_toolbar->contents()->child_count();
1154 ++i) {
1155 View* action_view = extension_toolbar->contents()->child_at(i);
1156 action_view->set_background(new InMenuButtonBackground(
1157 InMenuButtonBackground::RIGHT_BUTTON));
1158 }
1159 }
1140 extension_toolbar_ = extension_toolbar.get(); 1160 extension_toolbar_ = extension_toolbar.get();
1141 if (extension_toolbar->ShouldShow()) 1161 item->AddChildView(extension_toolbar.release());
1142 item->AddChildView(extension_toolbar.release());
1143 else
1144 item->SetVisible(false);
1145 break; 1162 break;
1146 } 1163 }
1147 1164
1148 case IDC_EDIT_MENU: { 1165 case IDC_EDIT_MENU: {
1149 ui::ButtonMenuItemModel* submodel = model->GetButtonMenuItemAt(i); 1166 ui::ButtonMenuItemModel* submodel = model->GetButtonMenuItemAt(i);
1150 DCHECK_EQ(IDC_CUT, submodel->GetCommandIdAt(0)); 1167 DCHECK_EQ(IDC_CUT, submodel->GetCommandIdAt(0));
1151 DCHECK_EQ(IDC_COPY, submodel->GetCommandIdAt(1)); 1168 DCHECK_EQ(IDC_COPY, submodel->GetCommandIdAt(1));
1152 DCHECK_EQ(IDC_PASTE, submodel->GetCommandIdAt(2)); 1169 DCHECK_EQ(IDC_PASTE, submodel->GetCommandIdAt(2));
1153 item->SetTitle(l10n_util::GetStringUTF16(IDS_EDIT2)); 1170 item->SetTitle(l10n_util::GetStringUTF16(IDS_EDIT2));
1154 item->AddChildView(new CutCopyPasteView(this, submodel, 0, 1, 2)); 1171 item->AddChildView(new CutCopyPasteView(this, submodel, 0, 1, 2));
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 0, 1283 0,
1267 BookmarkMenuDelegate::SHOW_PERMANENT_FOLDERS, 1284 BookmarkMenuDelegate::SHOW_PERMANENT_FOLDERS,
1268 BOOKMARK_LAUNCH_LOCATION_WRENCH_MENU); 1285 BOOKMARK_LAUNCH_LOCATION_WRENCH_MENU);
1269 } 1286 }
1270 1287
1271 int AppMenu::ModelIndexFromCommandId(int command_id) const { 1288 int AppMenu::ModelIndexFromCommandId(int command_id) const {
1272 CommandIDToEntry::const_iterator ix = command_id_to_entry_.find(command_id); 1289 CommandIDToEntry::const_iterator ix = command_id_to_entry_.find(command_id);
1273 DCHECK(ix != command_id_to_entry_.end()); 1290 DCHECK(ix != command_id_to_entry_.end());
1274 return ix->second.second; 1291 return ix->second.second;
1275 } 1292 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698